Skip to content

chore: upstream NanoClaw update 2026-04-15#3

Open
gityc-hub wants to merge 318 commits intomainfrom
update/upstream-20260415
Open

chore: upstream NanoClaw update 2026-04-15#3
gityc-hub wants to merge 318 commits intomainfrom
update/upstream-20260415

Conversation

@gityc-hub
Copy link
Copy Markdown
Owner

Upstream NanoClaw Update — 2026-04-15

Merges 532 new commits from upstream/main (qwibitai/nanoclaw) into this fork with no conflicts.

Build & Tests

  • npm ci
  • npm run build ✅ (TypeScript compiled clean)
  • npm test ✅ — 246 tests passed across 18 test files

Backup branch

backup/pre-update-20260415-HHMM was created before the merge.


Notable upstream changes (newest first)

  • 934f063 update deps
  • 32a487b Merge pull request fix(gmail): add OneCLI credential mode detection qwibitai/nanoclaw#1660 from johnnyfish/fix/gmail-onecli-credential-mode
  • 751a9ed fix(gmail): add OneCLI credential mode detection
  • 22d7856 reduce setup friction
  • ca9333d improve diagnostics
  • 6c289c3 chore: add .npmrc with 7-day minimum release age
  • b8cf308 chore: bump version to 1.2.52
  • 5702760 Merge pull request Fix global memory for main agent: correct path and add writable mount qwibitai/nanoclaw#1644 from sargunv/fix/global-memory-path
  • 653390d chore: bump version to 1.2.51
  • 3381509 Merge pull request Update SKILL.md to use ONECLI_URL variable qwibitai/nanoclaw#1658 from guyb1/patch-1
  • 19ce90c fix
  • 0918f78 fix
  • 4fd7586 update init-onecli
  • 5adc949 Update SKILL.md to use ONECLI_URL variable
  • 1d5c38d fix: three issues in karpathy wiki skill
  • 75c2e18 chore: bump version to 1.2.50
  • f77f9ce feat: set auto-compact threshold to 165k tokens
  • 27f9f0c Merge pull request feat: add /add-karpathy-llm-wiki skill qwibitai/nanoclaw#1649 from qwibitai/skill/wiki
  • 33b5627 chore: rename skill to add-karpathy-llm-wiki
  • f69979f fix: simplify source handling step and fix typo in wiki skill
  • 54bf454 refactor: rework wiki skill to use Karpathy's original text as reference
  • 36943fb feat: add /add-wiki skill for persistent LLM Wiki knowledge bases
  • 1488c5b fix: add writable global memory mount for main agent
  • 22ab96c fix: correct global memory path in container CLAUDE.md
  • 391b729 Merge pull request Skill/migrate nanoclaw qwibitai/nanoclaw#1634 from qwibitai/skill/migrate-nanoclaw
  • 3703c9d feat: suggest /migrate-nanoclaw when user is far behind upstream
  • c5cb97b Merge pull request Skill/migrate from openclaw qwibitai/nanoclaw#1633 from qwibitai/skill/migrate-from-openclaw
  • 761d3a1 feat: add migrated_from_openclaw field to setup diagnostics
  • b752e5c chore: bump version to 1.2.49
  • a74be06 Merge pull request feat: auto-prune stale session artifacts qwibitai/nanoclaw#1632 from qwibitai/feat/session-cleanup-pr
  • d4a6b4a fix: portable stat and subshell variable mutation in cleanup script
  • 67020f9 feat: auto-prune stale session artifacts on startup + daily
  • 8a02170 chore: bump version to 1.2.48
  • db3440f feat: upgrade agent SDK to 0.2.92 with 1M context and 200k auto-compact
  • b2a5a58 feat: add /migrate-from-openclaw skill for guided OpenClaw migration
  • 426ae02 feat: add diagnostics telemetry to migrate-nanoclaw skill
  • 7ef1c4f fix: apply lessons from real-world migration test run
  • f60bb3c feat: add /migrate-nanoclaw skill for intent-based upgrades
  • 8f28cde chore: bump version to 1.2.47
  • 032ba77 feat: mount store rw for main agent and add requiresTrigger to register_group
  • 5841141 Merge pull request docs: breaking change entries for Apple Container and pino removal qwibitai/nanoclaw#1610 from qwibitai/fix/changelog-breaking-changes
  • bf11109 docs: update breaking changes and Apple Container skill security
  • 6f93b20 fix: relax breaking change detection to match [BREAKING] anywhere in line
  • 6e0653f chore: bump version to 1.2.46
  • ee599b9 feat: add reply/quoted message context support
  • 22f5d55 Add Contributor Covenant Code of Conduct
  • 4c7bc80 chore: bump version to 1.2.45
  • 87e8914 style: run prettier on container/agent-runner/src/
  • 7b0d79a chore: bump version to 1.2.44
  • 468c617 style: run prettier and eslint on src/
  • (…and ~480 more commits — see full git log for complete history)

