Skip to content

brainstorm-promotion: author agents/content-publisher.md (Wave 2) #27

Description

@reubenr0d

brainstorm-promotion: author the prompt file for the content-publisher brainstorm agent in COMPANY.md.

Background

content-publisher is the X content owner: it reads the next slot from growth/X_CONTENT_CALENDAR.md, surfaces the polished draft as a ticket for the founder, and after the human posts, captures the URL + flips status: posted in the calendar. NEVER auto-posts (governance: human-per-post).

32 drafts already seeded under growth/drafts/ for the Season 1 calendar — the workflow exists, it just needs an agent to drive it consistently.

Spec (lifted from COMPANY.md L316-358)

- id: content-publisher
  state: brainstorm
  title: X Content Publisher
  role: growth-content
  team: growth
  reportsTo: founder
  proposedPromptFile: agents/content-publisher.md
  rationale: >
    32 drafts seeded under growth/drafts/ for the Mon May 25 → Sun Jun 21
    Season 1 calendar. Posting cadence is manual today; one missed slot
    breaks the week's narrative arc. The "edit + post" workflow in
    growth/X_CONTENT_CALENDAR.md is a perfect agent surface: read the
    next slot, surface the polished draft to the founder as a ticket,
    after human posts capture the URL, mark `status: posted` + fill
    `posted_url` in the calendar. NEVER auto-posts.
  proposedScope:
    reads:
      - growth/X_CONTENT_CALENDAR.md
      - growth/drafts/**/*.md
      - growth/templates/**/*.md
      - growth/X_GROWTH_PLAN.md
    writes:
      - growth/X_CONTENT_CALENDAR.md (status + posted_url updates only)
      - growth/drafts/<date>-<type>-<topic>.md (polish-pass diffs, gated by approval)
    ticketsTo: founder
    heartbeat: "0 8 * * *"      # 08:00 UTC, well before the 15:00 / 16:30 UTC posting windows
  proposedSkills: [growth-content]
  proposedMcps:
    - id: repo-editor-mcp
      rationale: read + diff draft files; same allowlist guard as issue-implementer
    - id: twitter-mcp (NEW)
      rationale: optional, read-only at first (fetch posted URL after the fact); writing only after explicit founder opt-in per post
  governance:
    mayCommitToMain: false
    mayOpenGitHubIssues: false
    mayOpenGitHubPRs: true        # for calendar status updates
    mayPostPublicChannel: false   # human-in-the-loop for every X post in v1
    writeApprovalKind: human-per-post
  proposedBudgetUsd: 25

Acceptance criteria

  • New agents/content-publisher.md matching the frontmatter + structure of agents/self-improver-issues.md and agents/issue-implementer.md:
    • Frontmatter: name, description, mcpServers, writeTools, maxTurns (suggest 12), temperature (suggest 0.4), model (suggest gpt-5-codex since this is content-engineering reasoning)
    • Body: clear ## Workflow with numbered steps (read calendar → find next unposted slot → polish draft → propose ticket → wait for human post → capture URL → flip status)
  • Documents the ## Never does boundary explicitly (NEVER auto-posts; NEVER edits already-posted entries; NEVER posts to @indexflowDAO directly — broadcast-bot owns @IndexFlowBots, not this agent).
  • Cites the growth-content skill (brainstorm-promotion: author agents/skills/growth-content.md #23) — agent must read it before drafting.
  • Decides the twitter-mcp question (brainstorm-promotion: build apps/mcps/twitter/ + provision @IndexFlowBots (twitter-mcp) #22): ship v1 read-only? Or omit entirely and have humans fill posted_url manually? Decision documented in the PR description.
  • Add { slug: "content-publisher", sourcePath: "agents/content-publisher.md" } to ACTIVE_RUNNABLE_EMPLOYEES in scripts/sync-paperclip-mirror.mjs.
  • Flip state: brainstorm → state: active in COMPANY.md §Brainstorm and move the entry into §Active.
  • CHANGELOG.md entry timestamped per repo convention.

Lifecycle next steps after PR merges

  1. Operator runs npm run sync:paperclip then npm run paperclip:import to push the new mirror state into Paperclip.
  2. Operator configures the shell adapter for content-publisher in the Paperclip UI (command/args/cwd/env-passthrough per the pattern documented in docs/PAPERCLIP_RUNBOOK.md Phase 4b).
  3. Operator activates the heartbeat schedule (0 8 * * *) in Paperclip.
  4. Smoke test: UI → Employees → content-publisher → Run now. Watch agents/memory/content-publisher/paperclip-heartbeat.json get written.
  5. Update AGENT_DEPLOYMENT_MEMORY.md Paperclip row description with the newly-active employee.

Depends on

References

Open decisions

  • Ship twitter-mcp v1 (read-only) or defer entirely? See L358.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    brainstorm-promotionCOMPANY.md brainstorm-slate promotion campaign: opens via human plan, drafted by issue-implementer.category:new_mcp_or_skillAgent-finding category: propose a new MCP tool or skill.needs-human-workhuman needs to take lead on task, mostly goes beyond a PR

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions