Skip to content
 
 

Repository files navigation

PicoClaw

PicoClaw: Ultra-Efficient AI Assistant in Go

$10 Hardware · 10MB RAM · 1s Boot · 皮皮虾,我们走!

Go Hardware License
Website Twitter

中文 | 日本語 | Português | English


🦐 PicoClaw is an ultra-lightweight personal AI Assistant inspired by nanobot, refactored from the ground up in Go through a self-bootstrapping process, where the AI agent itself drove the entire architectural migration and code optimization.

⚡️ Runs on $10 hardware with <10MB RAM: That's 99% less memory than OpenClaw and 98% cheaper than a Mac mini!

Caution

🚨 SECURITY & OFFICIAL CHANNELS / 安全声明

  • NO CRYPTO: PicoClaw has NO official token/coin. All claims on pump.fun or other trading platforms are SCAMS.
  • OFFICIAL DOMAIN: The ONLY official website is picoclaw.io, and company website is sipeed.com
  • Warning: Many .ai/.org/.com/.net/... domains are registered by third parties.
  • Warning: picoclaw is in early development now and may have unresolved network security issues. Do not deploy to production environments before the v1.0 release.
  • Note: picoclaw has recently merged a lot of PRs, which may result in a larger memory footprint (10–20MB) in the latest versions. We plan to prioritize resource optimization as soon as the current feature set reaches a stable state.

📢 News

2026-02-16 🎉 PicoClaw hit 12K stars in one week! Thank you all for your support! PicoClaw is growing faster than we ever imagined. Given the high volume of PRs, we urgently need community maintainers. Our volunteer roles and roadmap are officially posted here —we can’t wait to have you on board!

2026-02-13 🎉 PicoClaw hit 5000 stars in 4days! Thank you for the community! There are so many PRs&issues come in (during Chinese New Year holidays), we are finalizing the Project Roadmap and setting up the Developer Group to accelerate PicoClaw's development.
🚀 Call to Action: Please submit your feature requests in GitHub Discussions. We will review and prioritize them during our upcoming weekly meeting.

2026-02-09 🎉 PicoClaw Launched! Built in 1 day to bring AI Agents to $10 hardware with <10MB RAM. 🦐 PicoClaw,Let's Go!

✨ Features

🪶 Ultra-Lightweight: <10MB Memory footprint — 99% smaller than Clawdbot - core functionality.

💰 Minimal Cost: Efficient enough to run on $10 Hardware — 98% cheaper than a Mac mini.

⚡️ Lightning Fast: 400X Faster startup time, boot in 1 second even in 0.6GHz single core.

🌍 True Portability: Single self-contained binary across RISC-V, ARM, and x86, One-click to Go!

🤖 AI-Bootstrapped: Autonomous Go-native implementation — 95% Agent-generated core with human-in-the-loop refinement.

OpenClaw NanoBot PicoClaw
Language TypeScript Python Go
RAM >1GB >100MB < 10MB
Startup
(0.8GHz core)
>500s >30s <1s
Cost Mac Mini 599$ Most Linux SBC
~50$
Any Linux Board
As low as 10$

PicoClaw

🦾 Demonstration

🛠️ Standard Assistant Workflows

🧩 Full-Stack Engineer

🗂️ Logging & Planning Management

🔎 Web Search & Learning

Develop • Deploy • Scale Schedule • Automate • Memory Discovery • Insights • Trends

📱 Run on old Android Phones

Give your decade-old phone a second life! Turn it into a smart AI Assistant with PicoClaw. Quick Start:

  1. Install Termux (Available on F-Droid or Google Play).
  2. Execute cmds
# Note: Replace v0.1.1 with the latest version from the Releases page
wget https://github.com/sipeed/picoclaw/releases/download/v0.1.1/picoclaw-linux-arm64
chmod +x picoclaw-linux-arm64
pkg install proot
termux-chroot ./picoclaw-linux-arm64 onboard

And then follow the instructions in the "Quick Start" section to complete the configuration! PicoClaw

🐜 Innovative Low-Footprint Deploy