New skills added

  • /add-emacs — Emacs channel integration
  • /add-karpathy-llm-wiki — persistent wiki knowledge bases (renamed from add-wiki)
  • /add-macos-statusbar — macOS menu bar status indicator
  • /channel-formatting — per-channel Markdown-to-native formatting
  • /init-onecli — OneCLI Agent Vault installer
  • /migrate-from-openclaw — guided OpenClaw → NanoClaw migration
  • /migrate-nanoclaw — intent-based upgrade skill
  • /use-native-credential-proxy — built-in credential proxy (no OneCLI needed)

Key source changes

  • src/credential-proxy.ts removed (replaced by native proxy skill)
  • src/session-cleanup.ts added (auto-prune stale session artifacts)
  • setup/timezone.ts added
  • container/agent-runner updated to SDK 0.2.92 (1M context, 200k auto-compact)
  • groups/global/CLAUDE.md added (new global memory file)

github-actions Bot and others added 30 commits March 19, 2026 19:05
These workflows use APP_ID/APP_PRIVATE_KEY secrets that only exist on
the upstream repo. Without a fork guard they fail on every push for
every fork. merge-forward-skills already has the correct guard.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The diagnostics section used a markdown link that Claude never resolved,
so the prompt was silently skipped. Replace with a numbered step (setup)
and mandatory final step (update-nanoclaw) that instructs Claude to use
the Read tool on the full file path. Update opt-out instructions to
match the renamed section headings.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
/setup overwrote ~/.config/nanoclaw/mount-allowlist.json unconditionally,
clobbering any user customizations made after initial setup. Now checks for
the file first and skips with a 'skipped' status if it exists.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The skip message mentioned --force but parseArgs didn't handle it,
making it a false promise. Now --force is parsed and passed through,
allowing users to regenerate the mount allowlist when needed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
claw was running containers with no volume mounts, so the agent
always saw an empty /workspace/group. Add build_mounts() to
replicate the same bind-mounts that container-runner.ts sets up
(group folder, .claude sessions, IPC dir, agent-runner source,
and project root for main).

Also includes upstream fix from qwibitai#1368:
graceful terminate() before kill() on output sentinel, and early
return after a successful structured response so exit code stays 0.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- README.md: add docs.nanoclaw.dev link, point architecture and security
  references to documentation site
- CHANGELOG.md: add all releases from v1.1.0 through v1.2.21 (was only v1.2.0),
  link to full changelog on docs site
- docs/REQUIREMENTS.md: update multi-channel references (NanoClaw now supports
  WhatsApp, Telegram, Discord, Slack, Gmail), update RFS to reflect existing
  skills, fix deployment info (macOS + Linux)
- docs/SECURITY.md: generalize WhatsApp-specific language to channel-neutral
- docs/DEBUG_CHECKLIST.md: use Docker commands (default runtime) instead of
  Apple Container syntax, generalize WhatsApp references
- docs/README.md: new file pointing to docs.nanoclaw.dev as the authoritative
  source, with mapping table from local files to docs site pages

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When registering a new group, create CLAUDE.md in the group folder from
the appropriate template (groups/main/ for main groups, groups/global/
for others). Without this, the container agent runs with no CLAUDE.md
since its CWD is /workspace/group (the group folder).

