Install
$ agentstack add skill-humanerd-drew-opencode-drewgent-content-manager ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
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→#1a1a30gradient (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 topicsnarrative_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: createpost, uploadmedia, listposts, getpost, createcategory, setsiteoption, settheme_mod
Huly Integration (planned)
- Huly Cloud workspace: YOUR_WORKSPACE (huly.app)
- MCP server:
@bgx4k3p/huly-mcp-server@latest(81 tools) - Key tools: createissue, listissues, updateissue, searchissues
- 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-rootinternally — WordPress must be running - Test with
printf '{"jsonrpc":"2.0","id":1,"method":"list_tools"}\n' | timeout 5 node script.js - Registered in
config.yamlundermcp_servers.wordpress - The Automattic
wordpress-mcpplugin is installed but has route-registration issues on this setup
NAS Docker Access
- Use
expectscripts 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)
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: humanerd-drew
- Source: humanerd-drew/opencode-drewgent
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.