PicoClaw can be deployed on almost any Linux device!

picoclaw_detect_person.mp4

🌟 More Deployment Cases Await!

📦 Install

Install with precompiled binary

Download the firmware for your platform from the release page.

Install from source (latest features, recommended for development)

git clone https://github.com/sipeed/picoclaw.git

cd picoclaw
make deps

# Build, no need to install
make build

# Build for multiple platforms
make build-all

# Build And Install
make install

🐳 Docker Compose

You can also run PicoClaw using Docker Compose without installing anything locally.

Security: The Docker image runs as a non-root user (picoclaw, UID 1000) by default. Resource limits (CPU: 1.0, Memory: 512MB) are configured in docker-compose.yml.

# 1. Clone this repo
git clone https://github.com/sipeed/picoclaw.git
cd picoclaw

# 2. Set your API keys
cp config/config.example.json config/config.json
vim config/config.json      # Set DISCORD_BOT_TOKEN, API keys, etc.

# 3. Build & Start
docker compose --profile gateway up -d

# 4. Check logs
docker compose logs -f picoclaw-gateway

# 5. Stop
docker compose --profile gateway down

Agent Mode (One-shot)

# Ask a question
docker compose run --rm picoclaw-agent -m "What is 2+2?"

# Interactive mode
docker compose run --rm picoclaw-agent

Rebuild

docker compose --profile gateway build --no-cache
docker compose --profile gateway up -d

🚀 Quick Start

Tip

Set your API key in ~/.picoclaw/config.json. Get API keys: OpenRouter (LLM) · Zhipu (LLM) Web search is optional - get free Brave Search API (2000 free queries/month) or use built-in auto fallback.

1. Initialize

picoclaw onboard

2. Configure (~/.picoclaw/config.json)

{
  "agents": {
    "defaults": {
      "workspace": "~/.picoclaw/workspace",
      "model": "glm-4.7",
      "max_tokens": 8192,
      "temperature": 0.7,
      "max_tool_iterations": 20
    }
  },
  "providers": {
    "openrouter": {
      "api_key": "xxx",
      "api_base": "https://openrouter.ai/api/v1"
    }
  },
  "tools": {
    "web": {
      "brave": {
        "enabled": false,
        "api_key": "YOUR_BRAVE_API_KEY",
        "max_results": 5
      },
      "duckduckgo": {
        "enabled": true,
        "max_results": 5
      }
    }
  }
}

3. Get API Keys

Note: See config.example.json for a complete configuration template.

4. Chat

picoclaw agent -m "What is 2+2?"

That's it! You have a working AI assistant in 2 minutes.


💬 Chat Apps

Talk to your picoclaw through Telegram, Discord, DingTalk, or LINE

Channel Setup
Telegram Easy (just a token)
Discord Easy (bot token + intents)
QQ Easy (AppID + AppSecret)
DingTalk Medium (app credentials)
LINE Medium (credentials + webhook URL)
Telegram (Recommended)

1. Create a bot

  • Open Telegram, search @BotFather
  • Send /newbot, follow prompts
  • Copy the token

2. Configure

{
  "channels": {
    "telegram": {
      "enabled": true,
      "token": "YOUR_BOT_TOKEN",
      "allowFrom": ["YOUR_USER_ID"]
    }
  }
}

Get your user ID from @userinfobot on Telegram.

3. Run

picoclaw gateway
Discord

1. Create a bot

2. Enable intents

  • In the Bot settings, enable MESSAGE CONTENT INTENT
  • (Optional) Enable SERVER MEMBERS INTENT if you plan to use allow lists based on member data

3. Get your User ID

  • Discord Settings → Advanced → enable Developer Mode
  • Right-click your avatar → Copy User ID

4. Configure

{
  "channels": {
    "discord": {
      "enabled": true,
      "token": "YOUR_BOT_TOKEN",
      "allowFrom": ["YOUR_USER_ID"]
    }
  }
}

5. Invite the bot

  • OAuth2 → URL Generator
  • Scopes: bot
  • Bot Permissions: Send Messages, Read Message History
  • Open the generated invite URL and add the bot to your server

