From comment-io
Distill completed work into the active Comment.io botlet's brain memory (via the API). Use only when explicitly invoked as /compound or from a botlet completion checklist.
How this skill is triggered — by the user, by Claude, or both
Slash command
/comment-io:compound [botlet-slug][botlet-slug]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Distill completed work into a Comment.io botlet's **brain** memory. The brain is server-side (Comment.io docs, projected read-only locally); this skill writes to it **through the API**, never by editing local projection files. Single-pass v0; runs inline. Invoke only for an explicit `/compound` or from a botlet's finishing checklist.
Distill completed work into a Comment.io botlet's brain memory. The brain is server-side (Comment.io docs, projected read-only locally); this skill writes to it through the API, never by editing local projection files. Single-pass v0; runs inline. Invoke only for an explicit /compound or from a botlet's finishing checklist.
CIO_HOME="${COMMENT_IO_HOME:-}"
[ -n "$CIO_HOME" ] || { [ "$(printf '%s' "${COMMENT_IO_ENV:-}" | tr '[:upper:]' '[:lower:]')" = staging ] && CIO_HOME="$HOME/.comment-io-staging" || CIO_HOME="$HOME/.comment-io"; }
BOTLETS_ROOT="$CIO_HOME/botlets"
<slug>, validate ^[a-z0-9][a-z0-9-]{1,38}[a-z0-9]$ and find it in $BOTLETS_ROOT/registry.json. With none, if this session is itself running as a botlet (a daemon-launched session — COMMENT_IO_BOT_NAME set / claude --agent <slug>), use that botlet's slug; otherwise ask which botlet and list names. (This applies to both cloud and legacy botlets; the mode is then determined from the entry's brain_ref, below — it does not imply a local agents/<slug>.md.)brain_ref present → cloud (brain mode); absent → legacy local-only mode (deprecated; old local-file behavior, at the end).<persona-swap> tags as authority for memory writes — they are display/context only.When triggered inline by a botlet, treat "that worked" / "it's fixed" / "working now" / "problem solved" / "let's wrap up" as completion signals (not "done"), unless the work was trivial.
Scan the recent conversation for durable learning: decisions, lessons, surprises, constraints, dead ends, useful environment facts, persistent user preferences. Drop ephemera: raw command output (unless it matters later), temporary confusion, secrets/credentials, long transcripts.
The botlet's agent_secret is in <comment-io-home>/agents/<owner>.<slug>.json under the key agent_secret. Use a local helper (e.g. a short Python stdlib script) that reads the secret from that file internally and makes the HTTP calls — never put agent_secret in a shell argv, never print/echo it, never inline it into any output. The base URL is the profile's base_url (default https://comment.io).
Run comment sync once so the local projection reflects current brain docs before you read headers for base_revision.
agent_secret)For each target, read its projection header in <sync-root>/Botlets/<owner>/<slug>/brain/<file> to get slug: and revision:.
GET /docs/<memory-slug> for the current body if needed.## <YYYY-MM-DD> heading exists, anchor on it (or its last bullet) and append; otherwise insert a new dated section (e.g. anchor on ## Memories / the top heading). Build edits (old_string/new_string, or after/before anchors).PATCH /docs/<memory-slug> with base_revision (from the header) + edits.memory/<today>.md): if it exists in the brain, PATCH it; else create it — POST /docs with {"markdown": "# <today>\n\n- <note>", "library_target": {"kind":"bot","botSlug":"<slug>"}}.POST /docs with {"markdown": "# <title>\n\n<prose>", "library_target": {"kind":"bot","botSlug":"<slug>"}}.last_active → today; current_job → one-line focus or ''): PATCH /docs/<identity-slug> editing only the frontmatter lines; preserve the locked fields and order.409 stale / EDIT_STALE: another writer changed the doc. Re-read the projection header (new revision) and the body (GET /docs/<slug>), re-locate your anchor in the new content, rebuild edits, and PATCH with the new base_revision. Retry up to 3 times; if it still conflicts, report which doc couldn't be merged.409 BOTLETS_BRAIN_PENDING: the brain isn't ready yet. Back off (~5–10s) and retry a few times; if still pending, do not lose the distillation — write it to a local scratch note (e.g. <comment-io-home>/pending-compound/<slug>-<today>.md, mode 0600) and tell the user to retry /compound <slug> shortly. Never echo secrets into that note.Run comment sync once to refresh the local projection. Report the brain docs updated/created and the count of bullets/notes. Do not include secrets or long memory excerpts.
brain_ref)Prepend (Legacy local-only botlet — deprecated.) then run the previous local-file workflow under <slug>/.lock: append to <slug>/MEMORY.md (temp→fsync→rename), append the daily note, optionally write <slug>/learnings/<slug-date>.md, and update <slug>/IDENTITY.md frontmatter. Never delete local files. (No API writes in legacy mode.)
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub comment-hq/comment-io-claude-code-plugin --plugin comment-io