Replace Claude-based link building with direct subprocess calls to
Big-Link-Man CLI. The build stage now runs ingest-cora + generate-batch
deterministically without LLM involvement.
- New clickup_runner/blm.py: BLM subprocess runner (ported from old linkbuilding.py)
- New handler="blm" in skill_map for Link Building build stage
- Add BLMConfig to config.py (blm_dir, cora_inbox, timeout)
- Add task-specific fields (Keyword, CLIFlags, etc.) to build_prompt
- Strip YAML frontmatter from skill files in read_skill_file
- Skip orphaned AutoCora results with no state DB entry
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The leading --- in YAML frontmatter was being interpreted as a CLI
option by `claude -p`, causing "unknown option" errors.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Added ClickUpClient.download_attachment() for fetching attachment files
- Runner now downloads all task attachments to the temp work dir before
dispatching to claude -p. Claude reads local files instead of URLs.
- build_prompt() now lists local filenames, not ClickUp attachment URLs
- _collect_output_files() excludes pre-existing attachments so they
don't get re-uploaded back to ClickUp
- Removed optimizer script steps from content_draft.md -- the outline
stage already handles Cora parsing, draft just follows the outline
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Rewrote skills/press_release_prompt.md for headless claude -p execution:
generates 7 headlines, self-judges top 2, writes TWO complete press
releases with different angles, generates JSON-LD schema for each
- Output: 5 files named by headline (e.g. "Company Headline Here.txt/.json")
- Merged schema generation from press-release-schema.md into single skill
- Added "Introduces" to headline tone trigger words
- Removed --bare flag from claude_runner.py (breaks OAuth auth)
- Documented headline tone trigger words in clickup-task-creation.md
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The ClickUp dropdown is named "Client", not "Customer". Updated field
lookups, prompt labels, README docs, and all tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implements _dispatch_claude: reads skill files, builds prompts with task
context, runs claude -p as subprocess, uploads output files to ClickUp,
copies to NAS, advances stage/status, and posts structured error comments
on failure. Includes ntfy.sh notifications and generous max_turns defaults.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>