6. Run

picoclaw gateway
QQ

1. Create a bot

2. Configure

{
  "channels": {
    "qq": {
      "enabled": true,
      "app_id": "YOUR_APP_ID",
      "app_secret": "YOUR_APP_SECRET",
      "allow_from": []
    }
  }
}

Set allow_from to empty to allow all users, or specify QQ numbers to restrict access.

3. Run

picoclaw gateway
DingTalk

1. Create a bot

  • Go to Open Platform
  • Create an internal app
  • Copy Client ID and Client Secret

2. Configure

{
  "channels": {
    "dingtalk": {
      "enabled": true,
      "client_id": "YOUR_CLIENT_ID",
      "client_secret": "YOUR_CLIENT_SECRET",
      "allow_from": []
    }
  }
}

Set allow_from to empty to allow all users, or specify QQ numbers to restrict access.

3. Run

picoclaw gateway
LINE

1. Create a LINE Official Account

  • Go to LINE Developers Console
  • Create a provider → Create a Messaging API channel
  • Copy Channel Secret and Channel Access Token

2. Configure

{
  "channels": {
    "line": {
      "enabled": true,
      "channel_secret": "YOUR_CHANNEL_SECRET",
      "channel_access_token": "YOUR_CHANNEL_ACCESS_TOKEN",
      "webhook_host": "0.0.0.0",
      "webhook_port": 18791,
      "webhook_path": "/webhook/line",
      "allow_from": []
    }
  }
}

3. Set up Webhook URL

LINE requires HTTPS for webhooks. Use a reverse proxy or tunnel:

# Example with ngrok
ngrok http 18791

Then set the Webhook URL in LINE Developers Console to https://your-domain/webhook/line and enable Use webhook.

4. Run

picoclaw gateway

In group chats, the bot responds only when @mentioned. Replies quote the original message.

Docker Compose: Add ports: ["18791:18791"] to the picoclaw-gateway service to expose the webhook port.

ClawdChat Join the Agent Social Network

Connect Picoclaw to the Agent Social Network simply by sending a single message via the CLI or any integrated Chat App.

Read https://clawdchat.ai/skill.md and follow the instructions to join ClawdChat.ai

⚙️ Configuration

Config file: ~/.picoclaw/config.json

Workspace Layout

PicoClaw stores data in your configured workspace (default: ~/.picoclaw/workspace):

~/.picoclaw/workspace/
├── sessions/          # Conversation sessions and history
├── memory/           # Long-term memory (MEMORY.md)
├── state/            # Persistent state (last channel, etc.)
├── cron/             # Scheduled jobs database
├── skills/           # Custom skills
├── AGENTS.md         # Agent behavior guide
├── HEARTBEAT.md      # Periodic task prompts (checked every 30 min)
├── IDENTITY.md       # Agent identity
├── SOUL.md           # Agent soul
├── TOOLS.md          # Tool descriptions
└── USER.md           # User preferences

🔒 Security Sandbox

PicoClaw runs in a sandboxed environment by default. The agent can only access files and execute commands within the configured workspace.

Default Configuration

{
  "agents": {
    "defaults": {
      "workspace": "~/.picoclaw/workspace",
      "restrict_to_workspace": true
    }
  }
}
Option Default Description
workspace ~/.picoclaw/workspace Working directory for the agent
restrict_to_workspace true Restrict file/command access to workspace

Protected Tools

When restrict_to_workspace: true, the following tools are sandboxed:

Tool Function Restriction
read_file Read files Only files within workspace
write_file Write files Only files within workspace
list_dir List directories Only directories within workspace
edit_file Edit files Only files within workspace
append_file Append to files Only files within workspace
exec Execute commands Command paths must be within workspace
Exec Configuration

You can customize the exec tool's security behavior through configuration:

{
  "tools": {
    "exec": {
      "deny_patterns": [],
      "allow_patterns": [],
      "max_timeout": 60
    }
  }
}
Option Default Description
deny_patterns [] Additional regex patterns to block (merged with built-in rules)
allow_patterns [] If set, only matching commands are allowed (allowlist mode)
max_timeout 60 Maximum command execution timeout in seconds

