Changelog
Roadmap
| Phase | Status |
|---|---|
| Phase 1 -- Clawfile parser + build | Done |
| Phase 2 -- Driver framework + pod runtime + OpenClaw + volume surfaces | Done |
| Phase 3 -- Surface manifests, service skills, CLAWDAPUS.md | Done |
| Phase 3.5 -- HANDLE directive + social topology (Discord, Telegram, Slack) | Done |
| Phase 3.6 -- INVOKE scheduling + Discord config wiring | Done |
| Phase 3.7 -- Social topology: mentionPatterns, allowBots, peer handle users | Done |
| Phase 3.8 -- Channel surface bindings | Done |
| Phase 4 -- Shared governance proxy integration + credential starvation | Done |
| Phase 4.5 -- Interactive claw init & claw agent add (canonical layout) | Done |
| Phase 4.7 -- Nanobot + PicoClaw + NullClaw + MicroClaw drivers | Done |
| Phase 4.8 -- Hermes driver + shared helper extraction | Done |
| Phase 4.9 -- Peer handles, mention safety, healthcheck passthrough | Done |
| Phase 4.10 -- Capability evolution wave: compiled tools + memory plane | Done (ADRs 020-021) |
| Phase 4.6 -- Unified worker architecture (config, provision, diagnostic) | Design |
| Phase 5 -- Fleet Governance: Master Claw, telemetry, context feeds | Done (ADRs 012-015) |
| Phase 6 -- Recipe promotion + worker mode | Planned |
Unreleased
v0.17.3 Latest
2026-05-18
- cllama feed injection budgets are configurable — cllama previously capped every injected feed at a hard-coded 32 KB and the aggregate feed block at 64 KB, so a pod that raised its 24h
channel-awarenesswindow past those limits would still have the provider-visible context silently truncated or dropped, with earlier feeds (market/style context) crowding out live channel awareness in an all-or-nothing budget. Both caps are now tunable viaCLLAMA_FEED_MAX_RESPONSE_BYTESandCLLAMA_FEED_MAX_TOTAL_BYTES, set throughx-claw.cllama-defaults.env(or service-levelx-claw.cllama-env). Defaults stay bounded at 32 KB / 64 KB and invalid values fall back to the defaults, so the knob cannot accidentally unbound prompt injection. When the aggregate cap does drop a feed, the model now sees an explicit--- FEED: <name> skipped (...) ---notice instead of the feed vanishing silently, and cllama emits a structuredfeed_injectiontelemetry event per feed (included/empty/skipped_total_cap) with source/content/block byte counts and effective caps. Context snapshots store the actual provider-visible blocks. Closes #244. - claw-wall retention uses one clock — Discord forward polling, gap recovery, and retrieval now route retention trims through the same injected/request clock instead of mixing that clock with host wall time. This keeps retained channel history from being pruned incorrectly during backfill/retrieval and makes the gap-recovery regression tests deterministic. Closes #246.
- Pins infra images — cllama moves to
v0.6.7(configurable feed budgets).claw-wall,claw-api,clawdash, andclaw-mcp-stdiomove in lockstep tov0.17.3. Hermes-base stays atv2026.4.23-claw.2.
v0.17.2
2026-05-13
- Channel feeds carry the whole conversation, not just the tail — the default
max_charscap on bothchannel-contextandchannel-awarenessfeeds is raised from 8 KB to 32 KB so 24h on a modestly-active channel actually fits, andchannel-awarenessnow honors the existingx-claw.context.channeltuning block (pod and service level). One knob raises both feeds together; busy production rooms can crankmax-charsto 64-256 KB so the awareness surface covers a meaningful slice of the day rather than the last handful of messages. Closes #242. - Pins infra images at
v0.17.2—claw-wall,claw-api,clawdash, andclaw-mcp-stdiomove in lockstep tov0.17.2. cllama stays atv0.6.6. Hermes-base stays atv2026.4.23-claw.2.
v0.17.1
2026-05-13
- Managed tool calls resolve when models emit hashless aliases — managed tool name resolution between the proxy schema and the system prompt is realigned end-to-end. cllama v0.6.6 now accepts unique sanitized aliases without the disambiguation hash (e.g.
claw-wall_search_channel_context) in addition to the canonical dotted name and the full hashed presented name, with ambiguous aliases left unresolved and fallback use logged asmanaged_tool_hashless_alias:<canonical>. The[channel-tool]result header reinforces the provider-safe schema name on every mediated turn, and generatedCLAWDAPUS.mdnow lists the callable provider-safe name first with the canonical dotted name retained as parenthetical metadata. Before this release, models running on Anthropic-format runners emitted the sanitized canonical without the hash because the prompt and the schema disagreed; cllama classified those calls as runner-native and the runner correctly rejected them as nonexistent. Closes #240. - Pins cllama v0.6.6 and infra images at
v0.17.1—claw-wall,claw-api,clawdash, andclaw-mcp-stdiomove in lockstep tov0.17.1. Hermes-base stays atv2026.4.23-claw.2.
v0.17.0
2026-05-13
- Restart-resilient Discord channel awareness -
claw-wallnow paginates Discord history backward on startup to fill the configured retention window (default24h) before its first forward poll, and uses the same bounded walk to recover full-page poll gaps. The wall retains by time plus a 5000-message safety cap (raised from 500), generated sidecars exposeCLAW_WALL_RETENTIONandCLAW_WALL_BACKFILL_MAX_PAGES, and channel feed headers includebackfill_status=complete|partial|rate_limited|unavailableso short windows are visible instead of silent. The auto-injected sidecar also honors aCLAW_WALL_DISCORD_BASE_URLenv override so contributor spike tests can run against a fake Discord. Closes #238.
v0.16.0
2026-05-12
- Agent-authored skills now survive
claw up— every managed claw with a driver-reported skill directory gets a writable persistent mount at.claw-skills/<claw-id>/skills/, outside the regenerated.claw-runtimetree. Compile-timeSKILLfiles, reference includes, and service manuals still mount read-only over that directory, so generated/operator-owned skills remain immutable while runner-created skills persist beside them. Underx-claw.count > 1, each ordinal gets its own.claw-skills/<service>-<N>/skills/so per-claw self-authored skills do not collide. Closes #235.
v0.15.0
2026-05-12
- Bounded 24h channel awareness, default-on — every Discord-channel-consuming service now gets an auto-wired
channel-awarenessfeed fromclaw-wall: an uncursored last-24h raw window bounded by internal defaults (limit=60,max_chars=8192). Cursorizedchannel-contextdeltas remain the steady-state feed for routine and cron turns; the new feed exists so a human reference like "wanna pick up CMCSA on Logan's read?" no longer hits the wall just because the consumer's cursor has advanced past that earlier message. Zero new pod YAML — phase 1 ships without a public config surface so the defaults can keep moving. Refs #232. - Channel retrieval tools, cllama-mediated — channel-consuming agents are auto-subscribed to two managed tools projected through cllama:
search_channel_context(query, channels, since, author, limit)andget_channel_messages(channels, since, limit, max_chars). Calls are mediated by a generated per-agent channel allowlist, claw-wall service-token auth, and forwardedX-Claw-IDidentity; defense-in-depth checks live on the claw-wall side as well. The compiler now owns a built-in claw-wall descriptor so consumers don't need to know wall paths or auth shape. context_kindmetadata on channel-context fetches — provider-visible blocks and audit logs now distinguishtail(initial bootstrap),delta_tail(steady-state cursorized), andbootstrap_tail(post-restart no-cursor catchup from v0.14.7). Models can stop conflating a cursorized delta with the full 24h room, andchannel_context_optelemetry lets operators see retrieval intent end-to-end.- Pins cllama v0.6.5 and infra images at
v0.15.0—claw-wall,claw-api,clawdash, andclaw-mcp-stdiomove in lockstep tov0.15.0. Hermes-base stays atv2026.4.23-claw.2. - Phase 2 deferred — rolling 24h digest / channel-memory work stays on #232 so the raw-window primitive can settle in production before the salience layer goes on top.
v0.14.9
2026-05-11
- Hermes Slack handles get Discord-parity defaults — Hermes-managed agents with a Slack handle now run in tool-only mode with
HERMES_TOOL_PROGRESS_MODE=off, shipSLACK_REQUIRE_MENTION=trueby default, and disabletext_to_speechunless explicitly opted in viax-claw.hermes.allow-tools. Override knobs (SLACK_ALLOW_BOTS,SLACK_ALLOW_ALL_USERS,SLACK_FREE_RESPONSE_CHANNELS,SLACK_REACTIONS,SLACK_REQUIRE_MENTION) now pass through the Hermes.envallowlist so pod authors can tune quiet-channel behavior without forking the driver. Discord-specific reply-mention defaulting stays Discord-only. Closes #229. claw initandclaw agent addscaffold Slack socket mode correctly — Slack scaffolds now includeSLACK_APP_TOKENalongsideSLACK_BOT_TOKENandSLACK_BOT_IDin both the generated podenvironment:block and.env.example, matching the socket-mode requirement Hermes upstream enforces. The quickstart Slack note calls out the socket-mode token requirement.
v0.14.8
2026-05-09
claw up --fixrefreshes runtime-emitted descriptors — when a tool allowlist points at a build-backed provider whose.claw-describe.jsonis emitted at runtime (Rails-style boot-time introspection),claw up --fix -dnow rebuilds the provider, brings it up through the existingcompose.generated.yml, snapshots the runtime descriptor into.claw-discovered/, and retries capability resolution before final apply. Strictclaw up -dstays strict but its error message now points operators directly atclaw up --fix -dinstead of the manualdocker compose build → up → cp → upincantation. First deploys without an existingcompose.generated.ymlstill fail loudly. Closes #224.claw compose buildno longer blocks on stale generated compose — building a single service image only needs the existingservices.<name>.buildblock, soclaw compose build <svc>now downgrades the staleness guard to a warning that reminds you to runclaw upafterward to apply pod-level changes. Otherclaw composesubcommands (ps,logs,up, etc.) keep the strict guard. The carve-out applies to the literalbuildsubcommand only —claw compose --progress=plain build foostill trips the strict guard. Refs #222.
v0.14.7
2026-05-09
- Channel context bootstraps on consumer restart — cllama now stores an optional consumer session epoch alongside per-agent
channel-contextcursors and suppressesafter=for the first successful fetch after a runner restart. Hermes-base generatesCLLAMA_CONSUMER_SESSION_EPOCHat container boot and attachesX-Claw-Consumer-Session-Epochonly on in-pod cllama OpenAI-compatible requests; cllama keeps that header internal and does not forward it to upstream providers. This release pins cllama v0.6.4 andghcr.io/mostlydev/hermes-base:v2026.4.23-claw.2. Closes #220.
v0.14.6
2026-04-30
- Self-history no longer needs an agent-ID placeholder —
CLAWDAPUS.mdnow points cllama-enabled agents atGET http://cllama:8080/history, relying on cllama v0.6.3 to infer identity from the pre-wired metadata bearer. The previous<your-agent-id>placeholder is gone, andCLAW_AGENT_IDis no longer projected for self-history;CLAW_SELF_HISTORY_URLandCLAW_SELF_HISTORY_TOKENremain for shell-capable runners. The cross-agentGET /history/{agentID}route on cllama is unchanged for memory-replay/admin reads. Closes #218.
v0.14.5
2026-04-30
- Self-history introspection in
CLAWDAPUS.md— every cllama-enabled agent now sees a## Self-history introspectionsection pointing atGET http://cllama:8080/history/<your-agent-id>with auth described as pre-wired by Clawdapus. Agents can read their own retained turns without operator-side hand-holding. Closes #213. - New compile-time env vars for cllama-enabled services —
CLAW_SELF_HISTORY_URL,CLAW_SELF_HISTORY_TOKEN, andCLAW_AGENT_IDare now projected per cllama-enabled service (per-ordinal forcount > 1), available to shell-capable runners. Distinct from the memory-replayCLAW_HISTORY_URL/CLAW_HISTORY_TOKENenv vars (which target peer-service histories) so a service that is both an agent and a memory consumer never has one env name overloaded with two roles. - LLM Proxy section trimmed — generated
CLAWDAPUS.mdnow states the LLM Proxy as a one-line governance directive rather than exposing endpoint, mode, and chain details that the model never acts on. The harness handles wire routing.
v0.14.4
2026-04-29
- Hermes silent-final opt-in — Hermes services can opt into silent-final handling with
x-claw.hermes.allow-silent: true(#212). When enabled, a reasoning-model response containing only<think>blocks completes as a no-op instead of retrying and posting a Discord warning. Behavior is opt-in and Hermes-only; cllama remains a passthrough. - Hermes-base upstream bump v2026.3.17 → v2026.4.23 — rebased the compatibility patch ledger against current upstream Hermes. Dropped four patches that upstream merged equivalents for (members intent, on_ready/slash-command sync, both reply-mention
channel.sendpatches), rewrote two against new code shapes (tool_choice=requiredagainst the new transport-based_build_api_kwargs, suppress-duplicate-final around the new(empty)sentinel handler), and replaced the per-channel.sendreply-mention patches with a driver-levelDISCORD_ALLOW_MENTION_REPLIED_USER=falsedefault that leverages upstream's new env knob. Patch count: 13 → 11. Image bumped toghcr.io/mostlydev/hermes-base:v2026.4.23-claw.1.
v0.14.3
2026-04-29
- Vercel AI Gateway as a cllama provider —
vercelis now a first-class entry in cllama's provider registry (#210). SetAI_GATEWAY_API_KEYinx-claw.cllama-env(with optional_1/_2backup keys andAI_GATEWAY_BASE_URLoverride) and reference models asvercel/<provider>/<model>, e.g.vercel/anthropic/claude-sonnet-4.6. The OpenAI-compatible/v1/chat/completionspath forwards<provider>/<model>verbatim — exactly what Vercel expects. Phase 1 covers OpenAI-format only; the Anthropic-compatible/v1/messagespath via Vercel is a separate follow-up. cllama bumped to v0.6.2.
v0.14.2
2026-04-29
- Fix:
picoclawdriver now writesgateway.host=localhostandgateway.port=18790into the generatedconfig.json(#137). Upstream picoclawpreCheckConfigrejectsGateway.Port <= 0, and the binary'sDefaultConfig()only fills defaults when the entire config file is missing or empty — a partially-populated file with nogatewayblock let the field fall to the Go zero value and crashed the gateway withinvalid gateway port: 0. Operator overrides viaCONFIGURE picoclaw config set gateway.port <n>still win because CONFIGURE is applied last. The rollcall fixture'sDockerfile.picoclaw-basenow pins the upstream clone to--branch v0.2.7so the spike test stops drifting on upstream HEAD.
v0.14.1
2026-04-29
- Fix: Hermes Discord agents now hide the upstream
text_to_speechtool from the model-visible toolset by default (#208). The Hermes base patch honorsCLAWDAPUS_DISABLED_TOOLS, and the Hermes driver emitsCLAWDAPUS_DISABLED_TOOLS=text_to_speechfor any service with a Discord handle unless the pod opts back in withx-claw.hermes.allow-tools: [text_to_speech]. Telegram-only Hermes agents are unchanged. Hermes base advances toghcr.io/mostlydev/hermes-base:v2026.3.17-claw.4. The previous behavior let the model picktext_to_speechfor short Discord replies and upload an audio attachment instead of text. - Fix:
claw history exportand the cllama session-history reader now stream JSONL throughbufio.Readerinstead ofbufio.Scanner(#207). Live history files with multi-MBrequest_effectivepayloads (observed at >1GB on tiverton-house'stivertonandwestonagents) no longer trip the default 64KB token limit withbufio.Scanner: token too long. cllama bumped to v0.6.1.
v0.14.0
2026-04-29
- Cursored append-only Discord context — live channel context now arrives as a delta-since-watermark instead of re-pasting the recent tail on every turn (#204).
claw-wallacceptsafter=channel_id:message_idcursors on/channel-context?mode=tail, returns the newest cursor in the coverage header, and keeps the existing 24h bootstrap tail for cold starts. cllama stores per-agent channel cursors under$CLAW_CONTEXT_LEDGER_DIR(defaults to$CLAW_SESSION_HISTORY_DIR/context-ledger) and commits them only after a successful 2xx record path — streaming truncation, 5xx, and 4xx leave the cursor untouched so failed turns replay the same delta cleanly. - Layered prompt assembly — feeds, memory recall, and the current time line no longer mutate the first system message. OpenAI-compatible requests get a later
systemmessage inserted immediately before the invoking user; Anthropic requests get a trailingusercontent block. The stable system contract and the existing first non-system message stay byte-stable across turns, restoring prompt-cache identity on cache-supported providers (Anthropic, OpenAI, Moonshot/Kimi, DeepSeek, Gemini) and preserving OpenRouter sticky routing. - Stable feed headers —
--- BEGIN FEED: name (from src, refreshed TS) ---no longer carries the refresh timestamp in model-visible text. Unchanged feed content + TTL refresh now produces byte-identical bytes. TheSTALEtag still appears when relevant. - Coverage on cap pressure — when claw-wall caps a delta response, cllama appends a
coverage_partial=true omitted_after_cursor=N newest_returned=...annotation so partial coverage stays visible instead of silently swallowing a gap. The cursor still advances to the newest returned message. - Prompt and cache telemetry — each request log now includes
static_system_hash,first_system_hash,first_non_system_hash,dynamic_context_hash, andtools_hash. Provider cache counters (cached_tokens,cache_write_tokens) flow through from upstream usage when present so cache reads/writes are auditable instead of inferred. - cllama bumped to v0.6.0 (release notes).
feeds.InjectOpenAI/feeds.InjectAnthropicremain in the codebase as legacy helpers but are no longer called from the request hot path;feeds.AppendLateContext/feeds.AppendAnthropicLateContextare the new append paths. - Split-out follow-ups filed: dispatchWithRetry fallback policy on transport timeout / 5xx (#205), tool manifest bloat (#206), session-history
bufio.Scanner: token too long(#207).
v0.13.7
2026-04-29
- Fix:
claw-wallchannel context now defaults to a non-consuming recent tail (mode=tail) instead of draining the oldest unread backlog for Discord invocation context (#201). Generated feeds use a 24h window with dual caps (limit=40,max_chars=8192) and emit a stable one-line coverage header so silent gaps stay visible. Legacy cursor paging is still available asmode=delta. Pods can tune the tail withx-claw.context.channel: { since, limit, max-chars, buffer };bufferflows into the auto-injected wall sidecar'sCLAW_WALL_LIMIT(default bumped 50 → 500), and Discord poll fetch is clamped to the API maximum of 100. The previous behaviour silently served older backlog to mentioned agents, so the prompt could include achannel-contextblock while still missing the messages that triggered the mention.
v0.13.6
2026-04-29
- Fix: driver materialization now resolves Compose-style
${VAR}env references against the same context Compose itself uses — pod.envvalues plus process env overrides — instead ofos.Getenvonly (#197). The previous behavior silently collapsed compound references like${OPERATOR_DISCORD_ID},${WESTON_DISCORD_ID}to,in generated runner config (e.g. Hermes/root/.hermes/.env) when operators relied on the pod.envfile rather than sourcing it into the shell beforeclaw up. Hermes, Nanobot, NullClaw, MicroClaw, and PicoClaw paths that bake handle tokens, allowlists, and direct-provider API keys are all covered. Unresolvable references now fail fast with the missing variable name instead of writing blanks.
v0.13.5
2026-04-28
- Fix: Hermes handle validation now accepts Compose-style
${VAR}env references forDISCORD_BOT_TOKEN,TELEGRAM_BOT_TOKEN, andSLACK_BOT_TOKEN/SLACK_APP_TOKEN(#194). Preflight previously resolved the reference against theclawprocess env and rejected pods that supplied secrets via the pod.envfile unless operators sourced it manually beforeclaw up. The check now confirms the key is declared with a non-blank value and leaves resolution to Docker Compose. Missing keys and blank values are still rejected.
v0.13.4
2026-04-28
- Fix: managed tool mediation now skips repeated identical managed tool calls within a single turn and feeds the model a structured
duplicate_tool_callresult instead of re-executing the sidecar (#191). Session history records duplicate metadata intool_trace, cllama logs a duplicate intervention with the tool name, and the stdio MCP wrapper now distinguishes late responses after cancellation or timeout from truly unknown JSON-RPC IDs. - Pinned cllama bumped to v0.5.1 — picks up the duplicate managed tool call skip path above. Without this bump, a
clawbinary at v0.13.3 would still pullcllama:v0.5.0and miss the fix.
v0.13.3
2026-04-28
- Fix: Hermes Discord agents in
HERMES_TOOL_ONLY_MODE=1no longer silently drop plain final answers after native tool use (#190). The Hermes runtime patch now appliestool_choice=requiredper user turn, treatssend_messageas the preferred visible delivery path, suppresses duplicate final text only after a successfulsend_message, and otherwise lets final text fall back to the triggering channel. The Hermes driver also defaultsHERMES_TOOL_PROGRESS_MODE=offfor Discord handles while preserving explicit operator overrides. - Release: Hermes base image advances to
ghcr.io/mostlydev/hermes-base:v2026.3.17-claw.3.
v0.13.2
2026-04-28
- Fix: Hermes agents now replace the upstream
You are Hermes Agentdefault identity with a Clawdapus-managed identity while retaining Hermes memory, session search, and skill guidance (#187). The Hermes base patch honorsHERMES_DEFAULT_AGENT_IDENTITY, the driver emits the managed value, and stale stored session prompts are refreshed when the identity policy changes. - Fix: Hermes base image now pins to
ghcr.io/mostlydev/hermes-base:v2026.3.17-claw.2, applies the Clawdapus runtime patches fromdockerfiles/hermes-base/, and foregrounds the gateway withhermes gateway runinstead of the systemd-backedgateway startpath (#186). Release verification now includes a spike that builds the image and importstools.terminal_toolinside the container, covering the missingminisweagent_pathfailure from the downstream rollout.
v0.13.1
2026-04-28
- Fix: stdio MCP sidecars no longer inherit pod-level agent or
handles-defaultsblocks (#185, closes #184). A pod that mixes Discord-bound agents with anx-claw.mcp-stdiosidecar parses cleanly without forcing the sidecar to opt out of every default the agents share.
v0.13.0
2026-04-28
- MCP stdio self-discovery (#182) —
claw discover [service...]now starts stdio MCP wrapper sidecars ephemerally, performs MCPinitialize+tools/list, and writes deterministic.claw-discovered/<service>.claw-describe.jsonsnapshots.claw upconsumes those snapshots before falling back to image/build descriptors, warns when a snapshot no longer matches the declared stdio command or wrapper image, and offers--discover-toolsas an explicit convenience for missing or stale snapshots.x-claw.describe-fileremains supported as an override, but stdio MCP packages no longer require hand-authored descriptor glue for the happy path. Stdio sidecars without any descriptor source now hard-error with a hint pointing atclaw discover.
v0.12.0
2026-04-28
- Stdio MCP wrapper for managed tools (#179) — adds the shared
ghcr.io/mostlydev/claw-mcp-stdioimage andx-claw.mcp-stdiosidecar block so npm-style stdio MCP servers (perplexity-mcp, filesystem, sqlite, anything stdio JSON-RPC) can be exposed as pod-internal Streamable HTTP/mcpendpoints without bespoke per-pod glue. The wrapper handles MCPinitializecaching,MCP-Session-Idminting, JSON-RPC id multiplexing, child restart with backoff, and optional bearer auth; stdio creds (e.g.PERPLEXITY_API_KEY) stay in the wrapper container env, never reach agent containers. Newx-claw.describe-filelets operators supply a deterministic v2 descriptor snapshot from the pod directory.claw upstill compiles subscribing agents totools.jsonwithexecution.transport = "mcp", so cllama's v0.5.0 mediation, audit, session history, budgets, and credential-starvation boundaries remain unchanged.
v0.11.0
2026-04-27
- MCP sidecar services as managed tools (#177) —
claw.describev2 now accepts a top-levelmcpblock (transport: streamable_http,path: /mcp); when present, individualtools[]entries omithttpandclaw upcompiles them into per-agenttools.jsonwithtransport: "mcp"execution metadata, including the un-namespacedtool_namefortools/callrouting. cllama gains a Streamable HTTP MCP client that runs theinitialize+notifications/initializedhandshake, caches sessions per target, parses both JSON andtext/event-streamJSON-RPC responses, and retries once on session expiry. Tool names stay namespaced (<service>.<tool>); audit, session-history, policy budgets, and credential-starvation boundaries are unchanged. Existing HTTP managed-tool descriptors continue to work without modification.claw discover(livetools/listsnapshot into the build context) and baked.claw-tools.jsonartifact support remain follow-up work. - cllama bumps to v0.5.0 — pulls in the new MCP transport and dispatch switch in the proxy. Pinned runtime infra tags advance accordingly.
v0.10.0
2026-04-26
- Runner base refresh is part of
claw pull(#128) — built-in local runner aliases (openclaw:latest,nanobot:latest,nanoclaw-orchestrator:latest,microclaw:latest,nullclaw:latest,picoclaw:latest) now refresh throughclaw pullwithdocker build --pull --no-cacheagainst the inlineBaseImage()recipe, instead of being silently materialized byclaw buildon first use. The four-verb operator surface stays intact.claw pull --no-runnerspreserves the fast pinned-infra-only path. Refresh is transactional: builds into a temporary tag and only retags<alias>:latestafter build, inspect, and version probe succeed, so a failed refresh leaves the previously usable alias intact. claw buildstamps runner provenance —Dockerfile.generatednow rewritesFROM <alias>:latesttoFROM <alias>:v<version>and injects three labels (claw.runner.built-against,claw.runner.image-id,claw.runner.recipe-sha).claw inspectsurfaces them. The image ID is the strong drift fingerprint and survives upstream version-string instability.claw upsoft drift hint — when a service image was built against an older local runner alias than the one currently tagged,claw upprints an informational hint pointing atclaw build. It does not auto-rebuild and does not probe upstream sources; staleness against upstream is always an explicitclaw pullaction.- New driver interfaces —
RunnerBaseProvider(withRunnerAlias()) and the optionalRunnerVersionProber(withRunnerVersionProbe() []string) live alongsideBaseImageProvider. Drivers without a verified probe fall back to abuilt-YYYYMMDD-<imageid12>tag whose image-ID suffix prevents same-day collisions across multiple refreshes. - Pinned infra images republished at v0.10.0 —
clawdash,claw-api, andclaw-wallimages move in lockstep with each release tag; no behavioural change in those images this round. Pinned cllama unchanged at v0.4.1.
v0.9.1
2026-04-26
- Mixed tool-order retries now stay inside the model loop (#165) — the managed-prefix path still serializes internally, but native-first or interleaved mixed batches no longer bounce out as a
502that the runner can surface into Discord.cllamanow preserves the original mixed assistant/tool-use batch in hidden continuity, feeds the model synthetic rejected-tool results that explain the ordering constraint, and lets it replan on an internal follow-up turn. OpenAI-compatible and Anthropic paths both have regression coverage. A newmixed_tool_order_internal_retryintervention log distinguishes this path frommanaged_prefix_native_suffix_serialized. Originally surfaced from a downstream trading-desk pod where the502was leaking into Discord. - Pinned cllama bumped to v0.4.1 — picks up the mixed tool-order retry path above.
- Pinned infra images republished at v0.9.1 —
clawdash,claw-api, andclaw-wallimages move in lockstep with each release tag; no behavioural change in those images this round.
v0.9.0
2026-04-22
- Agent context visibility in clawdash (#172) — the operational dashboard now surfaces two things that used to require log-diving or guessing: each agent's compiled contract (AGENTS.md, CLAWDAPUS.md, feed subscriptions, managed tools, memory wiring, metadata) as rendered at
claw uptime, and a live context view showing what was actually assembled and sent to the provider on the most recent turn (system message, tools array, injected feeds, memory recall, time block, interventions). Reached via a new/agentsindex and per-agent/agents/<id>detail page. The live snapshot is captured inside the cllama proxy as a side effect of normal request handling, so what you see is the exact payload the model saw — no reconstruction. Credentials and token fields are redacted at capture. Bearer scope: read-only, enforced throughclaw-apiprincipals; no new auth surface exposed to agents. claw upnow prints the dashboard URL — when a pod defines aclawdashsurface,claw upemits[claw] dashboard: http://localhost:<port>on success so operators know where to look without re-checking compose output.- Pinned cllama bumped to v0.4.0 — adds the per-agent context snapshot store and two new internal endpoints (
GET /internal/context,GET /internal/context/<id>/snapshot) behind the existing UI bearer. These power the live view above. - Pinned infra images bumped to v0.9.0 —
clawdash,claw-api, andclaw-wallimages move in lockstep with the release. The clawdash image carries the new/agentsroutes;claw-apicarries the snapshot proxy passthrough;claw-wallis republished unchanged at v0.9.0 for lockstep.
v0.8.15
2026-04-17
- Discord mention matching now requires explicit native mentions (#170) — OpenClaw config generation for Discord handles no longer emits the plain-name text regex (
\b@?<username>\b). Agents on Discord channels now only trigger on native<@...>mentions, preventing false activations when a bot's name appears in casual conversation. Non-Discord platforms (Telegram, Slack) still use text-based mention patterns. Mixed-platform services keep text patterns contributed by their non-Discord handles.
v0.8.14
2026-04-16
- Managed-first mixed tool batches now serialize instead of hard-failing (#165) — when a mediated model response contains a managed tool prefix followed by runner-native tool calls,
cllamano longer aborts the turn withmixed managed and runner-native tool calls are not supported in one model response. The proxy now occludes the runner-native suffix, executes the managed prefix internally, feeds those results back upstream, and waits for the model to re-issue any runner-native step cleanly in a later response. Native-first or interleaved mixed batches still fail closed, but the returned proxy error now explicitly tells the agent to emit managed service tools first and runner-native tools in a later response. OpenAI-compatible and Anthropic paths both have regression coverage. A newmanaged_prefix_native_suffix_serializedintervention log marks the path so operators can see when the proxy reordered a turn rather than failing it. - Fix:
CONFIGURE openclaw config set ... --jsonno longer corrupts numeric/typed config (#167) — the ClawfileCONFIGUREparser previously concatenated openclaw-CLI flags such as--jsoninto the value, soCONFIGURE openclaw config set agents.defaults.contextTokens 20000 --jsonwas stored as the string"20000 --json"and the gateway crash-looped onexpected number, received string. The flag-first form (set --json <path> <value>) had the mirror bug, storing--jsonas a literal top-level config key.ParseConfigSetCommandnow stripsopenclaw config setflags before assembling the path/value pair, and a regression test pins the typed payload. - Pinned cllama bumped to v0.3.6 — picks up the managed-prefix mixed tool serialization above.
v0.8.13
2026-04-15
- Hotfix: portable memory ownership is actually repaired across UID boundaries (#163) — v0.8.12 introduced an in-process
chmodpass that hard-failed withoperation not permittedwhenever the host user runningclaw updid not own every file under.claw-memory/<service>/memory/, which is the common case on upgrade deploys where the previous generation's runtime wrote memory files under a container UID. v0.8.13 replaces the weak in-process normalization with a real repair path.claw upnow preflight-scans each service's portable memory tree for mode or ownership drift and, when drift is found, reclaims the tree via abusybox:1.36.1helper container that runs as root, normalizes directories to0o777, files to0o666, andchowns everything back to the host UID/GID beforePreparePortableMemoryruns. The idempotent skip remains as a pure fast path — when the tree is already at target, no helper container is launched at all. Originally observed as a hard regression on a downstream trading-desk deployment immediately after the v0.8.12 upgrade. - Driver runtime users are now pinned where the contract is ours — the
MaterializeResulttype has a newUserfield andclaw upprojects it intocompose.generated.ymlasuser:when the pod YAML does not declare one explicitly. Hermes, Nanobot, and Nanoclaw now pin0:0(root); MicroClaw pins themicroclawuser; PicoClaw pins thepicoclawuser. This gives deterministic ownership on the runtime-written side of the memory plane so that, going forward, redeploys on these drivers never drift into cross-UID states in the first place. OpenClaw and NullClaw are intentionally not pinned — they still accept variable upstream users — and the portable memory repair helper above covers the cross-UID case for those. Explicituser:inclaw-pod.ymlcontinues to win over the driver default.
v0.8.12
2026-04-15
- Fix: OpenClaw scheduled jobs are materialized under the canonical cron store again (#159) — the OpenClaw driver now mounts a writable
~/.openclaw/cron/directory and writesjobs.jsonthere instead of under the config directory. Current OpenClaw builds resolve cron definitions from~/.openclaw/cron/jobs.json, so the previous layout leftopenclaw cron listempty andopenclaw cron run <id>failed against jobs Clawdapus thought it had compiled.claw upnow emits the native store where OpenClaw actually reads it, preserves the dedicated cron directory mount, and keeps pod-origin wakes targeting the runner-nativeopenclaw cron run <id>contract. - Fix: OpenClaw scheduler wakes no longer burn failures during startup lag (#160) —
claw-apinow treats OpenClaw wakes as adapter-aware operations instead of generic 30 second execs. The scheduler defersopenclaw-execwakes while Docker health is stillstartingorunhealthy, so boot lag stops being recorded as a failed fire, and OpenClaw wakes now get a longer exec budget before being marked as timed out. This reduces false degradation on desks where the runner is still coming up even though the schedule is otherwise valid. - Configurable OpenClaw job timeouts (#140, #141) — the OpenClaw driver now threads
agents.defaults.timeoutSecondsthrough the compiled config so operators can raise the per-invocation budget above the prior hard-coded 300 second default. Invalid values (non-positive, non-integer) are rejected atclaw uptime rather than silently ignored. Covers long-running scheduled tasks whose real runtime exceeds the legacy fixed budget. - Fix: portable memory directory permissions are normalized on every
claw up—PreparePortableMemorynow reapplies0777to directories and0666to files under the portable memory tree regardless of prior state, via a dedicatednormalizePortableMemoryPermissionspass. Fixes the class of startup failures where a memory plane authored by one container user was unreadable or unwritable by a subsequent redeploy running as a different UID.
v0.8.11
2026-04-14
- Fix:
claw up -don a live pod can corrupt.claw-runtimeand leave bind mounts as directories (#153) — the previous pipeline didos.RemoveAll(.claw-runtime)beforedocker compose up -drecreated the affected containers. That left a window where live containers were still bound to host paths that no longer existed, so when Docker recreated them it auto-created the missing bind-mount sources (AGENTS.effective.md,CLAWDAPUS.md, per-service config dirs) as directories on the host. The nextclaw up -dthen crashed in materialization withchmod config dir: operation not permittedoropen AGENTS.generated.md: permission denied, and the only recovery wasclaw down, move.claw-runtimeaside, and redeploy.runComposeUpnow rotates the runtime tree instead of destroying it: it renames the existing.claw-runtimeto a generation-suffixed sibling, stages a fresh one for the new generation, and only removes the previous tree after compose apply succeeds. If apply fails, the old tree is restored in place so the live pod is unaffected and operators have a rollback target. Originally observed on a downstream trading-desk deployment. A new live spike (TestSpikeComposeUpRuntimeRotation) proves an in-place redeploy no longer leaves any bind-mount sources as directories. - Pinned cllama bumped to v0.3.5 — the proxy now supports native tool handoff after managed rounds: once a managed tool mediation round completes, the runner's next turn can immediately drive a runner-native tool call without the proxy re-injecting managed tools into the outbound request. Builds on the v0.3.4 additive mediation contract.
v0.8.10
2026-04-13
- Release note correction: the OpenClaw non-root canonical-home fix shipped in v0.8.9 requires two tmpfs mounts, not one.
/rootmust be tmpfs-backed so non-root runtime users can traverse into the canonical home, and/root/.openclawmust also be tmpfs-backed so Docker does not leave the state root behind as0755 root:rootwhen it creates the nested config bind mount. Without the second tmpfs, the first state write still fails withEACCES: permission denied, mkdir '/root/.openclaw/agents'. The runtime contract and code remain the same; this release makes the published changelog match the actual fix that is already onmaster.
v0.8.9
2026-04-13
- Fix: OpenClaw pods crash-loop on startup when the runtime container
USERis not root (#149 regression, fixed in this release) — v0.8.8's canonical-home rewrite mounted the writable tmpfs at/root/.openclaw, leaving/rootitself at the image layer's baked-indrwx------ root:root. Any OpenClaw image whose runtime user is not root — including the upstreamghcr.io/openclaw/openclawimage and the documented "RUN apt install ... && USER node" pattern that lets agents add packages safely — could not even traverse/rootto reach the writable subtree, so the gateway died on every restart withError: EACCES: permission denied, mkdir '/root/.openclaw/config'and the pod cycled forever. The fix is two coordinated tmpfs mounts:/rootitself at mode1777so non-root users can traverse the parent, and~/.openclaw(/root/.openclaw) at mode1777so the canonical state root stays writable after Docker creates the nested/root/.openclaw/configbind mount (without the second tmpfs, Docker leaves/root/.openclawas0755 root:rootand non-root users still fail on the first state write likemkdir ~/.openclaw/agents). The canonical~/.openclawlayout andOPENCLAW_CONFIG_PATH/OPENCLAW_STATE_DIRcontract are unchanged, and any containerUSER(root or not) now both traverses in and writes state. The live regression spikeTestSpikeOpenClawNonRootHomeReachablenow proves both the config read path and the first state write before the gateway starts. Originally observed on a downstream trading-desk deployment within minutes of the v0.8.8 upgrade.
v0.8.8
2026-04-13
- Managed tool mediation is now additive (#151, #152, cllama#7) — when an upstream runner already declares its own tools, cllama no longer overwrites them on the way out to the model. Compiled managed tools are appended to the runner's outbound
tools[](OpenAI format) or Anthropictoolsarray, so OpenClaw and other drivers keep their native tool surface even when managed mediation is active. Runner-native tool calls in the model's response pass straight back to the runner unchanged, managed tool calls are still executed inside cllama as before, and a response that mixes both fail-closes with a precise error rather than silently dropping or replacing tools. ADR-020 is updated to reflect the additive contract, and a new live spike (TestSpikeOpenClawAdditiveToolsLive) proves an OpenClaw agent can hit a native tool followed by a managed tool in the same session. Pinned cllama image bumped to v0.3.4. claw-apiwarns on principal verb skew and surfaces inert principals (#144, #150) — follow-up to the v0.8.6 fail-open fix.claw upnow compares the verbs it emits inprincipals.jsonagainst the verb set known to be supported by the pinnedclaw-apiimage and prints a warning before deployment when a newer CLI is targeting an older API image. Theclaw-api/healthendpoint now returnsprincipal_count,inert_principals(principals that loaded with zero recognized verbs), andnormalization_warnings, so operators can see normalization drops without tailing container stderr. Compile-time validation inclaw upfor user-declared verbs inx-claw.principalsstays strict.- Honor service
TZin compiled schedules (#135, #145) —claw upnow resolves a single service timezone from the DockerTZenv at compile time and uses it for pod-origin schedule manifest entries when no explicit calendar override is present. The same timezone flows into OpenClaw cron jobs and microclaw config instead of the previous hard-coded UTC. Schedules that depended on local-time semantics (e.g.0 9 * * *meaning 9am local) now fire when operators expect them to. - OpenClaw runtime uses the canonical
~/.openclawhome (#121, #149) — the OpenClaw driver now mounts state and config under the canonical~/.openclawlayout inside the container (config at/root/.openclaw/config/openclaw.json), and the legacyOPENCLAW_HOMEshim is gone. The base image and tmpfs config make the root-home contract explicit, removing a class of subtle path drift between Clawdapus and upstream OpenClaw. - Doc fix: the
claw-apiprincipal verb validation behavior is now documented accurately — unknown verbs inx-claw.principalsfail hard at pod parse time, while unknown verbs inprincipals.jsonare dropped with warnings at runtime. - Test coverage: the OpenClaw provider config compilation matrix is now exercised end-to-end across the cllama-rewrite and direct-provider paths.
v0.8.7
2026-04-12
- Fix:
claw-wallDiscord rate limit handling (#147, #148) —claw-wallwas polling duplicate channel/token pairs and retrying every non-200 response on the next tick, which could amplify Discord rate limits across multi-bot pods. Three coordinated fixes: (1) compile-time token selection now picks exactly one reader token per consumed Discord channel, preferring the master service's token when available, and fails hard if a consumed channel has no eligible reader; (2) the poller now parses Discord429responses into typed rate-limit data with channel-scoped and token-scoped cooldowns that honorRetry-Afterbackoff; (3) the default poll interval increases from 15s to 30s, configurable viaCLAW_WALL_POLL_INTERVAL. Originally observed on a downstream trading-desk deployment.
v0.8.6
2026-04-10
- Fix:
claw-apino longer crash-loops on unknown principal verbs (#120, #143) — when a newerclawCLI compiled aprincipals.jsoncontaining verbs an older deployedclaw-apiimage didn't recognize (e.g.schedule.reademitted by v0.6.1+ against a pre-schedule.*image), the API container hard-failed validation and crash-looped, taking the entire governance surface offline with onlyunknown verb "..."in container logs. The runtime loader is now tolerant: unrecognized verbs are filtered out of the in-memory principal store and logged as warnings on startup, and the service comes up normally. Compile-time validation inclaw upstays strict — unknown verbs inx-claw.principalsor hand-writtenprincipals.jsonstill fail hard. Originally observed on a downstream trading-desk deployment.
v0.8.5
2026-04-10
- Formalize the cllama ingress surface matrix (#134, ADR-023) —
cllamanow has an explicit, minimum ingress surface contract: OpenAI Chat Completions (POST /v1/chat/completions) for non-Anthropic providers and Anthropic Messages (POST /v1/messages) for Anthropic-family providers. The previous spec described cllama as OpenAI-only even though the reference implementation has supported both surfaces for a while;docs/CLLAMA_SPEC.mdand ADR-008 are reconciled with the runtime. Provider identity (google/gemini-*,anthropic/*, etc.) stays in operator-facing model refs — syntheticcllama/<provider>prefixes are explicitly rejected at parse time. The OpenClaw driver no longer owns the canonical provider-to-surface decision: it delegates to the sharedinternal/cllamacontract and maps the resulting surface to its ownmodels.providers.*.apienum, failing closed on unknown canonical surfaces. This is the architectural backstop behind the Gemini-behind-cllama fix that shipped in v0.8.2. - Spike-level regression coverage for ADR-023 (#139) —
TestSpikeRollCallis now a multi-model matrix: a dedicatedopenclaw + google/gemini-2.5-flashvariant directly regression-tests the #127 incident that triggered the ADR, a newopenclaw + anthropic/claude-sonnet-4-6variant covers the Anthropic Messages surface, and the stubs exercise distinct provider/model pairs across both surfaces. A finalingress_surface_coveragesubtest fails the suite if a future change silently reroutes everything to a single surface.pc-rollis temporarily gated behindCLAW_SPIKE_ENABLE_PICOCLAWwhile #137 (pre-existing upstream picoclawgateway.port=0crash, reproduces on master) is open.
v0.8.4
2026-04-09
- Fix: OpenClaw pod-origin cron schedules stop loading on openclaw ≥ 2026.3.24 (#132) — OpenClaw
2026.3.24changed its cron store contract: the jobs file is now resolved underCONFIG_DIR/cron/jobs.jsonusing a versioned envelope ({"version":1,"jobs":[...]}), not the legacy bare array at/app/state/cron/jobs.json. Clawdapus was still emitting the old path and shape, so pod-origin schedules never loaded into OpenClaw's in-memory registry,openclaw cron run <id>returnedunknown cron job id, andclaw-apieventually marked affected schedules as degraded after repeated wake failures. The driver now writesjobs.jsonunder the writable/app/config/cron/directory in the versioned envelope format, and theexamples/openclaw/Clawfile is bumped toopenclaw@2026.4.9so the example'sINVOKEheartbeat actually loads.
v0.8.3
2026-04-09
- Fix: update-check notifier prints phantom "downgrade" after upgrading — the update-available notifier used a plain string inequality instead of a semver comparison, so a freshly upgraded binary reading its pre-upgrade cache (within the 1 hour TTL) would print
Update available: v0.8.2 → v0.8.1. The notifier now uses strict semver ordering, so a stale cache whoselatest_tagis older than the running binary no longer triggers a bogus notice. As a one-time workaround on an already-upgraded host,rm ~/.claw/.claw-update-checkclears the stale cache.
v0.8.2
2026-04-09
- Fix: OpenClaw Google models behind cllama (#127) — when
x-claw.cllamais set and agoogle/*model is routed through the proxy, OpenClaw now compilesmodels.providers.google.apiasopenai-completionsinstead of the vendor-nativegoogle-generative-aisurface. Direct (non-cllama) Google routing is unchanged. This removes the404 page not foundfailure mode reported when running pods likex-claw.cllama: passthroughwithgoogle/gemini-3-flash-preview. Regression coverage added for both the cllama-rewrite case and the direct-provider case.
v0.8.1
2026-04-08
- Native Gemini provider support (#119) — cllama now supports direct
google/<model>routing through Google's OpenAI-compatible endpoint.GEMINI_API_KEYis the primary seed env var,GOOGLE_API_KEYis accepted as a lower-priority alias,claw upcompiles Google keys intoproviders.json, and the provider-key strip path now also removes xAI/Gemini secrets from agent envs. Pinned cllama image bumped to v0.3.3.
v0.8.0
2026-04-08
- Pod-level model slots (#118) —
claw-pod.ymlnow supports service-levelx-claw.modelsand pod-levelx-claw.models-defaults.claw upcompiles the merged slot map into each service's runtime config so operators can retarget models per pod without rebuilding shared images. Service-level overrides merge additively per slot over pod defaults, so you can replaceprimarywithout losingfallback. Pod slots still overlay imageMODELlabels;models: {}andmodels: nullsuppress pod defaults only. - Cllama image bump to v0.3.2 —
DefaultCllamaTagnow pins cllama v0.3.2, which carries the cache-friendly feed injection ordering fix. Operators runningclaw pullwill now actually receive the Anthropic prompt cache fix tracked in #122.
v0.7.0
2026-04-07
- Fix: cllama prompt cache efficiency (#122) — feed and time context is now appended after the system prompt rather than prepended, enabling Anthropic prompt cache reuse across requests.
- Four-verb image lifecycle —
claw pullis now the explicit infra freshness command,claw buildis pod-aware with no path, andclaw upis strict by default with--fixas the opt-in auto-remediation path. - Pinned infra manifest plumbing — release builds stamp first-party infra image tags into the
clawbinary, and source checkouts now use the same pinned refs with fail-closed behavior when a tag is unpublished. - Release-time infra verification — the release workflow now verifies that pinned infra tags already exist in GHCR before publishing the
clawbinary, preventing a broken release from shipping a manifest that points at missing images. - Quickstart and operator docs sweep — README, site quickstart/CLI docs, example READMEs, testing docs, and the embedded Clawdapus skill now teach the explicit
pull -> build -> up -> downoperator flow.
v0.6.2
2026-04-07
- Fix: cllama prompt cache efficiency (#122) — feed and time context is now appended after the system prompt rather than prepended, enabling Anthropic prompt cache reuse across requests.
v0.6.1
2026-04-05
- Managed tool manifest state in
claw audit(#115) — proxy telemetry now emitsmanifest_present(bool) andtools_count(int) on every mediated request, andclaw auditsurfaces them in its JSON output. Operators can verify at runtime whether a compiledtools.jsonactually reached cllama for a given agent — closing an observability gap that made it hard to diagnose cases where tools were compiled on disk but not being injected into upstream LLM requests. Requires cllama v0.3.1 or newer.
v0.6.0
2026-04-05
- Conditional invoke scheduling control plane (#107) — pod-origin
x-claw.invokeentries compile to an external schedule manifest with calendar-awarewhen:gates (e.g.when: { calendar: us-equities, session: regular }). A scheduler loop insideclaw-apievaluates gates before wake and persists state under.claw-governance/. Wake adapters cover the full runner set; Clawfile/image-originINVOKEcontinues to use runner-native cron unchanged. claw api scheduleoperator CLI — new subcommands (list,show,pause,resume,skip-next,fire) to inspect and control scheduled pod-origin invocations at runtime. Tunneled throughdocker compose execsoclaw-apiremains internal-only with no published host port. Operators can pause, resume, skip, or manually fire scheduled invocations without rebuilding images.- Clawdash Schedule page — new card-based UI organized around operator mental model: health at a glance, next fire time, last event, and a context-sensitive primary action. Gate/Timing/Wake columns consolidated into a single schedule block;
docker execwake commands hidden behind disclosure; always-visible action buttons collapsed into primary + overflow. - Capability wave documentation — new guides for Managed Tools (
site/guide/tools.md) and Memory Plane; manifesto updated with compiled tool mediation section; ADRs 020 and 021 marked Implemented. - Site branding refresh — new hero lockup (octopus glyph + wordmark) on the landing page.
v0.5.2
2026-04-05
- Fix:
claw.describediscovery for build-only services (#112) —claw upnow inspects locally built images for theirclaw.describelabel even when the compose service usesbuild:without an explicitimage:. Previously the in-image descriptor path was resolved against the host build context and quietly missed, which broke feed/tool subscriptions from sibling services. - Scheduler groundwork (internal) —
claw-apigains an externalized invoke scheduler and schedule state/control endpoints. These are wiring for upcoming v0.6.0 work; no new CLI or UI surfaces ship with this release.
v0.5.1
2026-04-03
body_keyin tool descriptors —claw.describev2 tool HTTP specs now support abody_keyfield that wraps tool arguments under a named JSON key in the request body (e.g."body_key": "trade"sends{"trade": {...args}}). Validated at parse time for POST/PUT/PATCH only, propagated through the manifest, and executed by cllama proxy v0.3.0.claw skill install— new command installs the clawdapus-cli skill to~/.claude/skills/and~/.agents/skills/, giving Claude Code, Codex, Gemini, and OpenCode full operational knowledge of the claw CLI. Auto-updates on everyclawinvocation when a newer binary is installed.
v0.5.0
2026-04-03
- Capability wave: compiled tools + memory (ADRs 020 and 021) —
claw upnow compilestools.jsonandmemory.jsonper agent fromclaw.describeversion 2 service descriptors. Non-cllama services that declarex-claw.toolsorx-claw.memoryare a hard error at compile time. - Managed tool mediation — cllama injects compiled managed tool schemas into upstream LLM requests (OpenAI-compatible and Anthropic formats), intercepts
tool_callresponses, executes them against the declared service, and loops until terminal text. Runners receive only the final text. Streaming runners receive synthetic SSE re-streaming after mediation completes; long mediated loops emit SSE keepalive comments. - Cross-turn tool continuity — hidden managed tool rounds are reinjected into subsequent upstream requests so the LLM sees the effective transcript that produced each runner-visible reply.
- Memory plane — pre-turn recall and post-turn best-effort retain hooks live in cllama.
memory_optelemetry events carry recall/retain outcome, latency, block count, injected bytes, and policy-removal counts. Secret-shaped values are scrubbed from both retain payloads and recalled blocks before they reach the model. claw memory backfill— replays the durable session ledger into a memory service'sretainendpoint. Supports--after(indexed, no full-rescan),--limit,--agent,--url, and--auth-token. Tombstone-aware: forgotten entry IDs are skipped.claw memory forget— dispatches the service'sforgetendpoint and writes infra-owned tombstones under.claw-memory-tombstones/. Later backfill runs honor tombstones and skip re-retain.claw audittool events — session-historytool_callevents are merged with proxy log events so managed tool activity and failures are visible without manual ledger inspection.- Reference memory adapter —
examples/reference-memory/ships a file-backed reference implementation: idempotent retain byentry.id, tombstone-aware forget, recent/token-matching recall. Used by rollcall and capability-wave spike. - Site branding refresh — new octopus glyph mark with regenerated favicons across all sizes.
v0.4.3
2026-03-28
- cllama model policy enforcement —
claw upcompiles per-service model policies from pod YAML; cllama enforces allowed models, providers, and xAI seed support at the proxy layer. claw updatesubcommand — self-update via the install script with hourly check during active development.REPO_ROOTsurface placeholders — volume surface paths now supportREPO_ROOTsubstitution.- Cross-runner memory portability formalized in docs.
v0.4.2
2026-03-27
- Session history —
claw upcreates a persistent.claw-session-history/directory bind-mounted into cllama; proxy writes per-agenthistory.jsonlwithreported_cost_usdon every 2xx completion. Survives container restarts and driver migrations. - Descriptor discovery from Dockerfile labels —
claw inspectreads.claw-describe.jsonfrom image labels, not just the filesystem. - Portable history importer for trading-desk example feeds.
- Fixes: OpenClaw mention regex and workspace permissions, claw-api alert window, claw-wall quiet-turn context.
- ADR-018: session history and memory retention — two surfaces, two owners.
v0.4.1
2026-03-26
- Communication tools contract — all 7 runtimes now enforce private thinking + explicit
send_messagedelivery. Agent reasoning never reaches Discord automatically.- Hermes:
HERMES_TOOL_ONLY_MODEinjected by driver; runtime patches suppress text auto-routing - OpenClaw: already enforced natively
- NullClaw, MicroClaw, NanoClaw, NanoBot, PicoClaw:
discord-responder.shpasses asend_messagetool to the LLM
- Hermes:
- Spike test hardened —
TestSpikeRollCallalways rebuilds stub base images; 7/7 runtimes pass end-to-end.
v0.4.0
2026-03-26
- Hermes tool-only mode — Hermes agents communicate exclusively via
send_messagetool calls when Discord handles are configured. hermes-baseimage — real runtime build replaces rollcall stub.patch-hermes-runtime.pyapplies compatibility fixes at build time: disabled intents, non-blocking slash-command sync, reply-mention suppression,tool_choice=requiredon first turn.claw upauto-buildshermes:latestviaensureInfraImages.- cllama v0.2.3 — unpriced request tracking, reported cost passthrough, timezone context injection.
- clawdash — surfaces
unpriced_requestswith amber warning in fleet page. - CLAWDAPUS.md — adds
## Communication Toolssection with private-thinking policy when handles are configured.
v0.3.6
2026-03-23
- Conversation wall sidecar (
claw-wall, #71) — pod-level sidecar that polls Discord channels and serves incremental message history to cllama-enabled agents. Each agent gets a per-consumer cursor so it only sees new messages since its last turn. Auto-injected byclaw upwhen any cllama-enabled service has Discord channel IDs; reserved service nameclaw-wallis enforced.CLAW_WALL_TOKENScarries(channelID, token)pairs supporting multi-bot pods with overlapping channels. - Empty-feed skip in cllama —
FormatFeedBlocknow returns""for empty non-unavailable feeds, so quiet conversation wall turns produce no injected context block. - Sequential conformance opt-out (#79) —
sequential-conformance: truepod flag allows services to share Discord handle IDs (rollcall pattern). Cross-service uniqueness check is bypassed whilecount > 1rejection is still enforced. - Write plane security hardening (#78) — path traversal rejected in governance target validation; master token read after merge to prevent pre-merge injection; reserved service name guard for inject-into; no-master guard rejects principals without
x-claw.master.
v0.3.5
2026-03-22
- ADR-017: Pod defaults, service self-description & unified CLAWDAPUS.md —
claw.describeservice descriptors, pod-level defaults with spread expansion, feed registry, and unified per-agent CLAWDAPUS.md generation - Master Claw API access —
CLAW_API_TOKENinjected automatically; feed auth via bearer tokens infeeds.json claw composepassthrough —claw compose <subcommand>passes through todocker compose -f compose.generated.yml- Stale guard — lifecycle commands refuse to run if
claw-pod.ymlis newer thancompose.generated.yml - Hermes SOUL.md — default SOUL.md overrides runner identity with contracted agent identity; titlecased names
- Hermes env passthrough —
CLAW_API_URLandCLAW_API_TOKENadded for master claw - Audit feed events — feed fetch events surfaced with
feed_nameandfeed_urlfields - Configurable alert thresholds —
CLAW_ALERT_*env vars for error rate, cost, feeds, interventions; wired into/fleet/alerts - Documentation site — clawdapus.dev with full guide, reference, manifesto, and changelog
- OG social cards, favicons, web manifest, and complete meta tags
v0.3.4
2026-03-22
- cllama feed injection (ADR-013 Milestone 2) — the proxy now supports runtime feed injection into LLM requests with TTL caching
- Updated AGENTS.md with cross-driver operational gotchas
- Multi-arch cllama image (amd64 + arm64)
v0.3.3
2026-03-21
- Auto-resolve base images for all drivers — every driver now implements
BaseImageProvider, eliminating manualdocker pull - Hermes first-class scaffold support in
claw initandclaw agent add - README fully updated for v0.3.2+
v0.3.2
2026-03-21
- Discord bot setup guide added to quickstart
- cllama image now multi-arch (amd64 + arm64)
v0.3.1
2026-03-20
Bug fixes across all 7 drivers:
- Runtime directories use
0o777for uid portability mention_onlyfor Discord in all drivers (prevents feedback loops)- Explicit
HOMEenv var in all drivers - Peer handles in CLAWDAPUS.md
- Healthcheck passthrough from
claw-pod.yml - ADRs 012--016 for fleet governance
v0.3.0
2026-03-19
- Hermes driver added to trading-desk and rollcall examples
- Compose emitter preserves non-managed services/volumes/networks
- Published
ghcr.io/mostlydev/cllama:latestas public image CLAUDE.mdis now a symlink toAGENTS.md- ADR-012 (Master Claw), ADR-013 (Context Feeds)
v0.2.2
2026-03-08
- Docs: reorder driver matrix, clarify OpenClaw routing
v0.2.1
2026-03-08
- Fix runtime regeneration and Discord guild policy handling
- Fix
CLAW_PERSONA_DIRonly set when persona is configured - Review fixes (
dst.Closeerror,go mod tidy, no-persona test)
v0.2.0
2026-03-08
Major release bringing four new drivers, scheduling, channel surfaces, and the cllama proxy:
- Interactive scaffold:
claw init+claw agent addwith canonical layout - Persona materialization (local refs + OCI artifacts)
- x-claw include composition (
enforce,guide,reference) - Nanobot and PicoClaw drivers
- NullClaw driver with
CONFIGUREsupport - MicroClaw driver
- Roll-call spike test covering 6 drivers
- cllama sidecar wiring (Phase 4 complete)
- INVOKE scheduling + Discord config wiring
- Channel surface bindings (map-form)
- Social topology:
mentionPatterns,allowBots, peer handles - Service surface skills,
SKILLdirective, CLAWDAPUS.md generation - cllama dashboard (single-page with SSE live updates)
- Install script
- GoReleaser + release workflow
v0.1.0
2026-02-27
Foundation release establishing the core compilation model:
- Clawfile parser + build (Phase 1)
- OpenClaw driver + pod runtime (Phase 2)
- Volume surfaces, service surfaces, CLAWDAPUS.md context injection
SKILLdirectiveHANDLEdirective (Discord, Telegram, Slack)- NanoClaw driver (Claude Agent SDK)
- Health probes, compose subcommands
- Manifesto, architecture plan, ADRs 001--009
v0.0.1
2026-02-11
Initial pre-release tag. "Not quite ready, but tagging nonetheless."
