All notable changes to NanoClaw will be documented in this file.
- Stamped plugins update in place through
ncl groups create --template <ref>. When a group already carries the template's plugin, the same command becomes an in-place update instead of minting a duplicate agent: a dry run prints a plan of every plugin-owned surface (plugin files, skills, MCP servers, persona, context files, tasks), flagging locally customized files whose edits would be lost;--yesapplies,--idpicks among several stamped groups,--newdeliberately stamps another agent. Agent state the plugin does not own (memory,plugin-data/, user-added MCP servers, task pause/resume state, wiring) is never touched. Plugin-stamped MCP servers now carry an ownership marker and refuse direct edits viancl groups config add-mcp-server/remove-mcp-serveror the agent'sadd_mcp_servertool: update the plugin and restamp instead. - [BREAKING] Agent templates are now Agent Plugins 1.0.0 directories.
plugin.jsonreplacescontext/instructions.mdas the required file; MCP servers move to a spec-shapedmcp.json; persona, extra context, and tasks move under theai.nanoco.nanoclaw/extension dir. Templates become portable to other plugin clients, and any conformant third-party plugin stamps as a NanoClaw agent. Migration: re-fetch templates from the registry (the pre-plugin layout fails with a migration error); to convert a local custom template, see docs/templates.md. - Plugin MCP servers may declare a working directory.
cwdinmcp.json(fixed forms./p,${PLUGIN_ROOT}[/p],${PLUGIN_DATA}[/p]) now launches the server in that directory instead of being skipped: resolved to an absolute container path at runtime, consumed natively by providers that support it and via acd-then-execlaunch shim on Claude. A stdio server that omitscwdruns from the plugin root (the spec default). - Setup can stamp the first agent from a template. The wizard offers the NanoClaw template library (or local
templates/) when creating the first agent;--template-path <ref>or the advanced screen presets the pick. A rerun over a partial install updates the stamped agent in place (dry-run plan + confirm) instead of duplicating it, the pick persists across wizard re-execs and reruns, and a template failure warns and continues instead of aborting setup. - Remote MCP servers can use Streamable HTTP. Register them with
ncl groups config add-mcp-server --name <name> --url <url>or the existing admin-approvedadd_mcp_servertool. Local stdio MCP commands keep their currentcommand/args/envbehavior; remote credentials remain OneCLI-managed: URLs with userinfo, fragments, or credential-looking query parameters are rejected. HTTPS is required except forlocalhost/host.docker.internal. - [BREAKING] Host modules now use one lifecycle registry. Custom modules that import
onShutdown()orgetShutdownCallbacks()fromresponse-registry.tsmust move to the host lifecycle API. Migration: follow the host lifecycle migration guide to detect affected code, update it, verify the cutover, or roll back. - Agent-to-agent messaging no longer loses to Claude Code's built-in
SendMessage. That built-in addresses the SDK's own in-session subagents, so an agent that had just runcreate_agentreached for it by name and gotNo agent named 'x' is currently addressable— reading as "the group was never provisioned" whilemcp__nanoclaw__send_message(the real path) was never called.SendMessagejoinsAskUserQuestioninSDK_DISALLOWED_TOOLS, so the PreToolUse hook now blocks it and points at the nanoclaw equivalent. - [BREAKING] Existing Claude installs should review the hardened agent image. Local builds remain supported, but the Echo-built image is recommended for patched sandbox components. Migration: follow the hardened-image guide to detect your current image source, switch, verify, or roll back.
- Release publication tolerates GitHub API propagation. The Release workflow now retries bounded post-publication read-backs when the new Release is not listed yet or its immutable state is not visible yet. Exact title, body, tag, or SHA mismatches still fail immediately.
- The
add-tavily-toolskill adds Tavily Search and Extract as keyless remote MCP tools for selected agent groups, bridged through a pinnedmcp-remote. - Scheduled tasks now run with their effective scheduled occurrence as the task time, plus a task-only
current_time(weekday included, in the agent group's timezone) instead of the creation timestamp. - Accumulated messages stay available as context without spuriously triggering warm-container follow-up turns; group-scoped agents can inspect their wirings and request approved engagement-policy updates; invalid engagement regexes are rejected.
- Hosted iMessage setup now provisions the line's user row directly and prints the assigned number to text once; that first message is the opt-in the delivery plane checks, and re-runs reuse the existing row.
- Resolved approval cards keep their title and request details, replace buttons with the decision and actor (or a timeout status), and survive host restarts and delayed resolution.
- Setup failure assist now offers diagnosis through the provider the operator picked instead of always offering to install Claude.
ensureUserDmgains an opt-in privacy-safe logging mode for security-sensitive flows: user IDs, handles, messaging-group IDs, and raw adapter errors are omitted while non-identifying channel context is kept.- The stale
add-gcal-tool,add-gmail-tool, andget-qodo-rulesskills were removed. - The recommended hardened agent image is repinned to
hardened-2026-08-13. - The package description now says personal AI assistant: NanoClaw is provider-agnostic, not Claude-only.
- Docs: skills define a single-responsibility integration rule, and the hardened-image guide states that
install_packagescovers apt and npm packages only.
Rollup release covering v2.1.18 through v2.1.54 — everything merged since the v2.1.17 tag.
- [BREAKING] iMessage unified into one
imessagechannel with two backends via/add-imessage: Local (this Mac'schat.dbvia the Chat SDK) or Hosted (native Photon viaspectrum-ts, no Mac relay). Backend chosen at install or viaIMESSAGE_BACKEND=local|hosted. The legacy Chat-SDK remote mode (IMESSAGE_SERVER_URL/IMESSAGE_API_KEY) and the separateimessage-cloudchannel +/add-imessage-cloudskill are removed. See docs/imessage.md. - [BREAKING] Provider-agnostic memory. All providers now share one OKF v0.1-compatible
memory/tree, while persona lives ininstructions.prepend.md; startup, clear, and compact reload memory automatically. Existing groups with legacy memory must run/migrate-memorybefore use. See memory and provider migration. - New groups can inherit an instance-wide default provider.
DEFAULT_AGENT_PROVIDERsets the provider used when a new agent group is created without an explicit provider. Each group's stored provider still overrides it, and existing groups are unchanged. - [BREAKING] Channel install skills are now the single source of truth. The setup wizard installs channels by applying the same
/add-<channel>SKILL.md a coding agent would follow — a deterministic engine executes the skill's mechanical steps directly from the document, so wizard and skill cannot drift, and anything the engine cannot do falls back to an agent reading the prose. Migration: the bespoke non-interactive channel installers (setup/add-<channel>.sh,setup/install-<channel>.sh) and per-channel wizard flows (setup/channels/<channel>.ts) are deleted. Anything that invoked them should apply the skill instead: interactively via/add-<channel>or the setup wizard, or programmatically via skill directives. - One guard for privileged actions. Every privileged action crossing the container or channel boundary now passes through
guard()before execution:allow,hold, ordeny. Approved replays carry the approval row as a grant and re-run checks against current state; forged, consumed, mismatched, or newly unauthorized grants fail closed. Guarded delivery actions can no longer be re-registered without their guard specification. - [BREAKING]
whatsapp-formattingandslack-formattingmoved from trunk to thechannelsbranch. They now install with their channel, so installations without those channels no longer carry channel-specific formatting instructions in every agent's context. Migration — only if the channel is installed: re-run/add-whatsappor/add-slackafter updating. Do not run an add-skill preemptively; it installs the full adapter. - [BREAKING] Scheduled tasks moved from MCP tools to
ncl tasks. Agents and operators now manage tasks withncl tasks list/get/create/update/cancel/pause/resume/delete/run/append-log; task sessions are isolated from the chat session that created them. Migration: follow the scheduled-task migration guide. - [BREAKING] Task delivery is explicit and uses one door. Every
send_messageandsend_filecall requires a namedtodestination; task-session final output becomes the run summary, while only explicitly addressed tool calls deliver. Migration: rebuild the agent image, restart NanoClaw, update custom instructions that omitto, and clear or compact existing sessions. Failed pre-task scripts now back their recurring series off and auto-pause after eight consecutive failures instead of spinning. - [BREAKING] Chat SDK and channel adapters are pinned to
4.29.0. The bridge and adapter must use the sameChatInstancetype, so exact pins replace caret ranges. Core installations without a channel are unaffected. Migration: if a channel is installed, re-run its/add-<channel>skill after updating. - Hardened agent images are available as an opt-in setup path. A digest-pinned, multi-architecture image can be fetched from the NanoClaw registry and retagged to the same local name used by builds; architecture, lockfile, provenance, size, and optional publisher-signature checks fail closed. Local builds remain the default and require no account. See hardened images.
- Agent containers now start with safer defaults. New spawns always drop all Linux capabilities, set
no-new-privileges, and use Docker's init process; these controls have no per-group override. A PID limit defaults to 2048 and can be changed installation-wide withCONTAINER_PIDS_LIMIT(0disables it). The Vercel CLI is now opt-in instead of being baked into every image. - Agent containers can have installation-wide resource caps.
CONTAINER_CPU_LIMITandCONTAINER_MEMORY_LIMITpass--cpusand--memoryto Docker for every agent container. Both remain empty by default, so existing installations keep their current behavior. - Per-agent-group timezones.
ncl groups config update --timezone <IANA>overrides the install timezone for that group's scheduling, run-log display, and containerTZ;""clears the override. Host-side operator display remains in the install timezone. - Agent templates and reusable skills expanded. Local templates can stamp persona, context, MCP configuration, and skills through
ncl groups create --template; templates can also seed scheduled tasks and timezone./learndistills a reusable skill from an existing workflow, and/add-clidashinstalls a read-only CLI-derived dashboard. - A clearer, safer
nclcontrol plane. Verbs now declare and validate their arguments, generate deep help, preserve dashed IDs, render human-readable output on the host, and flush large responses before exit. Creating groups and wirings now provisions their required companion rows transactionally, fixing first-spawn failures and silently dropped replies. - Approval and agent-to-agent controls are more expressive. Connected agents can require per-message approval; rejection reasons reach the requester; OneCLI approval cards use the gateway's structured summary; and shared-channel cards retain who approved or rejected an action.
- Delivery and provider failures stop disappearing. Missing adapters route messages into retry instead of marking them delivered, agent image builds no longer block the host, and Claude rate-limit telemetry only aborts a turn when the SDK reports a rejection. Billing exhaustion and transient rate limits remain distinct.
- Setup and update recovery improved. Setup can parse wrapped Claude OAuth captures, offer Slack Socket Mode, and reap dead peer-service registrations. Re-applying an updated skill rebuilds the container when needed, and a missing session folder is re-provisioned so the documented reset path works.
- Security fixes. Inbox attachment writes reject symlink escapes, approved CLI calls preserve the original caller context, command-gate checks no longer fail open, mount allowlists honor
readOnly, and stale v1 secret/config mirrors were removed. - Documentation was refreshed across architecture, database schemas, security boundaries, provider configuration, SDK behavior, skills, and registry-branch maintenance. A Korean README is now available.
Rollup release covering v2.1.1 through v2.1.17 — every package.json bump merged since the v2.1.0 tag. This section restores the changelog entry from the already-published v2.1.17 GitHub Release.
- [BREAKING]
@onecli-sh/sdk0.5.0 → 2.2.1 requires a OneCLI server with the/v1API. Older servers return 404 for every SDK call. The sanctioned gateway and CLI versions are pinned inversions.json, and theoneclisetup step enforces them. Migration:/update-nanoclawupgrades the gateway when its pin moves; otherwise follow the OneCLI upgrade guide. - New Codex agent provider. Run
/add-codexto install thecodex app-serverprovider from theprovidersbranch. Authentication remains vault-only; no credential enters a container. - Setup can select, install, and authenticate a non-default agent provider. The selected provider is stored on the first agent before its first spawn. Picking the default Claude provider changes nothing.
- Provider choice is explicit per group. Change it with
ncl groups config update --provider, then restart the group. - Provider memory moves through
/migrate-memory. Runtime does not copy provider-owned stores automatically; follow the provider migration guide. /update-nanoclawupgrades the OneCLI gateway when its sanctioned pin moves. Hosts whose gateway pin did not change are unaffected.- Budget and billing errors reach the user. Non-retryable provider errors without message wrapping are delivered to the originating channel instead of entering a silent retry loop.
- Command-gate denials reach the sender. Host-side outbound writes now use the read-write opener, fixing a
SQLITE_READONLYfailure that silently dropped denial responses. - Slash commands interrupt an in-flight turn. Runner-handled commands such as
/clear,/compact, and/costno longer wait for the current turn to finish. - Container boot failures say why. A stderr tail is logged at warning level when a container exits non-zero instead of disappearing below the default log level.
- Opt-in egress lockdown. Containers can fail closed against a configured outbound allowlist. See the security model.
- Channel instances are first-class. One channel kind can run multiple independent instances with separate credentials, Chat SDK state, and webhook routes; existing single-instance installs remain compatible.
- Native uninstaller.
bash uninstall.shornanoclaw.sh --uninstallremoves the service, data directory, host registration, and OneCLI agent registration for that installation. Dry-run and confirmation modes are included. - Interactive setup handoffs preserve context. Failure and
?handoffs now provide the context as Claude's first user prompt and retain one session across handoffs. - Raw webhook route registry. Channels can register HTTP routes without editing the host route table.
- Typed delivery-action and approval-resolved registries. Channels can expose delivery actions and receive approval-resolution callbacks without channel-specific branching at the host call site.
- Provider-owned per-exchange archiving. The agent runner exposes
onExchangeComplete; providers opt into their own archival behavior. - [security] A2A attachment resolution rejects symlink escapes from the per-group sandbox.
- [security] Approval responses require an authorized admin whose scope covers the request's group.
- [security] Agent creation is authorized on the host as well as the API edge; confined groups require host-side approval.
host-sweeprespects a per-group wake grace instead of tearing down a container that just woke with a stale processing claim.- Global container CLI installs are data-driven through
container/cli-tools.json;agent-browseris pinned to0.27.1. - Four v1-only skills were retired:
claw,x-integration,add-parallel, andconvert-to-apple-container. - The skills installation model is documented in the skills model, and twelve skills were updated to the current contract.
- An Ollama prompt-cache guide was added for the Claude Code → Ollama path. See Ollama.
- Resolved approval and question cards in shared channels retain the acting user's name.
@anthropic-ai/claude-codeand@anthropic-ai/claude-agent-sdkwere updated to2.1.170and0.3.170.
- [BREAKING] Startup now requires an upgrade marker. The host refuses to boot unless
data/upgrade-state.jsonrecords that this install reached the current version through a sanctioned path (/setup,/update-nanoclaw,/migrate-nanoclaw). After this update completes — and before restarting the service — stamp the marker by runningpnpm exec tsx scripts/upgrade-state.ts set. If the host has already tripped on restart with "update did not go through the supported path", that same command clears it. See docs/upgrade-recovery.md.
ncl destinations addandremovethrough the approval flow now reach the receiver immediately. Approved destinations weren't being projected into the receiving agent's local session state, so a freshly-added destination silently failed atsend_messagewithunknown destination, and a removed destination stayed resolvable until the next container restart. Both now take effect the moment the approval executes. Direct (non-approval) calls were unaffected.
Rollup release covering v2.0.55 through v2.0.63 — everything merged since the v2.0.54 tag. Starting with this release, the goal is to publish a GitHub Release for every package.json version bump that lands on main; see RELEASING.md.
- [BREAKING] Service names are now per-install. On v2 installs the launchd label and systemd unit are slugged to your project root:
com.nanoclaw.<sha1(projectRoot)[:8]>andnanoclaw-<slug>.service. The oldcom.nanoclaw/nanoclaw.servicenames no longer match a real service — update any copy-pasted restart or status commands. Find your install's names withsource setup/lib/install-slug.sh && launchd_label(macOS) orsystemd_unit(Linux). Thencltransport-error help text and 26 skill files now use the canonical helper-driven pattern; see setup/lib/install-slug.sh. - Compaction destination reminder placement fixed. The reminder injected after SDK auto-compaction now appears at the end of the compaction summary so it isn't stripped during truncation. Replaces the placement shipped in v2.0.54.
- Stronger message-wrapping enforcement. The poll loop nudges the agent when its output lacks
<message>wrapping, andCLAUDE.mdcore instructions now require wrapping even for single-destination agents. The welcome flow no longer double-greets. - OneCLI credentials after MCP install. MCP servers added through
add_mcp_servernow inherit OneCLI gateway routing — fixes the case where the agent kept asking for API keys after installing a new server. - CLI scope hardening.
scopeFieldnow fails closed when scope is missing, andsessions getis guarded against cross-group oracle access from group-scoped agents. - gmail/gcal skills aligned with v2.
/add-gmail-tooland/add-gcal-toolnow reflect the v2 container-config model — DB-backed mounts, no deadTOOL_ALLOWLISTedits, nocontainer.jsonwrites that get clobbered on next spawn. Manual sqlite3/JSON1 invocations corrected. - Repo-rename cleanup. Remaining
qwibitai/nanoclawreferences swept tonanocoai/nanoclawacross code and docs; CI workflow guards updated so they no longer no-op after the rename. - Slack scope checklist now includes
files:readandfiles:writefor skills that read or post attachments. - The internal-tag description in destination instructions no longer mentions scratchpads (which confused agents into routing them incorrectly).
- Container startup is now graceful when the
on_wakecolumn is missing on older sessions DBs.
- Per-group model and effort overrides. Agent groups can now run a specific Claude model and effort level, set via
ncl groups config update --model <model> --effort <level>. Defaults to the host-configured model when unset. - Claude Code 2.1.128. Container claude-code bumped from 2.1.116 to 2.1.128.
- CLI help text improvements for
ncl groups configandncl groups restart.
- Container config moved to DB. Per-agent-group container runtime config (provider, model, packages, MCP servers, mounts, skills) now lives in the
container_configstable instead ofgroups/<folder>/container.json. Existing filesystem configs are backfilled automatically on startup. Managed viancl groups config get/updateandconfig add-mcp-server/remove-mcp-server/add-package/remove-package. - Explicit restart with on-wake messages. Config CLI operations no longer auto-kill containers. New
ncl groups restartcommand with--rebuildand--messageflags. On-wake messages (on_wakecolumn onmessages_in) are only picked up by a fresh container's first poll, preventing dying containers from stealing them during the SIGTERM grace period. Self-mod approval handlers (install_packages,add_mcp_server) use the same race-free mechanism. - Per-group CLI scope. New
cli_scopesetting on container config (disabled/group/global, defaultgroup). Controls what the agent can access vianclfrom inside the container.disabledexcludes CLI instructions from CLAUDE.md and blocks all requests.group(default) restricts to own-group resources with auto-filled args.globalgives unrestricted access (set automatically for owner agent groups). Includes post-handler result filtering to prevent cross-group data leaks and blockscli_scopeescalation from group-scoped agents.
- Admin CLI (
ncl). Newnclcommand for querying and modifying the central DB — agent groups, messaging groups, wirings, users, roles, members, destinations, sessions, approvals, and dropped messages. Host-side transport via Unix socket; container-side transport via session DB. Write operations from inside containers go through the approval flow.listsupports column filtering and--limit. Runncl helpfor usage. - v1 → v2 migration. Run
bash migrate-v2.shfrom the v2 checkout. Finds your v1 install (sibling directory orNANOCLAW_V1_PATH), merges.env, seeds the v2 DB fromregistered_groups, copies group folders (CLAUDE.md→CLAUDE.local.md), copies session data with conversation continuity, ports scheduled tasks, interactively selects and installs channels (clack multiselect), copies container skills, builds the agent container, and offers a service switchover to test. Hands off to Claude (/migrate-from-v1) for owner seeding, access policy, CLAUDE.md cleanup, and fork customization porting. See docs/migration-dev.md and docs/v1-to-v2-changes.md.
Major version. NanoClaw v2 is a substantial architectural rewrite. Existing forks should run /migrate-nanoclaw (clean-base replay of customizations) or /update-nanoclaw (selective cherry-pick) before resuming work.
- [BREAKING] New entity model. Users, roles (owner/admin), messaging groups, and agent groups are now tracked as separate entities, wired via
messaging_group_agents. Privilege is user-level instead of channel-level, so the old "main channel = admin" concept is retired. See docs/architecture.md and docs/isolation-model.md. - [BREAKING] Two-DB session split. Each session now has
inbound.db(host writes, container reads) andoutbound.db(container writes, host reads) with exactly one writer each. Replaces the single shared session DB and eliminates cross-mount SQLite contention. See docs/db-session.md. - [BREAKING] Install flow replaced.
bash nanoclaw.shis the new default: a scripted installer that hands off to Claude Code for error recovery and guided decisions. The/setupClaude-guided skill still works as an alternative. - [BREAKING] Channels moved to the
channelsbranch. Trunk no longer ships Discord, Slack, Telegram, WhatsApp, iMessage, Teams, Linear, GitHub, WeChat, Matrix, Google Chat, Webex, Resend, or WhatsApp Cloud. Install them per fork via/add-<channel>skills, which copy from thechannelsbranch./update-nanoclawwill re-install the channels your fork had. - [BREAKING] Alternative providers moved to the
providersbranch. OpenCode, Codex, and Ollama install via/add-opencode,/add-codex,/add-ollama-provider. Claude remains the default provider baked into trunk. - [BREAKING] Three-level channel isolation. Wire channels to their own agent (separate agent groups), share an agent with independent conversations (
session_mode: 'shared'), or merge channels into one shared session (session_mode: 'agent-shared'). Chosen per channel via/manage-channels. - [BREAKING] Apple Container removed from default setup. Still available as an opt-in via
/convert-to-apple-container. - Shared-source agent-runner. Per-group
agent-runner-src/overlays are gone; all groups mount the same agent-runner read-only. Per-group customization flows through composedCLAUDE.md(shared base + per-group fragments). - Agent-runner runtime moved from Node to Bun. Container image is self-contained; no host-side impact. Host remains on Node + pnpm.
- OneCLI Agent Vault is the sole credential path. Containers never receive raw API keys; credentials are injected at request time.
- [BREAKING] Replaced pino logger with built-in logger. WhatsApp users must re-merge the WhatsApp fork to pick up the Baileys logger compatibility fix:
git fetch whatsapp main && git merge whatsapp/main. If thewhatsappremote is not configured:git remote add whatsapp https://github.com/qwibitai/nanoclaw-whatsapp.git.
- [BREAKING] OneCLI Agent Vault replaces the built-in credential proxy. Check your runtime:
grep CONTAINER_RUNTIME_BIN src/container-runtime.ts— if it shows'container'you are on Apple Container, if'docker'you are on Docker. Docker users: run/init-oneclito install OneCLI and migrate.envcredentials to the vault. Apple Container users: re-merge the skill branch (git fetch upstream skill/apple-container && git merge upstream/skill/apple-container) then run/convert-to-apple-containerand follow all instructions (configures credential proxy networking) — do NOT run/init-onecli, it requires Docker.
- Added opt-in diagnostics via PostHog with explicit user consent (Yes / No / Never ask again)
- Added ESLint configuration with error-handling rules
- Reduced
docker stoptimeout for faster container restarts (-t 1flag)
- User prompt content no longer logged on container errors — only input metadata
- Added Japanese README translation
- Added
/capabilitiesand/statuscontainer-agent skills
- Tasks snapshot now refreshes immediately after IPC task mutations
- Fixed remote-control prompt auto-accept to prevent immediate exit
- Added
KillMode=processso remote-control survives service restarts
- Added
/remote-controlcommand for host-level Claude Code access from within containers
Breaking: Skills are now git branches, channels are separate fork repos.
- Skills live as
skill/*git branches merged viagit merge - Added Docker Sandboxes support
- Fixed setup registration to use correct CLI commands
- Added
/compactskill for manual context compaction - Enhanced container environment isolation via credential proxy
- Added PDF reader, image vision, and WhatsApp reactions skills
- Fixed task container to close promptly when agent uses IPC-only messaging
- Added
LIMITto unbounded message history queries for better performance
- Agent prompts now include timezone context for accurate time references
- Fixed misleading
send_messagetool description for scheduled tasks
- Added
/add-ollamaskill for local model inference - Added
update_tasktool and return task ID fromschedule_task
- Updated
claude-agent-sdkto 0.2.68
- CI formatting fix
- Fixed
_chatJidrename tochatJidinonMessagecallback
- Added sender allowlist for per-chat access control
- Added
/use-local-whisperskill for local voice transcription - Atomic task claims prevent scheduled tasks from executing twice
- Version bump (no functional changes)
Breaking: WhatsApp removed from core, now a skill. Run /add-whatsapp to re-add.
- Channel registry: channels self-register at startup via
registerChannel()factory pattern isMainflag replaces folder-name-based main group detectionENABLED_CHANNELSremoved — channels detected by credential presence- Prevent scheduled tasks from executing twice when container runtime exceeds poll interval
- Added CJK font support for Chromium screenshots
- Fixed wrapped WhatsApp message normalization
- Added third-party model support
- Added
/update-nanoclawskill for syncing with upstream
- Added
/add-slackskill - Restructured Gmail skill for new architecture
- Improved error handling for WhatsApp Web version fetch
- Added Qodo skills and codebase intelligence
- Fixed WhatsApp 405 connection failures
- Added
/updateskill to pull upstream changes from within Claude Code - Enhanced container environment isolation via credential proxy