con un clic
add-compact
// Add /compact command for manual context compaction. Solves context rot in long sessions by forwarding the SDK's built-in /compact slash command. Main-group or trusted sender only.
// Add /compact command for manual context compaction. Solves context rot in long sessions by forwarding the SDK's built-in /compact slash command. Main-group or trusted sender only.
Add image vision to ClaudeClaw agents. Resizes and processes WhatsApp image attachments, then sends them to Claude as multimodal content blocks.
Add Ollama MCP server so the container agent can call local models for cheaper/faster tasks like summarization, translation, or general queries.
Add PDF reading to ClaudeClaw agents. Extracts text from PDFs via pdftotext CLI. Handles WhatsApp attachments, URLs, and local files.
Add Agent Swarm (Teams) support to Telegram. Each subagent gets its own bot identity in the group. Requires Telegram channel to be set up first (use /add-telegram). Triggers on "agent swarm", "agent teams telegram", "telegram swarm", "bot pool".
Switch from Docker to Apple Container for macOS-native container isolation. Use when the user wants Apple Container instead of Docker, or is setting up on macOS and prefers the native runtime. Triggers on "apple container", "convert to apple container", "switch to apple container", or "use apple container".
Debug container agent issues. Use when things aren't working, container fails, authentication problems, or to understand how the container system works. Covers logs, environment variables, mounts, and common issues.
| name | add-compact |
| description | Add /compact command for manual context compaction. Solves context rot in long sessions by forwarding the SDK's built-in /compact slash command. Main-group or trusted sender only. |
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.