From claudeclaw
Adds /compact slash command to ClaudeClaw for manual context compaction in long agent sessions using SDK's built-in feature. Restricted to main-group or trusted senders.
npx claudepluginhub sbusso/claudeclawThis skill uses the workspace's default tool permissions.
Adds a `/compact` session command that compacts conversation history to fight context rot in long-running sessions. Uses the Claude Agent SDK's built-in `/compact` slash command — no synthetic system prompts.
Conducts multi-round deep research on GitHub repos via API and web searches, generating markdown reports with executive summaries, timelines, metrics, and Mermaid diagrams.
Dynamically discovers and combines enabled skills into cohesive, unexpected delightful experiences like interactive HTML or themed artifacts. Activates on 'surprise me', inspiration, or boredom cues.
Generates images from structured JSON prompts via Python script execution. Supports reference images and aspect ratios for characters, scenes, products, visuals.
Adds a /compact session command that compacts conversation history to fight context rot in long-running sessions. Uses the Claude Agent SDK's built-in /compact slash command — no synthetic system prompts.
Session contract: /compact keeps the same logical session alive. The SDK returns a new session ID after compaction (via the init system message), which the agent-runner forwards to the orchestrator as newSessionId. No destructive reset occurs — the agent retains summarized context.
Check if src/session-commands.ts exists:
test -f src/session-commands.ts && echo "Already applied" || echo "Not applied"
If already applied, skip to Phase 3 (Verify).
Merge the skill branch:
git fetch upstream skill/compact
git merge upstream/skill/compact
Note:
upstreamis the remote pointing tosbusso/claudeclaw. If using a different remote name, substitute accordingly.
This adds:
src/session-commands.ts (extract and authorize session commands)src/session-commands.test.ts (unit tests for command parsing and auth)src/index.ts (both processGroupMessages and startMessageLoop)agent/runner/src/index.tsnpm test
npm run build
./src/runtimes/docker/build.sh
Service name: Derived from the directory name:
com.claudeclaw.<dirname>(macOS) /claudeclaw-<dirname>(Linux). For example, if cwd ismy-assistant, the service iscom.claudeclaw.my-assistant. Determine the correct service name before running service commands below.
launchctl kickstart -k gui/$(id -u)/com.claudeclaw # macOS
# Linux: systemctl --user restart claudeclaw
npm run dev/compactgroups/{folder}/conversations/ (by the PreCompact hook)Compact boundary observed (confirms SDK actually compacted)compact_boundary was NOT observed, the response says "compact_boundary was not observed"@<assistant> /compactis_from_me), send: @<assistant> /compact/compact/compact, then another normal message in quick succession (same polling batch):runAgent calls)/compact in the batch are preserved (cursor advances to /compact's timestamp only) and processed on the next poll cycle@<assistant> /compact:/compact is consumed (cursor advanced) — it does NOT replay on future polls/compact + other messages in the same polling interval)requiresTrigger enabled) as a non-admin user, send bare /compact (no trigger prefix):/compact is consumed silentlyrequiresTrigger is false, a denial message IS sent because the sender is considered reachable/compact triggers itgit clone <your-fork> /tmp/claudeclaw-test
cd /tmp/claudeclaw-test
claude # then run /add-compact
npm run build
npm test
./src/runtimes/docker/build.sh
# Manual: send /compact from main group, verify compaction + continuation
# Manual: send @<assistant> /compact from non-main as non-admin, verify denial
# Manual: send @<assistant> /compact from non-main as admin, verify allowed
# Manual: verify no auto-compaction behavior
docs/SECURITY.md). Non-main groups are untrusted — a careless or malicious user could wipe the agent's short-term memory. However, the device owner (is_from_me) is always trusted and can compact from any group.PreCompact hook in the agent-runner archives the full transcript to conversations/ before the SDK compacts it./clear command (separate skill, separate semantics — /clear is a destructive reset)is_from_me) or main-group senders can use /compact. Other users are denied./compact fail to process, the error message says "Failed to process messages before /compact." The cursor advances past sent output to prevent duplicates; /compact remains pending for the next attempt.