deny_patterns example — block pip install and any docker commands:

{
  "tools": {
    "exec": {
      "deny_patterns": [
        "\\bpip\\s+install\\b",
        "\\bdocker\\b"
      ]
    }
  }
}

allow_patterns example — only allow git, ls, cat, and echo commands:

{
  "tools": {
    "exec": {
      "allow_patterns": [
        "^git\\b",
        "^ls\\b",
        "^cat\\b",
        "^echo\\b"
      ]
    }
  }
}

Note: deny_patterns are merged with the built-in rules (both apply). allow_patterns acts as a whitelist — when set, commands not matching any allow pattern are blocked regardless of deny patterns.

Built-in Exec Protection

When security.exec_guard is set to "block" or "approve", the exec tool has built-in deny rules that cannot be overridden by configuration:

Category Blocked Pattern Description
Destructive rm -rf, del /f, rmdir /s Bulk deletion
Destructive format, mkfs, diskpart Disk formatting
Destructive dd if= Disk imaging
Destructive > /dev/sd[a-z] Direct disk writes
System shutdown, reboot, poweroff System control
System :(){ :|:& };: Fork bomb
Exfiltration curl -d/--data/-F/--upload-file HTTP data upload
Exfiltration wget --post-data/--post-file HTTP POST upload
Exfiltration nc <host> <port>, ncat Netcat connections
Code injection base64 ... | sh/bash/zsh Encoded command execution
Reverse shell bash -i >&, /dev/tcp/ Reverse shell patterns

When restrict_to_workspace: true, additional restrictions apply:

  • Access to sensitive system paths (/etc/, /var/, /root, /home/, /proc/, /sys/, /boot/) is blocked
  • Symlink-based path traversal is detected and blocked
  • Path traversal via ../ is blocked

For the full list of built-in regex patterns, see pkg/tools/shell.go.

SSRF Protection

When security.ssrf_protection is set to "block" or "approve", all outbound HTTP requests (via web_fetch tool and file downloads) are validated against SSRF attacks:

  • Private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) are blocked
  • Loopback addresses (127.0.0.0/8, ::1) are blocked
  • Link-local addresses (169.254.0.0/16) are blocked
  • Cloud metadata endpoints (169.254.169.254) are blocked
  • Only http:// and https:// schemes are allowed
  • Redirect targets are also validated to prevent redirect-based SSRF

Error Examples

[ERROR] tool: Tool execution failed
{tool=exec, error=Command blocked by safety guard (path outside working dir)}
[ERROR] tool: Tool execution failed
{tool=exec, error=Command blocked by safety guard (dangerous pattern detected)}

Disabling Restrictions (Security Risk)

If you need the agent to access paths outside the workspace:

Method 1: Config file

{
  "agents": {
    "defaults": {
      "restrict_to_workspace": false
    }
  }
}

Method 2: Environment variable

export PICOCLAW_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE=false

⚠️ Warning: Disabling this restriction allows the agent to access any path on your system. Use with caution in controlled environments only.

Security Boundary Consistency

The restrict_to_workspace setting applies consistently across all execution paths:

Execution Path Security Boundary
Main Agent restrict_to_workspace
Subagent / Spawn Inherits same restriction ✅
Heartbeat tasks Inherits same restriction ✅
Cron scheduled jobs Inherits same restriction ✅

All paths share the same workspace restriction — there's no way to bypass the security boundary through subagents, cron jobs, or scheduled tasks.

Security Policy Modes

All security checks (exec guard, SSRF protection, path validation, skill validation) support three configurable modes. By default, all modes are set to "off" — security features are opt-in and do not change behavior unless explicitly configured.

