PR skill now matches ClickUp Client names against Aliases field in
companies.md and uses the canonical ## heading as the company name.
Fixes issue where PRs used ClickUp dropdown names (e.g. "Elasto Valve
Rubber (EVR)") instead of the correct company name ("EVR Products").
Added James Eagen Sons stub entry.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Automates the PR delivery workflow: uploads .docx to Google Drive as Google Docs,
creates Gmail drafts with template-based emails and Ref: CU-<task_id> tracking tags,
and polls for client replies to update ClickUp tasks. Includes contact directory
with alias support, email template system, and manual CLI scripts for retries.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix --tier-1 -> --tier1-count in create_task_set.py and create-task-set.md skill
- Set initial Stage field when creating tasks (run_cora for most, draft for PR)
- Add Quick Reference section to clickup_runner README with stage tables
- Add Stage field docs to clickup-task-creation.md
- Remove stale xlsx_urls tests from test_claude_runner.py
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New script replaces inline task creation commands with a proper CLI.
Supports all task types (NEW/OPT/LINKS/PR) with validation, dependencies,
per-type tag/date overrides, and custom fields.
Updated companies.md: renamed RPM Mechanical to RPM Industrial Rubber Parts,
added Royal Purple Industrial entry.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add add_dependency() to ClickUpClient and clickup_add_dependency chat tool
for setting "blocked by" relationships between tasks. New create-task-set
skill enables bundled task creation (LINKS, PR, NEW, OPT) with correct
fields, time estimates, due date offsets, and automatic dependencies.
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>
- New skills/content_draft.md: reads outline, writes full content draft
with Cora-driven variation/entity/LSI optimization, generates meta tags
(keyword | company | related searches format, 400-500 char description)
- Changed entity correlation threshold from -0.19 to -0.199 in
cora_parser.py and all referencing docs
- Updated content_outline.md to match new threshold
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Clean editable outline on top (headings, word counts, section briefs),
writer's reference data on bottom (variation map, entity checklist,
top 20 LSI terms, entity rules). One file instead of two -- easier to
review on mobile via ClickUp attachments.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
First pass at the content outline skill for clickup_runner. Parses Cora
xlsx via cora_parser.py scripts, researches competitors, builds structured
outline with per-section word counts and variation placement. Produces
two output files: clean outline and Cora data reference.
May be reworked to single-file format after testing.
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>
New create_task() and find_list_in_folder() methods on ClickUpClient,
clickup_create_task chat tool, create-task skill, and CLI script for
creating tasks in a client's Overall list with Client/Work Category fields.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New watcher thread scans Z:/Cora-For-Human for post-macro Cora xlsx files,
matches them to ClickUp tasks by keyword, and copies to the appropriate
pipeline inbox (Z:/cora-inbox for Link Building, Z:/content-cora-inbox for
Content/OPO). Fixes issue where shared Cora reports left one pipeline's
tasks stuck in automation underway forever.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Pass scheduler instance to API router and UI for loop timestamps
and force-run endpoints
- Add interruptible waits and force_heartbeat/force_poll methods
- Record last_run timestamps for all scheduler loops in KV store
- Update press release headline examples with real client headlines
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- /api/linkbuilding/status endpoint returns pending, in-progress,
completed, and failed pipeline states for dashboard consumption
- skills/linkbuilding.md with YAML frontmatter linking tools and agents
- Skill body documents workflow, triggers, default flags, and ClickUp fields
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New linkbuilder agent that handles ClickUp "Link Building" tasks.
For each keyword/company, generates three content pieces via the
execution brain: a guest article (500-700 words), a directory
listing, and a social media post — each with proper SEO anchor
text and backlinks. Integrates with ClickUp for status updates,
comments, and file attachments.
- cheddahbot/tools/linkbuilding.py: build_links tool with full pipeline
- skills/linkbuilding.md: skill prompt for SEO content generation
- config.yaml: linkbuilder agent config + Link Building skill_map entry
- tests/test_linkbuilding.py: 36 tests covering helpers, prompts,
pipeline, file output, error handling, and ClickUp sync
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Both press release skill files now include:
- tools: lists which tool functions they relate to
- agents: [writer, default] for future multi-agent filtering
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove unused modules that were never called at startup:
- cheddahbot/skills/__init__.py (dead @skill decorator system)
- cheddahbot/providers/__init__.py (empty placeholder)
- cheddahbot/tools/build_skill.py (depends on dead skills system)
- cheddahbot/tools/build_tool.py (security risk: generates arbitrary Python)
Also fix all pre-existing ruff lint errors across the codebase:
- Fix import sorting, unused imports, line length violations
- Fix type comparisons (use `is` instead of `==`)
- Fix implicit Optional types (dict -> dict | None)
- Fix unused variables, ambiguous variable names
- Apply ruff format for consistent style
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds PressAdvantageClient API wrapper and submit_press_release tool that
posts finished press releases to PA as drafts. Auto-constructs SEO links
(brand+keyword → IMSURL, company name → SocialURL/GBP/homepage) with
fuzzy anchor matching and warnings when phrases can't be found. The PR
writing prompt now requests anchor text phrases and validates them after
generation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements write_press_releases tool that generates 7 headlines via chat
brain, AI-judges the best 2, writes 2 full press releases via execution
brain, and generates JSON-LD schemas via Sonnet with WebSearch. Saves all
output files to data/generated/press_releases/.
Also adds tools/model pass-through in agent and LLM layers, fixes Windows
command line length limit by piping prompts via stdin, and updates model
references to current versions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>