workspace/skills/picoclaw-agent/SKILL.md
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.
npx skillsauth add sipeed/picoclaw picoclaw-agentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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 list
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
# 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:
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 10m
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/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 github
Notes:
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.ymlsend_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"
| 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: opussend_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 store
Default workspace layout:
~/.picoclaw/workspace/
├── sessions/
├── memory/
├── state/
├── cron/
├── skills/
├── AGENT.md
├── HEARTBEAT.md
├── IDENTITY.md
├── SOUL.md
└── USER.md
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 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.md
PicoClaw 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.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 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.
development
Get current weather and forecasts with verified location matching (no API key required).
tools
Remote-control tmux sessions for interactive CLIs by sending keystrokes and scraping pane output.
content-media
Summarize or extract text/transcripts from URLs, podcasts, and local files (great fallback for “transcribe this YouTube/video”).
data-ai
Read and control I2C and SPI peripherals on Sipeed boards (LicheeRV Nano, MaixCAM, NanoKVM).