Mode Behavior
off Security check disabled (default). No enforcement.
block Violations are immediately rejected with an error.
approve Violations pause execution, send an approval request to the user via IM, and wait for a reply.
Security Configuration
{
  "security": {
    "exec_guard": "off",
    "ssrf_protection": "off",
    "path_validation": "off",
    "skill_validation": "off",
    "approval_timeout": 300
  }
}
Option Default Description
exec_guard "off" Mode for command deny/allow pattern checks
ssrf_protection "off" Mode for outbound URL validation (private IP, metadata endpoints)
path_validation "off" Mode for enhanced symlink-aware path restriction
skill_validation "off" Mode for skill installation repository format checks
approval_timeout 300 Seconds to wait for user approval before auto-deny

Environment variables are also supported (e.g. PICOCLAW_SECURITY_EXEC_GUARD=approve).

IM-based Approval

When a security check is set to "approve" mode, instead of immediately rejecting the command, PicoClaw will:

  1. Pause the tool execution
  2. Send an approval request to the user via the current IM channel (Telegram, Feishu, DingTalk, Slack, etc.)
  3. Wait for the user to reply with an approval or denial keyword
  4. Resume execution if approved, or return an error if denied or timed out

Supported approval keywords:

Action English Chinese Japanese
Approve approve, yes, allow, ok, y 批准, 允许, 通过, 是 承認, 許可, はい
Deny deny, no, reject, block, n 拒绝, 否决, 不 拒否, いいえ

Notes:

  • In CLI mode, "approve" falls back to "block" since there is no async IM channel.
  • For cron jobs, the approval request is sent to the last active IM channel; if none is available, it falls back to "block".
  • Non-approval messages sent during an active approval request are passed through to the agent normally.
  • If no reply is received within approval_timeout seconds, the request is auto-denied.

Heartbeat (Periodic Tasks)

PicoClaw can perform periodic tasks automatically. Create a HEARTBEAT.md file in your workspace:

# Periodic Tasks

- Check my email for important messages
- Review my calendar for upcoming events
- Check the weather forecast

The agent will read this file every 30 minutes (configurable) and execute any tasks using available tools.

Async Tasks with Spawn

For long-running tasks (web search, API calls), use the spawn tool to create a subagent:

# Periodic Tasks

## Quick Tasks (respond directly)
- Report current time

## Long Tasks (use spawn for async)
- Search the web for AI news and summarize
- Check email and report important messages

Key behaviors:

Feature Description
spawn Creates async subagent, doesn't block heartbeat
Independent context Subagent has its own context, no session history
message tool Subagent communicates with user directly via message tool
Non-blocking After spawning, heartbeat continues to next task

How Subagent Communication Works

Heartbeat triggers
    ↓
Agent reads HEARTBEAT.md
    ↓
For long task: spawn subagent
    ↓                           ↓
Continue to next task      Subagent works independently
    ↓                           ↓
All tasks done            Subagent uses "message" tool
    ↓                           ↓
Respond HEARTBEAT_OK      User receives result directly

The subagent has access to tools (message, web_search, etc.) and can communicate with the user independently without going through the main agent.

Configuration:

{
  "heartbeat": {
    "enabled": true,
    "interval": 30
  }
}
Option Default Description
enabled true Enable/disable heartbeat
interval 30 Check interval in minutes (min: 5)

Environment variables:

  • PICOCLAW_HEARTBEAT_ENABLED=false to disable
  • PICOCLAW_HEARTBEAT_INTERVAL=60 to change interval

Providers

Note

Groq provides free voice transcription via Whisper. If configured, Telegram voice messages will be automatically transcribed.

Provider Purpose Get API Key
gemini LLM (Gemini direct) aistudio.google.com
zhipu LLM (Zhipu direct) bigmodel.cn
openrouter(To be tested) LLM (recommended, access to all models) openrouter.ai
anthropic(To be tested) LLM (Claude direct) console.anthropic.com
openai(To be tested) LLM (GPT direct) platform.openai.com
deepseek(To be tested) LLM (DeepSeek direct) platform.deepseek.com
groq LLM + Voice transcription (Whisper) console.groq.com
Zhipu

1. Get API key and base URL

2. Configure