Also update the name-replacement glob to cover all groups/*/CLAUDE.md
files rather than only two hardcoded paths, so newly created files and
any future group folders are updated correctly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds 5 tests verifying the template copy and glob-based name update
logic introduced in the parent commit:
- copies global template for non-main groups
- copies main template for main groups
- does not overwrite existing CLAUDE.md
- updates name across all groups/*/CLAUDE.md files
- handles missing template gracefully (no crash)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replaces single-channel tests with multi-channel scenarios:
- each channel can have its own main with admin context
- non-main groups across channels get global template
- custom name propagates to all channels and groups
- user-modified CLAUDE.md preserved on re-registration
- missing templates handled gracefully

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When a non-main group is re-registered with --is-main, the existing
CLAUDE.md (copied from global template) lacked admin context. Now
register.ts detects this promotion case and replaces it with the main
template. Files that already contain "## Admin Context" are preserved.

Adds tests for:
- promoting non-main to main upgrades the template
- cross-channel promotion (e.g. Telegram non-main → main)
- promotion with custom assistant name
- re-registration preserves user-modified main CLAUDE.md
- re-registration preserves user-modified non-main CLAUDE.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The promotion logic (overwriting CLAUDE.md when a group becomes main)
is unsafe. Real-world setups use is_main for groups that intentionally
lack admin context — e.g. a family chat (whatsapp_casa) with 144 lines
of custom persona, PARA workspace, task management, and family context.
Overwriting based on missing "## Admin Context" would destroy user work.

register.ts now follows a simple rule: create template for new folders,
never touch existing files. Tests updated to verify preservation across
re-registration and main promotion scenarios.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add SKILL.md for the native credential proxy feature skill.
Delete src/credential-proxy.ts and src/credential-proxy.test.ts
which became dead code after PR qwibitai#1237 (OneCLI integration).
These files live on the skill/native-credential-proxy branch.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Gives Claude context on how credentials/API keys/OAuth tokens are managed via the OneCLI gateway, so it doesn't suggest storing secrets in .env or passing them to containers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Closes qwibitai#1361

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
gavrielc and others added 30 commits April 5, 2026 00:23
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The documented path /workspace/project/groups/global/CLAUDE.md doesn't
match the actual mount point /workspace/global. This caused agents to
look for global memory at a nonexistent path.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Main group had no mount for the global memory directory
(/workspace/global), so it could only reach it through the read-only
project root. This meant the main agent couldn't write to global
memory despite groups/main/CLAUDE.md instructing it to do so.

Add a writable mount at /workspace/global for the isMain branch,
matching the read-only mount that non-main groups already have.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Container skill teaches the agent to maintain a structured, interlinked
wiki from ingested sources. Feature skill bootstraps the setup — directory
structure, group CLAUDE.md, optional scheduled lint.

Based on Karpathy's LLM Wiki pattern.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove pre-written container skill. Instead, include llm-wiki.md
(Karpathy's gist) as the reference material and have the setup skill
guide the user through collaboratively building their own wiki schema,
container skill, and directory structure based on the pattern.

Add NanoClaw-specific notes: image vision, PDF reader, voice
transcription, curl for full document fetch, file attachment handling.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove hardcoded file path checks. Step 4 now discusses source types
with the user and helps install needed skills dynamically. Fix "use use"
typo and change curl example to file download.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: add /add-karpathy-llm-wiki skill
Compact earlier to preserve more context fidelity before the window fills.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1. Lint schedule now uses NanoClaw scheduled_tasks table instead of
   Claude Code cron — runs in the group's agent container
2. CLAUDE.md must enforce one-at-a-time file ingestion — never batch
3. Expanded CLAUDE.md guidance: explain system, index files, point to
   container skill, enforce ingest discipline

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Update SKILL.md to use ONECLI_URL variable
Fix global memory for main agent: correct path and add writable mount
Supply chain protection — npm will not install package versions
published less than 7 days ago.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…dential-mode

fix(gmail): add OneCLI credential mode detection
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.