Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions features/customization.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
1. **Code changes** — for behavior baked into the orchestrator (trigger pattern, polling, timeouts)
2. **Wiring settings** — per-messaging-group config stored in the central DB (engage mode, sender scope, session mode)
3. **Skills** — for features and integrations (install via `/add-<name>`, uninstall via `git revert`)
4. **Mount allowlist** — for which host directories an agent can see

Check warning on line 13 in features/customization.mdx

View check run for this annotation

Mintlify / Mintlify Validation (qwibitai-nanoclaw-8) - vale-spellcheck

features/customization.mdx#L13

Did you really mean 'allowlist'?

## Philosophy

Expand Down Expand Up @@ -99,7 +99,7 @@
MAX_CONCURRENT_CONTAINERS=10 systemctl --user restart nanoclaw
```

Or persist in your systemd / launchd service definition.

Check warning on line 102 in features/customization.mdx

View check run for this annotation

Mintlify / Mintlify Validation (qwibitai-nanoclaw-8) - vale-spellcheck

features/customization.mdx#L102

Did you really mean 'systemd'?

Check warning on line 102 in features/customization.mdx

View check run for this annotation

Mintlify / Mintlify Validation (qwibitai-nanoclaw-8) - vale-spellcheck

features/customization.mdx#L102

Did you really mean 'launchd'?

## Per-wiring behavior (engage mode, sender scope, session mode)

Expand Down Expand Up @@ -150,9 +150,9 @@

`CLAUDE.md` is composed at session start — a shared base plus the per-group fragment. Per-group changes don't affect other agent groups.

## Mount allowlist

Check warning on line 153 in features/customization.mdx

View check run for this annotation

Mintlify / Mintlify Validation (qwibitai-nanoclaw-8) - vale-spellcheck

features/customization.mdx#L153

Did you really mean 'allowlist'?

Agents only see what you mount. The allowlist lives at `~/.config/nanoclaw/mount-allowlist.json` (outside the project root, never mounted into containers):

Check warning on line 155 in features/customization.mdx

View check run for this annotation

Mintlify / Mintlify Validation (qwibitai-nanoclaw-8) - vale-spellcheck

features/customization.mdx#L155

Did you really mean 'allowlist'?

```json
{
Expand All @@ -168,13 +168,33 @@
"description": "Development project"
}
],
"blockedPatterns": [],

Check warning on line 171 in features/customization.mdx

View check run for this annotation

Mintlify / Mintlify Validation (qwibitai-nanoclaw-8) - vale-spellcheck

features/customization.mdx#L171

Did you really mean 'blockedPatterns'?
"nonMainReadOnly": true
}
```

Per-agent-group mount requests live in `groups/<folder>/container.json`. The host validates each request against the allowlist before mounting. See [Security model](/advanced/security-model) for the full picture.

Check warning on line 176 in features/customization.mdx

View check run for this annotation

Mintlify / Mintlify Validation (qwibitai-nanoclaw-8) - vale-spellcheck

features/customization.mdx#L176

Did you really mean 'allowlist'?

## Container config changes require a restart

Container config edits made through the agent's admin CLI (`ncl groups config update`) — model, provider, effort, packages, MCP servers — are written to the central DB but do **not** apply to the running container. Restart the agent group for the new config to take effect:

```bash
ncl groups config update --model claude-sonnet-4-5-20250514
# After approval: config is saved, container still runs the old model
ncl groups restart --message "Applying config update."
# After approval: container restarts with the new config
```

For package changes (`config add-package`), pass `--rebuild` so the derived image is rebuilt before the container comes back up:

```bash
ncl groups config add-package --npm some-package
ncl groups restart --rebuild --message "Installing new package."
```

Without `--message`, the container is killed but only respawns on the next user message. Use `--message` to force an immediate respawn so the new config is exercised right away.

Check warning on line 196 in features/customization.mdx

View check run for this annotation

Mintlify / Mintlify Validation (qwibitai-nanoclaw-8) - vale-spellcheck

features/customization.mdx#L196

Did you really mean 'respawns'?

Check warning on line 196 in features/customization.mdx

View check run for this annotation

Mintlify / Mintlify Validation (qwibitai-nanoclaw-8) - vale-spellcheck

features/customization.mdx#L196

Did you really mean 'respawn'?

## The `/customize` skill

For guided changes without memorizing file paths:
Expand Down Expand Up @@ -235,6 +255,6 @@
## Related

- [Messaging](/features/messaging) — inbound routing and engage evaluation
- [Scheduled tasks](/features/scheduled-tasks) — task model and cron

Check warning on line 258 in features/customization.mdx

View check run for this annotation

Mintlify / Mintlify Validation (qwibitai-nanoclaw-8) - vale-spellcheck

features/customization.mdx#L258

Did you really mean 'cron'?
- [Security](/concepts/security) — sender policies, user roles
- [Architecture](/concepts/architecture) — two-DB session model