{
  "agents": {
    "defaults": {
      "workspace": "~/.picoclaw/workspace",
      "model": "glm-4.7",
      "max_tokens": 8192,
      "temperature": 0.7,
      "max_tool_iterations": 20
    }
  },
  "providers": {
    "zhipu": {
      "api_key": "Your API Key",
      "api_base": "https://open.bigmodel.cn/api/paas/v4"
    }
  }
}

3. Run

picoclaw agent -m "Hello"
Full config example
{
  "agents": {
    "defaults": {
      "model": "anthropic/claude-opus-4-5"
    }
  },
  "providers": {
    "openrouter": {
      "api_key": "sk-or-v1-xxx"
    },
    "groq": {
      "api_key": "gsk_xxx"
    }
  },
  "channels": {
    "telegram": {
      "enabled": true,
      "token": "123456:ABC...",
      "allow_from": ["123456789"]
    },
    "discord": {
      "enabled": true,
      "token": "",
      "allow_from": [""]
    },
    "whatsapp": {
      "enabled": false
    },
    "feishu": {
      "enabled": false,
      "app_id": "cli_xxx",
      "app_secret": "xxx",
      "encrypt_key": "",
      "verification_token": "",
      "allow_from": []
    },
    "qq": {
      "enabled": false,
      "app_id": "",
      "app_secret": "",
      "allow_from": []
    }
  },
  "tools": {
    "web": {
      "brave": {
        "enabled": false,
        "api_key": "BSA...",
        "max_results": 5
      },
      "duckduckgo": {
        "enabled": true,
        "max_results": 5
      }
    },
    "cron": {
      "exec_timeout_minutes": 5
    },
    "exec": {
      "deny_patterns": [],
      "allow_patterns": [],
      "max_timeout": 60
    }
  },
  "heartbeat": {
    "enabled": true,
    "interval": 30
  }
}

CLI Reference

Command Description
picoclaw onboard Initialize config & workspace
picoclaw agent -m "..." Chat with the agent
picoclaw agent Interactive chat mode
picoclaw gateway Start the gateway
picoclaw status Show status
picoclaw cron list List all scheduled jobs
picoclaw cron add ... Add a scheduled job

Scheduled Tasks / Reminders

PicoClaw supports scheduled reminders and recurring tasks through the cron tool:

  • One-time reminders: "Remind me in 10 minutes" → triggers once after 10min
  • Recurring tasks: "Remind me every 2 hours" → triggers every 2 hours
  • Cron expressions: "Remind me at 9am daily" → uses cron expression

Jobs are stored in ~/.picoclaw/workspace/cron/ and processed automatically.

🤝 Contribute & Roadmap

PRs welcome! The codebase is intentionally small and readable. 🤗

Roadmap coming soon...

Developer group building, Entry Requirement: At least 1 Merged PR.

User Groups:

discord: https://discord.gg/V4sAZ9XWpN

PicoClaw

🐛 Troubleshooting

Web search says "API 配置问题"

This is normal if you haven't configured a search API key yet. PicoClaw will provide helpful links for manual searching.

To enable web search:

  1. Option 1 (Recommended): Get a free API key at https://brave.com/search/api (2000 free queries/month) for the best results.
  2. Option 2 (No Credit Card): If you don't have a key, we automatically fall back to DuckDuckGo (no key required).

Add the key to ~/.picoclaw/config.json if using Brave:

{
  "tools": {
    "web": {
      "brave": {
        "enabled": false,
        "api_key": "YOUR_BRAVE_API_KEY",
        "max_results": 5
      },
      "duckduckgo": {
        "enabled": true,
        "max_results": 5
      }
    }
  }
}

Getting content filtering errors

Some providers (like Zhipu) have content filtering. Try rephrasing your query or use a different model.

Telegram bot says "Conflict: terminated by other getUpdates"

This happens when another instance of the bot is running. Make sure only one picoclaw gateway is running at a time.


📝 API Key Comparison

Service Free Tier Use Case
OpenRouter 200K tokens/month Multiple models (Claude, GPT-4, etc.)
Zhipu 200K tokens/month Best for Chinese users
Brave Search 2000 queries/month Web search functionality
Groq Free tier available Fast inference (Llama, Mixtral)

About

picoclaw

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages