🤖

launch-brief-publisher · my-agent/ overview

DEPLOYED · LIVE

左:Claude Code 跑完 /launch-your-agent 后落在你本机 ./my-agent/ 下的 6 份产物——build-sheet.json · agent.json · outcome.md · first_prompt.txt · agent-overview.html · NEXT-DIRECTIONS.md,点开即可看首屏摘要。中:build-sheet.json 里那些真正驱动 Managed Agent 行为的字段——agent / outcome / tools / memory / eval / next-directions——每张卡对齐一个 CMA primitive。右:你自己 Anthropic Console 里那台 agent 现在的样子——running、最近一次 graded run 的 rubric verdict、以及(如果开启了 scheduled deployment)下一次触发时间。右栏所有的 workspace / agent / session ID 都是明显的 demo-… 合成值;每一次你真跑一遍课程,都会得到你自己的真实 ID,Console 里那些 pill 会点进真页面。

./my-agent/ · six files

📂 project files 6 real

  • build-sheet.jsonsource of truth
    {
      "meta": { "founder": "demo-user",
                "problem": "2h/launch turning brief.md
                  into internal + investors + twitter" },
      "agent": { "name": "launch-brief-publisher",
                 "model": "claude-opus-4-8",
                 "system_summary": "reads ./brief.md;
                   writes 3 tone-tuned files to
                   /mnt/session/outputs/" },
      "outcome": { "rubric_criteria": [ ... 5 rows ],
                   "max_iterations": 3 },
      "tools":   { "toolset":
                     "agent_toolset_20260401",
                   "enabled": [read,write,edit,glob,grep] }
      ...
    }
  • agent.jsonCMA create payload
    {
      "name": "launch-brief-publisher",
      "model": "claude-opus-4-8",
      "environment_id": "env_demo_launch_brief_publisher",
      "system": "You are launch-brief-publisher.
        Read ./brief.md and produce three tone-tuned
        files in /mnt/session/outputs/ (internal.md,
        investors.md, twitter.md) quoting the launch
        date, headline number, and CTA verbatim…",
      "tools": [
        { "type": "agent_toolset_20260401" }
      ],
      "mcp_servers": [],
      "resources": [{
        "type": "memory_store",
        "name": "voice-samples",
        "access": "read_write"
      }],
      "skills": []
    }
  • outcome.md6 binary rows · rubric.content
    # Outcome — launch-brief-publisher
    
    Definition of done. Per-run grader (embedded
    as rubric.content on every session) AND the
    held-back regression check for case-02/03.
    
    Every criterion is binary — either it lands
    or it doesn't. Split anything that starts
    feeling scalar.
    
    1. All three files exist in
       /mnt/session/outputs/
    2. Each file quotes brief.md's launch date,
       headline number, CTA verbatim
    3. internal.md reads like Slack — ≥1 emoji
    4. investors.md is one paragraph, ends with
       an explicit ask
    5. twitter.md is a 5–9 tweet thread; tweet 1
       hook, last tweet CTA link
    6. No claim without a source pointer or
       an explicit "assumption:" tag
    
    max_iterations: 3 (only knob to stop grind)
  • first_prompt.txtkickoff task
    You are launch-brief-publisher. Read
    ./brief.md and produce three release notes
    in /mnt/session/outputs/ that quote the
    launch date, headline number, and CTA from
    brief.md verbatim.
    
    The three files:
      - internal.md   Slack, ≥1 emoji
      - investors.md  1 paragraph, milestone-first
      - twitter.md    5–9 tweet thread
    
    Rules:
      - Never invent dates, dollar amounts,
        headcount, or customers not in brief.md
      - Never post or send — output is markdown
      - Every claim: source line pointing back
        to brief.md OR "assumption:" prefix
    
    Grade against outcome.md. Eval case for
    this run lives at ./evals/case-01/
  • agent-overview.htmllive agent schema
    <link rel="stylesheet" href="overview.css">
    
    Live schema of the app:
     • top bar (statepill, model slug,
       agent/session IDs as Console deep links)
     • trigger → worker in env frame → output
       (🤖 agent · 🛠️ tools · 🔌 connectors ·
        🧠 memory · 📄 skills · 🎯 outcome)
     • sessions run-log (fed by
       evals/results-v<N>.json) + evals table
     • v1/v2/v3 version rail
    
    The launch-your-agent skill Edits slots in
    place after each iteration — no full
    re-Write of this file after Phase 1.
  • NEXT-DIRECTIONS.mdv1 · v2 · v3
    # v1 — Post internal.md into #launches
      How: Slack MCP + vault; toolset
           always_ask; grader adds
           "post confirmed" row.
    
    # v2 — Tone QA pass before returning
      How: author tone-checker custom skill,
           add "tone-verdict = pass" row.
    
    # v3 — Trigger from brief.md commit push
      How: GitHub webhook → POST
           /v1/deployments/<id>/run with
           brief text as initial_events.
    
    # always — re-run held-back evals before
      promoting the deployment.

build-sheet.json · CMA primitives

🧾 the brief, as CMA fields v0 shipped

the founder's own words
“Every time we ship a feature I spend ~2 hours turning the launch brief markdown into three separate release notes — the tones diverge, the dates drift, the CTA gets lost in one of them.”
🤖agent· system + model
launch-brief-publisher · claude-opus-4-8

Reads ./brief.md; writes three tone-tuned files (internal.md / investors.md / twitter.md) to /mnt/session/outputs/. Never invents dates, numbers, or customers not in the brief. Never posts or sends — output is markdown files only.

🛠️tools[]· agent_toolset_20260401
read write edit glob grep bash web_search web_fetch

Networking off, no web — the brief is the whole world for this agent.

🎯outcome· user.define_outcome · max_iterations 3
  1. All three files exist in /mnt/session/outputs/
  2. Each file quotes the launch date, headline number, and CTA from brief.md verbatim
  3. internal.md reads like Slack — short paragraphs, at least one emoji, no marketing polish
  4. investors.md is one paragraph, milestone-first, ends with an explicit ask
  5. twitter.md is a 5–9 tweet thread; tweet 1 hook, last tweet CTA link
🧠resources[] · memory_store
voice-samples read_write

Anchors the tone across launches — stores the last 3 approved outputs so the next launch's voice stays consistent.

🧪evals· 3 cases · 1 verified
case-01 · pass · v1 case-02 · held back case-03 · held back

Case 1 is the 2026-07-05 reactive-mode launch we already shipped — the founder's own drafts are the known-good answer in evals/case-01/expected/.

🧭next_directions· the version rail
v1 · Post internal.md to #launches via Slack MCP + vault (always_ask gated).
v2 · Custom tone-checker skill runs a second pass on each file.
v3 · Fire from a brief.md commit push via GitHub webhook → POST /v1/deployments/<id>/run.

Anthropic Console · demo view

🖥️ managed agents demo values

platform.claude.com / workspaces / demo-workspace healthy
🤖 launch-brief-publisher
agent_demo_launch_brief_publisher · v1 · claude-opus-4-8
RUNNING
environment
env_demo_launch_brief_publisher · cloud · networking off
last session
sesn_demo_20260712_case_01 · 2 min ago
next run
on-demand · triggered by LAUNCH.md

Last graded run · verdict

sesn_demo_20260712_case_01
3 files brief quotes Slack tone investor ask thread hook
5/5 · pass
sesn_demo_20260712_iter_2
3 files brief quotes Slack tone investor ask thread hook
4/5 · iterate
🗓️ scheduled deploymentnot set for v0
next fireon-demand only
upgrade pathv3 → GitHub webhook
Every ID prefixed demo-… or agent_demo_… is a synthetic placeholder for this course preview — no real workspace, no real key, no real session. When you run /launch-your-agent in your own Claude Code against your own Anthropic API key, the same layout appears in your ./my-agent/agent-overview.html with your real workspace ID, your real agent version, and clickable deep links into platform.claude.com. Full course: clawvard.school/courses/launch-your-cma-agent.