name: picoclaw-agent description: "Configure, extend, debug, or contribute to PicoClaw itself. Use when the task is about PicoClaw CLI commands, config.json, gateway, auth, models, skills, MCP servers, cron, routing, sessions, self-evolution, built-in slash commands, or repository internals. Use PicoClaw-native workflows, terminology, paths, and configuration." metadata: {"nanobot":{"emoji":"๐ฆ"}}
PicoClaw Agent
PicoClaw is a lightweight personal AI assistant and agent framework with a native CLI, chat gateway, MCP integration, installable skills, session routing, scheduled jobs, and self-evolution.
Use this skill when the job is about PicoClaw itself: onboarding, configuration, debugging, adding features, extending the CLI, changing routing/session behavior, working on skills or MCP support, or contributing to this repository.
Operating Stance
When this skill is active, stay fully subordinate to PicoClaw's real architecture:
- Prefer PicoClaw commands, config keys, workspace layout, and docs.
- Follow PicoClaw source and docs for behavior, naming, and workflows.
- Treat repository code and checked-in docs as the source of truth.
Quick Start
# Initialize ~/.picoclaw/config.json and ~/.picoclaw/workspace
picoclaw onboard
# Authenticate a provider
picoclaw auth login --provider openai
# Inspect or switch the default model
picoclaw model
picoclaw model my-default-model
# One-shot prompt
picoclaw agent -m "Hello"
# Interactive CLI chat
picoclaw agent
# Start the gateway for chat channels
picoclaw gateway
# Inspect runtime/config health
picoclaw status
# Explore installed skills and MCP servers
picoclaw skills list
picoclaw mcp list
Command Surface
Core CLI
picoclaw onboard
picoclaw agent [-m MESSAGE] [--session KEY] [--model MODEL] [--debug]
picoclaw gateway [--debug] [--no-truncate] [--allow-empty] [--host HOST]
picoclaw status
picoclaw version
picoclaw migrate
Configuration and Models
# Show or change the default configured model alias
picoclaw model
picoclaw model <model_name>
# Add a model from an OpenAI-compatible endpoint
picoclaw model add --api-base URL --api-key KEY
picoclaw model add -b http://localhost:8000/v1 -k dummy -m my-model -n local
# Reset config to factory defaults (preserves sensitive keys)
picoclaw config reset
picoclaw config reset --force
Notes:
- There is no general
picoclaw config editorpicoclaw config set. - Advanced edits are usually done by editing
~/.picoclaw/config.jsondirectly.
Authentication
picoclaw auth login --provider openai
picoclaw auth login --provider anthropic --setup-token
picoclaw auth login --provider antigravity --device-code
picoclaw auth models
picoclaw auth status
picoclaw auth logout --provider openai
picoclaw auth weixin
picoclaw auth wecom --timeout 10m
Skills
picoclaw skills list
picoclaw skills show <name>
picoclaw skills search "query"
picoclaw skills install owner/repo/path
picoclaw skills install --registry clawhub <slug>
picoclaw skills remove <name>
picoclaw skills list-builtin
picoclaw skills install-builtin
Skill loading priority is:
~/.picoclaw/workspace/skills~/.picoclaw/skills- builtin embedded skills
MCP
picoclaw mcp add filesystem -- npx -y @modelcontextprotocol/server-filesystem /tmp
picoclaw mcp add --deferred github --env-file .env.github -- npx -y @modelcontextprotocol/server-github
picoclaw mcp list
picoclaw mcp list --status
picoclaw mcp show github
picoclaw mcp test github
picoclaw mcp edit
picoclaw mcp remove github
Notes:
picoclaw mcpis a configuration manager fortools.mcp.servers.- It does not keep servers running by itself; the host/gateway loads them later.
Cron
picoclaw cron list
picoclaw cron add --name "Daily summary" --message "Summarize today's logs" --cron "0 18 * * *"
picoclaw cron add --name "Ping" --message "heartbeat" --every 300 --deliver
picoclaw cron enable <job-id>
picoclaw cron disable <job-id>
picoclaw cron remove <job-id>
Notes:
- The current CLI
picoclaw cron addsupports recurring jobs only:--everyor--cron. - One-shot
at_secondsjobs exist in the cron system, but not as a first-class CLI flag today.
Providers
PicoClaw supports 30+ LLM providers through model_list.
Credential patterns in PicoClaw are:
model_list[].api_keysfor most hosted APIspicoclaw auth login --provider ...for the built-in auth helper flows (openai,anthropic,antigravity)- local or self-hosted endpoints for providers like
ollama,lmstudio,vllm, andlitellm - external platform credentials for providers like
bedrock,azure, andgithub-copilot
picoclaw auth login does not cover every provider. For most providers, the normal path is adding a model_list entry with provider, model, and api_keys.
Common Provider Matrix
| Provider | provider value |
Auth path in PicoClaw |
|---|---|---|
| OpenAI | openai |
OAuth helper via picoclaw auth login --provider openai, or model_list[].api_keys |
| Anthropic | anthropic |
API key in model_list[].api_keys, or helper flow via picoclaw auth login --provider anthropic |
| Anthropic Messages API | anthropic-messages |
API key in model_list[].api_keys |
| Google Gemini | gemini |
API key in model_list[].api_keys |
| OpenRouter | openrouter |
API key in model_list[].api_keys |
| Zhipu / GLM | zhipu |
API key in model_list[].api_keys |
| DeepSeek | deepseek |
API key in model_list[].api_keys |
| VolcEngine / Doubao | volcengine |
API key in model_list[].api_keys |
| Qwen / DashScope | qwen |
API key in model_list[].api_keys |
| Moonshot / Kimi | moonshot |
API key in model_list[].api_keys |
| MiniMax | minimax |
API key in model_list[].api_keys |
| Mistral | mistral |
API key in model_list[].api_keys |
| Groq | groq |
API key in model_list[].api_keys |
| NVIDIA NIM | nvidia |
API key in model_list[].api_keys |
| Cerebras | cerebras |
API key in model_list[].api_keys |
| Azure OpenAI | azure |
api_key in model_list, or Microsoft Entra ID if built with azidentity support |
| AWS Bedrock | bedrock |
AWS credentials plus Bedrock-enabled build (go build -tags bedrock) |
| Antigravity | antigravity |
OAuth helper via picoclaw auth login --provider antigravity |
| GitHub Copilot | github-copilot |
External Copilot gRPC endpoint, default localhost:4321 |
| Ollama | ollama |
Local endpoint, no API key required |
| LM Studio | lmstudio |
Local endpoint, API key optional |
| vLLM | vllm |
Local OpenAI-compatible endpoint |
| LiteLLM | litellm |
Proxy endpoint and whichever credential model the proxy expects |
| Claude CLI | claude-cli |
Local Claude CLI provider, configured by workspace/runtime |
| Codex CLI | codex-cli |
Local Codex CLI provider, configured by workspace/runtime |
Additional OpenAI-Compatible Vendors
PicoClaw also carries first-class metadata or routing support for additional vendors such as:
venicevivgridlongcatmodelscopemimonovitabyteplusshengsuanyunavianzai-codinggpt4free
For the full provider matrix, default API bases, protocol families, and vendor-specific examples, read docs/guides/providers.md.
Built-in Tool Families
PicoClaw tools are configured under tools in config.json and registered dynamically at runtime.
Important activation rules:
- most tools are enabled or disabled individually through
tools.* - agent-level allowlists can further restrict tool visibility
turn_profile.toolscan narrow tool exposure for a request or agent- deferred MCP tools can stay hidden until unlocked by tool discovery
Runtime Tool Families
| Family | Runtime tool names | What they provide |
|---|---|---|
| Filesystem | read_file, write_file, list_dir, edit_file, append_file |
Read, write, list, and patch workspace files |
| Web | web_search, web_fetch |
Search the web and fetch readable page content |
| Command execution | exec |
Shell command execution with deny-pattern guardrails |
| Scheduling | cron |
Scheduled jobs, reminders, recurring tasks, and command jobs |
| Skills registry | find_skills, install_skill |
Search and install skills from configured registries |
| MCP | mcp_<server>_<tool> |
Tools contributed by connected MCP servers |
| MCP discovery | tool_search_tool_bm25, tool_search_tool_regex |
Discover deferred hidden MCP tools on demand |
| Hardware | i2c, spi, serial |
Hardware access for supported devices and boards |
| Messaging | message, reaction |
Send outbound messages and reactions through channel integrations |
| Media | send_file, load_image, send_tts |
Send files, load local images into context, generate TTS output |
| Subagents | spawn, subagent, spawn_status, delegate |
Background tasks, synchronous sub-turns, task status, multi-agent delegation |
Tool Registration Notes
send_ttsis registered only when a TTS provider is available.spawnandspawn_statusrequiresubagentsupport to be enabled.delegateis auto-registered only when more than one agent exists.- MCP discovery tools are relevant only when deferred MCP discovery is enabled.
messagecan be configured for outbound media as well as plain text.
For per-tool configuration, read docs/reference/tools_configuration.md.
Specialized Subagents and Spawn
PicoClaw has a first-class subagent model for long-running work, isolated subproblems, and multi-agent specialization.
The core idea is:
- use
spawnfor background work that should continue without blocking the current turn - use
subagentfor an isolated synchronous sub-task when the parent needs the result now - use
delegateto hand a task to a specific peer agent with its own identity, model, workspace, and tools - use
spawn_statusor/subagentsto inspect what is currently running
Choosing the Right Subagent Tool
| Tool | Execution style | Best use |
|---|---|---|
spawn |
Async background task | Web research, API polling, long scans, work that can report back later |
subagent |
Sync isolated sub-turn | Focused analysis, transformation, or verification that must return before the parent continues |
delegate |
Sync handoff to named peer agent | Work that should run as a specialized agent rather than as a generic child turn |
spawn_status |
Inspection/status only | Check running, completed, failed, or canceled spawned tasks |
Specialized Peer Agents
Specialized subagents are configured through the multi-agent system, not through ad hoc prompts alone.
The two important layers are:
config.jsondefines which peer agents exist and which ones a given agent is allowed to spawn viasubagents.allow_agents- each agent's
AGENT.mddefines the identity that makes that peer worth spawning:name,description, tools, skills, MCP servers, and optional model overrides
Minimal shape:
{
"agents": {
"list": [
{
"id": "main",
"default": true,
"subagents": {
"allow_agents": ["research"]
}
},
{
"id": "research"
}
]
}
}
Example AGENT.md for a specialist:
---
name: Research Agent
description: Specialist for deep web research, evidence gathering, and synthesis.
tools: [web_search, web_fetch, message]
skills: [deep-research]
---
Automatic Agent Discovery
When an agent has the spawn tool and at least one allowed peer, PicoClaw injects a lightweight agent registry into the system prompt automatically.
That means:
- the model can see eligible peer agents without calling a separate
list_agentstool - only spawnable peers are shown
- the current agent is omitted
- discovery uses the peer agent's stable
id,name, anddescription
In practice, this is what makes targeted spawn(..., agent_id="research") or delegate(agent_id="research", ...) reliable.
Operational Behavior
Subagent execution semantics that matter:
- subagents run in isolated ephemeral session history, so their reasoning and intermediate steps do not pollute the parent conversation
spawnreturns immediately and launches background work in a goroutinesubagentwaits for completion and returns the result directlydelegateis synchronous and runs as the target peer agent instead of a generic child taskspawn_statusis scoped to the current conversation when channel/chat context exists- all subagents still share the same workspace security boundary; they do not bypass sandbox or path restrictions
Runtime limits and lifecycle rules:
- nested sub-turn depth is limited to 3
- concurrency is limited to 5 sub-turns per parent turn
- waiting for a concurrency slot times out after 30 seconds
- spawned background tasks are marked critical so they can survive graceful parent completion
- hard aborts still cascade to child and grandchild sub-turns
Practical Patterns
Use spawn when:
- the task will take a while
- the result can arrive later
- the current turn should keep moving
Use subagent when:
- you need isolation from the parent context
- you want an independent attempt at a bounded subproblem
- the parent must wait for the answer before planning the next step
Use delegate when:
- a named peer agent is clearly better suited for the task
- that peer has a narrower tool/skill/model setup
- you want the task to run in the peer's own workspace/runtime identity
Examples
Background specialist research:
spawn(
task="Search the web for the latest PicoClaw MCP integration patterns and summarize them.",
label="mcp-research",
agent_id="research"
)
Synchronous isolated check:
subagent(
task="Review this config for risky tool exposure and return only the concrete findings."
)
Synchronous handoff to a named peer:
delegate(
agent_id="research",
task="Collect three primary-source references for current provider authentication behavior."
)
Observability
For live visibility:
- call
spawn_statusto inspect one task or list visible tasks in the current conversation - use
/subagentsin chat channels to show the active subagent tree for the current session
Voice, Transcription, and TTS
PicoClaw can transcribe inbound audio and synthesize outbound speech, but voice setup is model-driven like the rest of the runtime.
The important pattern is:
- ASR uses
voice.model_name - TTS uses
voice.tts_model_name - both resolve through named entries in
model_list - secrets belong in
.security.yml, not inline invoice
STT (Voice -> Text)
Voice and audio messages from supported channels can be transcribed automatically at the agent level.
Recommended setup:
- add an ASR-capable model entry to
model_list - set
voice.model_nameto that entry'smodel_name - store the matching API key in
.security.yml - optionally set
voice.echo_transcriptionif you want the transcript echoed back in chat
Example:
{
"model_list": [
{
"model_name": "voice-groq",
"model": "groq/whisper-large-v3-turbo"
}
],
"voice": {
"model_name": "voice-groq",
"echo_transcription": true
}
}
model_list:
voice-groq:
api_keys:
- "gsk_your_groq_key"
Common ASR Routes
| Route | Example model | Notes |
|---|---|---|
| Groq Whisper | groq/whisper-large-v3-turbo |
Fast OpenAI-compatible Whisper transcription and a common default choice |
| OpenAI Whisper | openai/whisper-1 |
Standard Whisper transcription through the OpenAI-compatible audio endpoint |
| ElevenLabs Scribe | provider: elevenlabs, model: scribe_v1 |
Uses PicoClaw's dedicated ElevenLabs transcription path |
| Audio-capable chat models | gemini/gemini-2.5-flash, openai/gpt-4o-audio-preview |
Multimodal audio transcription path; some model combinations are still evolving |
Detection behavior that matters:
voice.model_nameis the preferred and recommended path- if it resolves to an ElevenLabs model, PicoClaw uses the ElevenLabs transcriber
- if it resolves to a Whisper-compatible model, PicoClaw uses the Whisper transcription path
- if it resolves to an audio-capable multimodal model, PicoClaw can use audio-model transcription
- if
voice.model_nameis omitted, PicoClaw still performs compatibility scanning acrossmodel_listfor legacy auto-detected ASR entries
TTS (Text -> Voice)
Outbound speech is driven by voice.tts_model_name and exposed through send_tts when a provider is available.
Recommended setup:
- add a TTS-capable model entry to
model_list - set
voice.tts_model_nameto that entry'smodel_name - store the API key in
.security.yml - if the provider needs model-specific TTS fields, add them under
model_list[].extra_body - enable
send_ttsin the tool configuration if you want the agent to emit speech files
Example:
{
"model_list": [
{
"model_name": "openai-tts",
"model": "openai/tts-1"
}
],
"voice": {
"tts_model_name": "openai-tts"
}
}
model_list:
openai-tts:
api_keys:
- "sk-openai-your-key"
Example with OpenRouter MAI Voice 2:
{
"model_list": [
{
"model_name": "mai-voice-2",
"provider": "openrouter",
"model": "microsoft/mai-voice-2",
"api_base": "https://openrouter.ai/api/v1",
"extra_body": {
"voice": "en-US-Harper:MAI-Voice-2",
"response_format": "mp3"
}
}
],
"voice": {
"tts_model_name": "mai-voice-2"
}
}
model_list:
mai-voice-2:
api_keys:
- "sk-or-your-openrouter-key"
Current TTS Provider Paths
| Provider path | Example model | Notes |
|---|---|---|
| OpenAI-compatible speech | openai/tts-1 |
Best-supported path; PicoClaw sends an OpenAI-style /audio/speech request |
| Xiaomi MiMo | mimo/mimo-v2-tts |
Dedicated MiMo TTS provider path with MP3 output |
Operational notes:
- the preferred selection path is
voice.tts_model_name - if that is missing, PicoClaw can still scan
model_listfor the first API-backed model whose ID containstts - the current OpenAI-style TTS request defaults to
voice: alloyandresponse_format: opus - you can override
voiceandresponse_formatfor a specific TTS model throughmodel_list[].extra_body - if a provider rejects
response_format, PicoClaw retries once without that field send_ttsis only registered when TTS detection succeeds
In-Session Slash Commands
PicoClaw's shared slash command registry lives under pkg/commands.
Use these when helping users inside chat channels:
/start
/help
/show model
/show channel
/show agents
/show mcp <server>
/list models
/list channels
/list agents
/list skills
/list mcp
/subagents
/use <skill> [message]
/use clear
/btw <question>
Semantics that matter:
/use <skill> <message>forces one installed skill for a single request./use <skill>arms that skill for the next message in the same chat session./use clearcancels the pending skill override./btw <question>asks an isolated side question without mutating the main session history./subagentsshows the currently active subagent tree for the session.- Unknown slash commands pass through to normal LLM handling instead of hard-failing.
Telegram auto-registers supported top-level commands like /start, /help, /show, /list, /use, and /btw.
Key Paths and Environment
Important Files
~/.picoclaw/config.json Main config
~/.picoclaw/.security.yml Sensitive values stored outside config.json
~/.picoclaw/auth.json OAuth/token store
~/.picoclaw/workspace/ Default workspace
~/.picoclaw/workspace/skills/ Workspace skills
~/.picoclaw/workspace/sessions/ Session history
~/.picoclaw/workspace/cron/ Scheduled jobs store
Default workspace layout:
~/.picoclaw/workspace/
โโโ sessions/
โโโ memory/
โโโ state/
โโโ cron/
โโโ skills/
โโโ AGENT.md
โโโ HEARTBEAT.md
โโโ IDENTITY.md
โโโ SOUL.md
โโโ USER.md
Important Environment Variables
PICOCLAW_CONFIG=/path/to/config.json
PICOCLAW_HOME=/path/to/picoclaw-home
PICOCLAW_BUILTIN_SKILLS=/path/to/custom-builtin-skills
PICOCLAW_LOG_LEVEL=debug
PICOCLAW_GATEWAY_HOST=0.0.0.0
Use PICOCLAW_CONFIG when the user reports "wrong config file" behavior.
Use PICOCLAW_HOME when the user wants a portable or service-managed install.
PicoClaw-Native Concepts
Model Configuration
PicoClaw is model-centric. The key fields are:
agents.defaults.model_namemodel_list- optional
provider - runtime
model
Important behavior:
agents.defaults.model_namemust match amodel_nameentry inmodel_list.- If
provideris set, PicoClaw sendsmodelto that provider unchanged. - If
provideris omitted, legacyprovider/modelparsing is still supported.
Sessions and Routing
Session behavior is configured primarily through:
session.dimensionssession.identity_linksagents.dispatch.rules[*].session_dimensions
Available dimensions:
spacechattopicsender
Baseline separation still includes:
- agent
- channel
- account
So even a tiny session.dimensions list does not create one giant global memory across every platform.
Skills
Skills are plain directories with SKILL.md. The loader requires:
- a valid lowercase-or-hyphen skill name
- a non-empty description
- a
SKILL.mdfile in the skill directory
Prefer this format:
workspace/skills/<skill-name>/SKILL.md
PicoClaw only relies on name and description frontmatter fields for loading and matching.
MCP Discovery
PicoClaw supports always-loaded and deferred MCP tools.
Use:
--deferredwhen tools should stay hidden until explicitly discoveredpicoclaw mcp show <name>to inspect active tools/list mcpand/show mcp <server>from chat channels when debugging live agents
Self-Evolution
The evolution block controls self-evolution:
enabledmode:observe,draft,applystate_dirmin_task_countmin_success_ratiocold_path_triggercold_path_times
Use observe first.
Use draft when the team wants reviewable candidate skill changes.
Use apply only when automatic workspace skill updates are acceptable.
Notes:
cold_path_trigger: manualhas no general user-facing CLI/API trigger yet.
Debugging Workflow
Start with the most PicoClaw-native path:
- Check
picoclaw status. - Confirm which config file is active.
- Inspect
agents.defaults.model_nameandmodel_list. - Run
picoclaw gateway --debugfor runtime visibility. - Add
--no-truncateonly when full prompt or tool payload inspection is necessary. - For skill issues, inspect the skill directory and frontmatter.
- For MCP issues, use
picoclaw mcp list,show, andtest. - For routing/session issues, inspect
session.dimensionsandagents.dispatch.rules.
Useful runtime facts:
--no-truncateonly works with--debug.- gateway health endpoints expose
/health,/ready, and/reload. tool_feedbackcan publish visible tool-execution notices directly into chats.
Where to Find Logs
For gateway and runtime debugging, PicoClaw writes logs under its home directory:
~/.picoclaw/logs/gateway.log
~/.picoclaw/logs/gateway_panic.log
If PICOCLAW_HOME is overridden, use:
$PICOCLAW_HOME/logs/gateway.log
$PICOCLAW_HOME/logs/gateway_panic.log
In practice, check these places first:
~/.picoclaw/logs/for persisted gateway logs- the terminal running
picoclaw gatewayorpicoclaw agent - Docker stdout/stderr via
docker compose -f docker/docker-compose.yml logs -f - launcher or service logs if PicoClaw is being run under another supervisor
Useful controls:
picoclaw gateway --debugfor detailed runtime logspicoclaw gateway --debug --no-truncatefor full prompt/tool payload inspectiongateway.log_levelorPICOCLAW_LOG_LEVELto raise verbosity todebugorinfo
Special case:
- the standalone
picoclaw agentcommand uses console logging unlessPICOCLAW_LOG_FILEis set explicitly - process hooks can write JSONL file logs when
PICOCLAW_HOOK_LOG_FILEis set; this is hook-specific and separate from the main gateway log path
Repository Map
When contributing code, these paths matter most:
cmd/picoclaw/main.goโ root CLI wiringcmd/picoclaw/internal/agent/โ direct CLI agent commandcmd/picoclaw/internal/gateway/โ gateway startup and flagscmd/picoclaw/internal/auth/โ auth flows, QR onboardingcmd/picoclaw/internal/model/โ default model switching andmodel addcmd/picoclaw/internal/skills/โ install/list/show/remove/search commandscmd/picoclaw/internal/mcp/โ MCP CLI configuration managercmd/picoclaw/internal/cron/โ cron CLIpkg/commands/โ shared slash command registrypkg/agent/โ prompt assembly, sessions, routing, tool execution, hookspkg/skills/โ skill loading, metadata, registry installspkg/mcp/โ MCP runtime integrationpkg/config/โ config schema, defaults, migration, persistencedocs/guides/configuration.mdโ user-facing config referencedocs/guides/session-guide.mdโ session behavior recipesdocs/reference/mcp-cli.mdโ authoritative MCP CLI behaviordocs/reference/cron.mdโ cron behavior and limitationsdocs/operations/debug.mdโ debugging workflowdocs/operations/troubleshooting.mdโ known misconfiguration patternsdocs/architecture/agent-self-evolution.mdโ evolution design and safety
Contribution Rules
When changing PicoClaw:
- Prefer extending existing CLI groups and shared registries instead of adding parallel one-off flows.
- Keep docs aligned with code for CLI flags, slash commands, and config behavior.
- If you add or change a slash command, inspect
pkg/commandsand the chat-channel docs that mention command availability. - If you touch skills behavior, validate load order, naming rules, and frontmatter assumptions.
- If you touch routing or session logic, re-check both
docs/guides/session-guide.mdand architecture docs so behavior and docs stay consistent. - If you touch MCP, remember the CLI manages config while the runtime host manages execution.
Common Troubleshooting
"model ... not found in model_list"
Check that:
agents.defaults.model_namematches a configuredmodel_name- the target
model_listentry is enabled - the
providerandmodelfields use PicoClaw's model-centric rules
OpenRouter free is not a valid model ID
Prefer explicit provider config:
{
"provider": "openrouter",
"model": "free"
}
Not:
{
"model": "free"
}
Skill not appearing
Check:
- directory name is a valid skill name
SKILL.mdexists- frontmatter
nameanddescriptionare present and sane - the skill lives under workspace, global, or builtin roots
MCP server exists but tools do not show up
Check:
tools.mcp.enabledis true- the server is enabled
- deferred discovery settings match expectations
picoclaw mcp test <name>succeeds/show mcp <server>orpicoclaw mcp show <name>exposes tools
Agent remembers too much or too little
Check:
session.dimensions- any per-rule
session_dimensions - whether the issue is really session isolation versus summarization
Config edits do not seem to apply
Check:
PICOCLAW_CONFIGPICOCLAW_HOME- whether the user edited
config.jsonor.security.yml - whether they are testing the CLI path, gateway path, or both
Load These Docs Next
Read these only when the task needs them:
docs/guides/configuration.mdfor config, routing, skills, turn profiles, and evolutiondocs/guides/session-guide.mdfor session isolation recipesdocs/reference/tools_configuration.mdfor tool-specific configdocs/reference/mcp-cli.mdfor MCP CLI flags and storage behaviordocs/reference/cron.mdfor schedule types and security gatesdocs/operations/debug.mdfor runtime inspectiondocs/operations/troubleshooting.mdfor common provider/model mistakes
If the task is code-level rather than user-facing, read the matching package under cmd/picoclaw/internal/, pkg/commands/, pkg/agent/, pkg/skills/, or pkg/mcp/ before proposing behavior changes.