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.
67
82%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
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.
When this skill is active, stay fully subordinate to PicoClaw's real architecture:
# 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 listpicoclaw 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# 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 --forceNotes:
picoclaw config edit or picoclaw config set.~/.picoclaw/config.json directly.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 10mpicoclaw 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-builtinSkill loading priority is:
~/.picoclaw/workspace/skills~/.picoclaw/skillspicoclaw 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 githubNotes:
picoclaw mcp is a configuration manager for tools.mcp.servers.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:
picoclaw cron add supports recurring jobs only: --every or --cron.at_seconds jobs exist in the cron system, but not as a first-class CLI flag today.PicoClaw supports 30+ LLM providers through model_list.
Credential patterns in PicoClaw are:
model_list[].api_keys for most hosted APIspicoclaw auth login --provider ... for the built-in auth helper flows (openai, anthropic, antigravity)ollama, lmstudio, vllm, and litellmbedrock, azure, and github-copilotpicoclaw 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.
| 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 |
PicoClaw also carries first-class metadata or routing support for additional vendors such as:
venicevivgridlongcatmodelscopemimonovitabyteplusshengsuanyunavianzai-codinggpt4freeFor the full provider matrix, default API bases, protocol families, and vendor-specific examples, read docs/guides/providers.md.
PicoClaw tools are configured under tools in config.json and registered dynamically at runtime.
Important activation rules:
tools.*turn_profile.tools can narrow tool exposure for a request or agent| 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 |
send_tts is registered only when a TTS provider is available.spawn and spawn_status require subagent support to be enabled.delegate is auto-registered only when more than one agent exists.message can be configured for outbound media as well as plain text.For per-tool configuration, read docs/reference/tools_configuration.md.
PicoClaw has a first-class subagent model for long-running work, isolated subproblems, and multi-agent specialization.
The core idea is:
spawn for background work that should continue without blocking the current turnsubagent for an isolated synchronous sub-task when the parent needs the result nowdelegate to hand a task to a specific peer agent with its own identity, model, workspace, and toolsspawn_status or /subagents to inspect what is currently running| 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 subagents are configured through the multi-agent system, not through ad hoc prompts alone.
The two important layers are:
config.json defines which peer agents exist and which ones a given agent is allowed to spawn via subagents.allow_agentsAGENT.md defines the identity that makes that peer worth spawning: name, description, tools, skills, MCP servers, and optional model overridesMinimal 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]
---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:
list_agents toolid, name, and descriptionIn practice, this is what makes targeted spawn(..., agent_id="research") or delegate(agent_id="research", ...) reliable.
Subagent execution semantics that matter:
spawn returns immediately and launches background work in a goroutinesubagent waits for completion and returns the result directlydelegate is synchronous and runs as the target peer agent instead of a generic child taskspawn_status is scoped to the current conversation when channel/chat context existsRuntime limits and lifecycle rules:
Use spawn when:
Use subagent when:
Use delegate when:
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."
)For live visibility:
spawn_status to inspect one task or list visible tasks in the current conversation/subagents in chat channels to show the active subagent tree for the current sessionPicoClaw can transcribe inbound audio and synthesize outbound speech, but voice setup is model-driven like the rest of the runtime.
The important pattern is:
voice.model_namevoice.tts_model_namemodel_list.security.yml, not inline in voiceVoice and audio messages from supported channels can be transcribed automatically at the agent level.
Recommended setup:
model_listvoice.model_name to that entry's model_name.security.ymlvoice.echo_transcription if you want the transcript echoed back in chatExample:
{
"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"| 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_name is the preferred and recommended pathvoice.model_name is omitted, PicoClaw still performs compatibility scanning across model_list for legacy auto-detected ASR entriesOutbound speech is driven by voice.tts_model_name and exposed through send_tts when a provider is available.
Recommended setup:
model_listvoice.tts_model_name to that entry's model_name.security.ymlmodel_list[].extra_bodysend_tts in the tool configuration if you want the agent to emit speech filesExample:
{
"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"| 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:
voice.tts_model_namemodel_list for the first API-backed model whose ID contains ttsvoice: alloy and response_format: opusvoice and response_format for a specific TTS model through model_list[].extra_bodyresponse_format, PicoClaw retries once without that fieldsend_tts is only registered when TTS detection succeedsPicoClaw'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 clear cancels the pending skill override./btw <question> asks an isolated side question without mutating the main session history./subagents shows the currently active subagent tree for the session.Telegram auto-registers supported top-level commands like /start, /help, /show, /list, /use, and /btw.
~/.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 storeDefault workspace layout:
~/.picoclaw/workspace/
├── sessions/
├── memory/
├── state/
├── cron/
├── skills/
├── AGENT.md
├── HEARTBEAT.md
├── IDENTITY.md
├── SOUL.md
└── USER.mdPICOCLAW_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.0Use PICOCLAW_CONFIG when the user reports "wrong config file" behavior.
Use PICOCLAW_HOME when the user wants a portable or service-managed install.
PicoClaw is model-centric. The key fields are:
agents.defaults.model_namemodel_listprovidermodelImportant behavior:
agents.defaults.model_name must match a model_name entry in model_list.provider is set, PicoClaw sends model to that provider unchanged.provider is omitted, legacy provider/model parsing is still supported.Session behavior is configured primarily through:
session.dimensionssession.identity_linksagents.dispatch.rules[*].session_dimensionsAvailable dimensions:
spacechattopicsenderBaseline separation still includes:
So even a tiny session.dimensions list does not create one giant global memory across every platform.
Skills are plain directories with SKILL.md. The loader requires:
SKILL.md file in the skill directoryPrefer this format:
workspace/skills/<skill-name>/SKILL.mdPicoClaw only relies on name and description frontmatter fields for loading and matching.
PicoClaw supports always-loaded and deferred MCP tools.
Use:
--deferred when tools should stay hidden until explicitly discoveredpicoclaw mcp show <name> to inspect active tools/list mcp and /show mcp <server> from chat channels when debugging live agentsThe evolution block controls self-evolution:
enabledmode: observe, draft, applystate_dirmin_task_countmin_success_ratiocold_path_triggercold_path_timesUse 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: manual has no general user-facing CLI/API trigger yet.Start with the most PicoClaw-native path:
picoclaw status.agents.defaults.model_name and model_list.picoclaw gateway --debug for runtime visibility.--no-truncate only when full prompt or tool payload inspection is necessary.picoclaw mcp list, show, and test.session.dimensions and agents.dispatch.rules.Useful runtime facts:
--no-truncate only works with --debug./health, /ready, and /reload.tool_feedback can publish visible tool-execution notices directly into chats.For gateway and runtime debugging, PicoClaw writes logs under its home directory:
~/.picoclaw/logs/gateway.log
~/.picoclaw/logs/gateway_panic.logIf PICOCLAW_HOME is overridden, use:
$PICOCLAW_HOME/logs/gateway.log
$PICOCLAW_HOME/logs/gateway_panic.logIn practice, check these places first:
~/.picoclaw/logs/ for persisted gateway logspicoclaw gateway or picoclaw agentdocker compose -f docker/docker-compose.yml logs -fUseful controls:
picoclaw gateway --debug for detailed runtime logspicoclaw gateway --debug --no-truncate for full prompt/tool payload inspectiongateway.log_level or PICOCLAW_LOG_LEVEL to raise verbosity to debug or infoSpecial case:
picoclaw agent command uses console logging unless PICOCLAW_LOG_FILE is set explicitlyPICOCLAW_HOOK_LOG_FILE is set; this is hook-specific and separate from the main gateway log pathWhen 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 and model 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 safetyWhen changing PicoClaw:
pkg/commands and the chat-channel docs that mention command availability.docs/guides/session-guide.md and architecture docs so behavior and docs stay consistent.Check that:
agents.defaults.model_name matches a configured model_namemodel_list entry is enabledprovider and model fields use PicoClaw's model-centric rulesfree is not a valid model IDPrefer explicit provider config:
{
"provider": "openrouter",
"model": "free"
}Not:
{
"model": "free"
}Check:
SKILL.md existsname and description are present and saneCheck:
tools.mcp.enabled is truepicoclaw mcp test <name> succeeds/show mcp <server> or picoclaw mcp show <name> exposes toolsCheck:
session.dimensionssession_dimensionsCheck:
PICOCLAW_CONFIGPICOCLAW_HOMEconfig.json or .security.ymlRead these only when the task needs them:
docs/guides/configuration.md for config, routing, skills, turn profiles, and evolutiondocs/guides/session-guide.md for session isolation recipesdocs/reference/tools_configuration.md for tool-specific configdocs/reference/mcp-cli.md for MCP CLI flags and storage behaviordocs/reference/cron.md for schedule types and security gatesdocs/operations/debug.md for runtime inspectiondocs/operations/troubleshooting.md for common provider/model mistakesIf 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.
49183d7
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.