| name | content-manager |
| description | "CMO-style content agent โ observes work activity, produces multi-format drafts with SVG/Mermaid/Excalidraw visuals, pushes to WordPress via MCP. User-facing: 'CMO ์์ด์ ํธ๊ฐ ๋ด ์์
์ ๋ณด๊ณ ์ฝํ
ํธ๋ก ๋ง๋ ๋ค'." |
Content Manager Agent
CMO-style agent that observes Drew's work (sessions, git, kanban) and autonomously produces multi-format blog content with rich visuals. Runs as a daily cron job or on-demand via task().
Architecture
Observer (git log / session_search / kanban_list)
โ Knowledge Base (brand-guide + glossary + narrative_arc + content-inventory)
โ Web Research (optional: related projects, memes, reference images)
โ Story Mining (editorial scoring: reader-value / drew-angle / narrative-fit / platform-fit)
โ Content Production
โโโ Blog post (.md) โ Mermaid diagrams inline
โโโ SVG cover (1200ร630) โ rich illustration using paths/gradients/filters
โโโ SVG meme (optional) โ drake/this-is-fine/galaxy-brain/distracted-boyfriend
โโโ Excalidraw diagram (.excalidraw.json) โ PNG (via headless Chrome)
โโโ X thread (.txt) โ 10-15 tweets
โ WordPress Publishing (via custom MCP server, status: draft)
โ Huly / Kanban Review โ status: published
โ Narrative Arc Update (narrative_arc.md + content-inventory.md)
Design Rules
YOUR_DOMAIN Design System (CSS)
BG: #fafaf8 (warm off-white)
Surface: #ffffff
Border: #e8e7e4
Text: #1c1c1a (primary), #6b6b68 (secondary), #9b9b97 (tertiary)
Accent: #8b7355 (bronze), #7a6349 (accent hover), #d4c4b0 (accent muted)
Heading: Noto Serif KR (serif)
Body: Noto Sans KR (sans-serif)
Mono: JetBrains Mono
Visual Assets โ All $0, No Paid APIs
| Type | Format | Method |
|---|
| Cover image | SVG (1200ร630) | Written as XML by the model โ paths, gradients, filters |
| Architecture diagram | Mermaid or ExcalidrawโPNG | Inline mermaid or headless Chrome screenshot |
| Meme/reference | SVG | Template-based (4 templates built in) |
| Technical illustration | Excalidraw JSON โ PNG | Puppeteer + excalidraw.com embed |
SVG Cover Design Rules
- Background:
#0d0d1a โ #1a1a30 gradient (dark theme for hero images)
- Accent:
#7b5f3d (amber), #4a90d9 (blue), #50c878 (teal)
- Text:
#e8e4df (warm white), #8a8680 (muted), #5a5650 (dim)
- Use: paths, bezier curves, multi-stop gradients, feGaussianBlur filters
- Include: title, subtitle, tags, date, simple illustration matching topic
Key Components
Agent Profile
~/.{{AGENT_NAME_LOWER}}/agents/content-manager.md โ role definition (deepseek-v4-pro, opencode-go)
- Toolsets: terminal, file, search, session_search, kanban, web
- Fires daily at 12:00 KST via cron
- Also triggerable via
task(subagent_type="content-manager", description="Content run", prompt="...")
Knowledge Base
at P4-cortex/content/:
brand-guide.md โ positioning, audience, tone, content pillars (4: Build Log, AI & Tools, Systems, Creative)
glossary.md โ project terms ({{AGENT_NAME}}, Gateway, M-LOG, PDC, etc.)
content-inventory.md โ published/draft tracking + dedup topics
narrative_arc.md โ serial continuity (current season, episodes, threads)
WordPress Stack
- Local Docker (colima VM, 4GBโ8GB RAM, 2 CPU)
- WordPress 6.7 + MySQL 8.0 (arm64)
- Blocksy theme (free) with custom fonts
- Data on Synology NAS mount (
/Volumes/YOUR_NAS/docker/wordpress/)
- Custom MCP server at
~/.{{AGENT_NAME_LOWER}}/scripts/wordpress-mcp-server.js
- 7 MCP tools: create_post, upload_media, list_posts, get_post, create_category, set_site_option, set_theme_mod
Huly Integration (planned)
- Huly Cloud workspace: YOUR_WORKSPACE (huly.app)
- MCP server:
@bgx4k3p/huly-mcp-server@latest (81 tools)
- Key tools: create_issue, list_issues, update_issue, search_issues
- Note: Huly has no outgoing webhooks yet (GitHub #6996, #9187 โ feature requests)
Pitfalls & Lessons
Cron Schedule
- Initially set to
every 3 days โ user corrected: should be DAILY when material exists
- Don't use fixed schedules for content creation โ produce when material is available, stay silent when nothing new
task() Model Override
The agent profile defines model: deepseek-v4-pro, but calling via task(subagent_type="content-manager") may use a different model. In testing, the actual run used deepseek-v4-flash (the parent session's model), not the pro model defined in the profile.
Implication: Delegated content-manager runs get the flash model (faster, cheaper, slightly lower quality). Cron jobs (which use the profile's model directly) use the pro model. If output quality from a delegate_task run seems low, check which model was used โ it may be the flash fallback.
Workaround: For high-quality runs, use the cron trigger or explicitly set model in the task() call parameters.
Image Generation
- DO NOT suggest paid APIs (FAL, DALL-E) first โ the user explicitly rejected extra costs
- SVG cover images cost $0 and the model can write them directly
- Excalidraw JSON โ PNG via Puppeteer works but needs the NODE_PATH env var set
- Mermaid renders natively in Quartz โ no conversion needed
WordPress MCP Server
- Uses
docker exec YOUR_DOMAIN-wp wp --allow-root internally โ WordPress must be running
- Test with
printf '{"jsonrpc":"2.0","id":1,"method":"list_tools"}\n' | timeout 5 node script.js
- Registered in
config.yaml under mcp_servers.wordpress
- The Automattic
wordpress-mcp plugin is installed but has route-registration issues on this setup
NAS Docker Access
- Use
expect scripts for SSH-based Docker commands (Synology requires TTY for sudo)
- sudoers configured for
NOPASSWD: /usr/local/bin/docker
- Key-based SSH auth not available โ always use expect with password
User Preferences (Corrected Behaviors)
- "๋ณํ๋ฅผ ๋๋ ค์ ํ๋ ํ๋จ ๋ฐฉ์์ ํ์์์ด" โ Don't be conservative. Propose and test, don't list objections based on imagination.
- "์์๋ง์ผ๋ก ๊ฒฐ์ ํ๋ ๋ฐฉ์๋ ํ์์์ด" โ Don't decide based on assumptions. Try it first, then evaluate.
- "๋ค๊ฐ ์ง์ ํด์ผ ํ๋๊ฒ ๋ญ์ผ, ๋๋ ๋ชปํด?" โ When asked "can you do X?", just try it. Don't list why you can't.
- "์ด๋ฏธ์ง๋ ๋จธ๋ฉ์ด๋๊ฐ ์๋๋ผ ์ค์ PNG" โ When user says "images in the article", they mean rendered PNGs (like Excalidraw exports), not inline diagrams.
Related Skills & Files
content-pipeline โ older content pipeline (external sources), cross-reference only
~/.{{AGENT_NAME_LOWER}}/scripts/wordpress-mcp-server.js โ WordPress MCP server
~/.{{AGENT_NAME_LOWER}}/scripts/excalidraw-to-png.js โ Excalidraw โ PNG converter
~/.{{AGENT_NAME_LOWER}}/wordpress/docker-compose.yml โ WordPress Docker setup
~/.{{AGENT_NAME_LOWER}}/wordpress/.wp-env โ credentials (chmod 600)