diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..d632da5 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +.git +.gitignore +build/ +.picoclaw/ +config/ +.env +.env.example +*.md +LICENSE +assets/ diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..c450b6e --- /dev/null +++ b/.env.example @@ -0,0 +1,17 @@ +# ── LLM Provider ────────────────────────── +# Uncomment and set the API key for your provider +# OPENROUTER_API_KEY=sk-or-v1-xxx +# ZHIPU_API_KEY=xxx +# ANTHROPIC_API_KEY=sk-ant-xxx +# OPENAI_API_KEY=sk-xxx +# GEMINI_API_KEY=xxx + +# ── Chat Channel ────────────────────────── +# TELEGRAM_BOT_TOKEN=123456:ABC... +# DISCORD_BOT_TOKEN=xxx + +# ── Web Search (optional) ──────────────── +# BRAVE_SEARCH_API_KEY=BSA... + +# ── Timezone ────────────────────────────── +TZ=Asia/Tokyo diff --git a/.gitignore b/.gitignore index 6ad4d78..19c154d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ # Binaries +# Go build artifacts bin/ +build/ *.exe *.dll *.so @@ -10,12 +12,20 @@ bin/ /picoclaw-test # Picoclaw specific + +# PicoClaw .picoclaw/ config.json sessions/ build/ # Coverage + +# Secrets & Config (keep templates, ignore actual secrets) +.env +config/config.json + +# Test coverage.txt coverage.html diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..068f64c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,36 @@ +# ============================================================ +# Stage 1: Build the picoclaw binary +# ============================================================ +FROM golang:1.24-alpine AS builder + +RUN apk add --no-cache git make + +WORKDIR /src + +# Cache dependencies +COPY go.mod go.sum ./ +RUN go mod download + +# Copy source and build +COPY . . +RUN make build + +# ============================================================ +# Stage 2: Minimal runtime image +# ============================================================ +FROM alpine:3.21 + +RUN apk add --no-cache ca-certificates tzdata + +# Copy binary +COPY --from=builder /src/build/picoclaw /usr/local/bin/picoclaw + +# Copy builtin skills +COPY --from=builder /src/skills /opt/picoclaw/skills + +# Create picoclaw home directory +RUN mkdir -p /root/.picoclaw/workspace/skills && \ + cp -r /opt/picoclaw/skills/* /root/.picoclaw/workspace/skills/ 2>/dev/null || true + +ENTRYPOINT ["picoclaw"] +CMD ["gateway"] diff --git a/README.ja.md b/README.ja.md new file mode 100644 index 0000000..027dc67 --- /dev/null +++ b/README.ja.md @@ -0,0 +1,475 @@ +
+PicoClaw + +

PicoClaw: Go で書かれた超効率 AI アシスタント

+ +

$10 ハードウェア · 10MB RAM · 1秒起動 · 皮皮虾,我们走!

+

+ +

+Go +Hardware +License +

+ +**日本語** | [English](README.md) + +
+ + +--- + +🦐 PicoClaw は [nanobot](https://github.com/HKUDS/nanobot) にインスパイアされた超軽量パーソナル AI アシスタントです。Go でゼロからリファクタリングされ、AI エージェント自身がアーキテクチャの移行とコード最適化を推進するセルフブートストラッピングプロセスで構築されました。 + +⚡️ $10 のハードウェアで 10MB 未満の RAM で動作:OpenClaw より 99% 少ないメモリ、Mac mini より 98% 安い! + + + + + + +
+

+ +

+
+

+ +

+
+ +## 📢 ニュース +2026-02-09 🎉 PicoClaw リリース!$10 ハードウェアで 10MB 未満の RAM で動く AI エージェントを 1 日で構築。🦐 皮皮虾,我们走! + +## ✨ 特徴 + +🪶 **超軽量**: メモリフットプリント 10MB 未満 — Clawdbot のコア機能より 99% 小さい。 + +💰 **最小コスト**: $10 ハードウェアで動作 — Mac mini より 98% 安い。 + +⚡️ **超高速**: 起動時間 400 倍高速、0.6GHz シングルコアでも 1 秒で起動。 + +🌍 **真のポータビリティ**: RISC-V、ARM、x86 対応の単一バイナリ。ワンクリックで Go! + +🤖 **AI ブートストラップ**: 自律的な Go ネイティブ実装 — コアの 95% が AI 生成、人間によるレビュー付き。 + +| | OpenClaw | NanoBot | **PicoClaw** | +| --- | --- | --- |--- | +| **言語** | TypeScript | Python | **Go** | +| **RAM** | >1GB |>100MB| **< 10MB** | +| **起動時間**
(0.8GHz コア) | >500秒 | >30秒 | **<1秒** | +| **コスト** | Mac Mini 599$ | 大半の Linux SBC
~50$ |**あらゆる Linux ボード**
**最安 10$** | +PicoClaw + + +## 🦾 デモンストレーション +### 🛠️ スタンダードアシスタントワークフロー + + + + + + + + + + + + + + + + +

🧩 フルスタックエンジニア

🗂️ ログ&計画管理

🔎 Web 検索&学習

開発 · デプロイ · スケールスケジュール · 自動化 · メモリ発見 · インサイト · トレンド
+ +### 🐜 革新的な省フットプリントデプロイ +PicoClaw はほぼすべての Linux デバイスにデプロイできます! + +- $9.9 [LicheeRV-Nano](https://www.aliexpress.com/item/1005006519668532.html) E(Ethernet) または W(WiFi6) バージョン、最小ホームアシスタントに +- $30~50 [NanoKVM](https://www.aliexpress.com/item/1005007369816019.html) または $100 [NanoKVM-Pro](https://www.aliexpress.com/item/1005010048471263.html) サーバー自動メンテナンスに +- $50 [MaixCAM](https://www.aliexpress.com/item/1005008053333693.html) または $100 [MaixCAM2](https://www.kickstarter.com/projects/zepan/maixcam2-build-your-next-gen-4k-ai-camera) スマート監視に + +https://private-user-images.githubusercontent.com/83055338/547056448-e7b031ff-d6f5-4468-bcca-5726b6fecb5c.mp4 + +🌟 もっと多くのデプロイ事例が待っています! + +## 📦 インストール + +### コンパイル済みバイナリでインストール + +[リリースページ](https://github.com/sipeed/picoclaw/releases) からお使いのプラットフォーム用のファームウェアをダウンロードしてください。 + +### ソースからインストール(最新機能、開発向け推奨) + +```bash +git clone https://github.com/sipeed/picoclaw.git + +cd picoclaw +make deps + +# ビルド(インストール不要) +make build + +# 複数プラットフォーム向けビルド +make build-all + +# ビルドとインストール +make install +``` + +## 🐳 Docker Compose + +Docker Compose を使えば、ローカルにインストールせずに PicoClaw を実行できます。 + +### クイックスタート(Discord Bot) + +```bash +# 1. リポジトリをクローン +git clone https://github.com/Sunwood-AI-OSS-Hub/picoclaw.git +cd picoclaw + +# 2. API キーを設定 +cp .env.example .env +vim .env # DISCORD_BOT_TOKEN, OPENROUTER_API_KEY などを設定 +vim config/config.json # プロバイダーの API キーを設定 + +# 3. ビルドと起動 +docker compose -f docker-compose.discord.yml up -d + +# 4. ログ確認 +docker compose -f docker-compose.discord.yml logs -f picoclaw + +# 5. 停止 +docker compose -f docker-compose.discord.yml down +``` + +### Agent モード(ワンショット) + +```bash +# 質問を投げる +docker compose run --rm picoclaw-agent -m "What is 2+2?" + +# インタラクティブモード +docker compose run --rm picoclaw-agent +``` + +### リビルド + +```bash +docker compose -f docker-compose.discord.yml build --no-cache +docker compose -f docker-compose.discord.yml up -d +``` + +### 🚀 クイックスタート(ネイティブ) + +> [!TIP] +> `~/.picoclaw/config.json` に API キーを設定してください。 +> API キーの取得先: [OpenRouter](https://openrouter.ai/keys) (LLM) · [Zhipu](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) (LLM) +> Web 検索は **任意** です - 無料の [Brave Search API](https://brave.com/search/api) (月 2000 クエリ無料) + +**1. 初期化** + +```bash +picoclaw onboard +``` + +**2. 設定** (`~/.picoclaw/config.json`) + +```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://open.bigmodel.cn/api/paas/v4" + } + }, + "tools": { + "web": { + "search": { + "api_key": "YOUR_BRAVE_API_KEY", + "max_results": 5 + } + } + } +} +``` + +**3. API キーの取得** + +- **LLM プロバイダー**: [OpenRouter](https://openrouter.ai/keys) · [Zhipu](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) · [Anthropic](https://console.anthropic.com) · [OpenAI](https://platform.openai.com) · [Gemini](https://aistudio.google.com/api-keys) +- **Web 検索**(任意): [Brave Search](https://brave.com/search/api) - 無料枠あり(月 2000 リクエスト) + +> **注意**: 完全な設定テンプレートは `config.example.json` を参照してください。 + +**3. チャット** + +```bash +picoclaw agent -m "What is 2+2?" +``` + +これだけです!2 分で AI アシスタントが動きます。 + +--- + +## 💬 チャットアプリ + +Telegram で PicoClaw と会話できます + +| チャネル | セットアップ | +|---------|------------| +| **Telegram** | 簡単(トークンのみ) | +| **Discord** | 簡単(Bot トークン + Intents) | + +
+Telegram(推奨) + +**1. Bot を作成** + +- Telegram を開き、`@BotFather` を検索 +- `/newbot` を送信、プロンプトに従う +- トークンをコピー + +**2. 設定** + +```json +{ + "channels": { + "telegram": { + "enabled": true, + "token": "YOUR_BOT_TOKEN", + "allowFrom": ["YOUR_USER_ID"] + } + } +} +``` + +> ユーザー ID は Telegram の `@userinfobot` から取得できます。 + +**3. 起動** + +```bash +picoclaw gateway +``` +
+ + +
+Discord + +**1. Bot を作成** +- https://discord.com/developers/applications にアクセス +- アプリケーションを作成 → Bot → Add Bot +- Bot トークンをコピー + +**2. Intents を有効化** +- Bot の設定画面で **MESSAGE CONTENT INTENT** を有効化 +- (任意)**SERVER MEMBERS INTENT** も有効化 + +**3. ユーザー ID を取得** +- Discord 設定 → 詳細設定 → **開発者モード** を有効化 +- 自分のアバターを右クリック → **ユーザーIDをコピー** + +**4. 設定** + +```json +{ + "channels": { + "discord": { + "enabled": true, + "token": "YOUR_BOT_TOKEN", + "allowFrom": ["YOUR_USER_ID"] + } + } +} +``` + +**5. Bot を招待** +- OAuth2 → URL Generator +- Scopes: `bot` +- Bot Permissions: `Send Messages`, `Read Message History` +- 生成された招待 URL を開き、サーバーに Bot を追加 + +**6. 起動** + +```bash +picoclaw gateway +``` + +
+ +## ⚙️ 設定 + +設定ファイル: `~/.picoclaw/config.json` + +### プロバイダー + +> [!NOTE] +> Groq は Whisper 経由の無料音声文字起こしを提供します。設定すると、Telegram の音声メッセージが自動的に文字起こしされます。 + +| プロバイダー | 用途 | API キー取得先 | +|-------------|------|---------------| +| `gemini` | LLM (Gemini 直接) | [aistudio.google.com](https://aistudio.google.com) | +| `zhipu` | LLM (Zhipu 直接) | [bigmodel.cn](bigmodel.cn) | +| `openrouter(テスト中)` | LLM(推奨、全モデルアクセス) | [openrouter.ai](https://openrouter.ai) | +| `anthropic(テスト中)` | LLM (Claude 直接) | [console.anthropic.com](https://console.anthropic.com) | +| `openai(テスト中)` | LLM (GPT 直接) | [platform.openai.com](https://platform.openai.com) | +| `deepseek(テスト中)` | LLM (DeepSeek 直接) | [platform.deepseek.com](https://platform.deepseek.com) | +| `groq` | LLM + **音声文字起こし** (Whisper) | [console.groq.com](https://console.groq.com) | + + +
+Zhipu + +**1. API キーとベース URL を取得** +- [API キー](https://bigmodel.cn/usercenter/proj-mgmt/apikeys) を取得 + +**2. 設定** + +```json +{ + "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. 実行** + +```bash +picoclaw agent -m "Hello" +``` +
+ +
+完全な設定例 + +```json +{ + "agents": { + "defaults": { + "model": "anthropic/claude-opus-4-5" + } + }, + "providers": { + "openrouter": { + "apiKey": "sk-or-v1-xxx" + }, + "groq": { + "apiKey": "gsk_xxx" + } + }, + "channels": { + "telegram": { + "enabled": true, + "token": "123456:ABC...", + "allowFrom": ["123456789"] + }, + "discord": { + "enabled": true, + "token": "", + "allow_from": [""] + }, + "whatsapp": { + "enabled": false + }, + "feishu": { + "enabled": false, + "appId": "cli_xxx", + "appSecret": "xxx", + "encryptKey": "", + "verificationToken": "", + "allowFrom": [] + } + }, + "tools": { + "web": { + "search": { + "apiKey": "BSA..." + } + } + } +} +``` + +
+ +## CLI リファレンス + +| コマンド | 説明 | +|---------|------| +| `picoclaw onboard` | 設定&ワークスペースの初期化 | +| `picoclaw agent -m "..."` | エージェントとチャット | +| `picoclaw agent` | インタラクティブチャットモード | +| `picoclaw gateway` | ゲートウェイを起動 | +| `picoclaw status` | ステータスを表示 | + +## 🤝 コントリビュート&ロードマップ + +PR 歓迎!コードベースは意図的に小さく読みやすくしています。🤗 + +Discord: https://discord.gg/V4sAZ9XWpN + +PicoClaw + + +## 🐛 トラブルシューティング + +### Web 検索で「API 配置问题」と表示される + +検索 API キーをまだ設定していない場合、これは正常です。PicoClaw は手動検索用の便利なリンクを提供します。 + +Web 検索を有効にするには: +1. [https://brave.com/search/api](https://brave.com/search/api) で無料の API キーを取得(月 2000 クエリ無料) +2. `~/.picoclaw/config.json` に追加: + ```json + { + "tools": { + "web": { + "search": { + "api_key": "YOUR_BRAVE_API_KEY", + "max_results": 5 + } + } + } + } + ``` + +### コンテンツフィルタリングエラーが出る + +一部のプロバイダー(Zhipu など)にはコンテンツフィルタリングがあります。クエリを言い換えるか、別のモデルを使用してください。 + +### Telegram Bot で「Conflict: terminated by other getUpdates」と表示される + +別のインスタンスが実行中の場合に発生します。`picoclaw gateway` が 1 つだけ実行されていることを確認してください。 + +--- + +## 📝 API キー比較 + +| サービス | 無料枠 | ユースケース | +|---------|--------|------------| +| **OpenRouter** | 月 200K トークン | 複数モデル(Claude, GPT-4 など) | +| **Zhipu** | 月 200K トークン | 中国ユーザー向け最適 | +| **Brave Search** | 月 2000 クエリ | Web 検索機能 | +| **Groq** | 無料枠あり | 高速推論(Llama, Mixtral) | diff --git a/README.md b/README.md index 8f27a78..4b4652b 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ License

+[日本語](README.ja.md) | **English** + --- @@ -118,6 +120,49 @@ make build-all make install ``` +## 🐳 Docker Compose + +You can also run PicoClaw using Docker Compose without installing anything locally. + +### Quick Start (Discord Bot) + +```bash +# 1. Clone this repo +git clone https://github.com/Sunwood-AI-OSS-Hub/picoclaw.git +cd picoclaw + +# 2. Set your API keys +cp .env.example .env +vim .env # Set DISCORD_BOT_TOKEN, OPENROUTER_API_KEY, etc. +vim config/config.json # Set provider API keys + +# 3. Build & Start +docker compose -f docker-compose.discord.yml up -d + +# 4. Check logs +docker compose -f docker-compose.discord.yml logs -f picoclaw + +# 5. Stop +docker compose -f docker-compose.discord.yml down +``` + +### Agent Mode (One-shot) + +```bash +# Ask a question +docker compose run --rm picoclaw-agent -m "What is 2+2?" + +# Interactive mode +docker compose run --rm picoclaw-agent +``` + +### Rebuild + +```bash +docker compose -f docker-compose.discord.yml build --no-cache +docker compose -f docker-compose.discord.yml up -d +``` + ### 🚀 Quick Start > [!TIP] diff --git a/docker-compose.discord.yml b/docker-compose.discord.yml new file mode 100644 index 0000000..d9a44ec --- /dev/null +++ b/docker-compose.discord.yml @@ -0,0 +1,24 @@ +services: + # ───────────────────────────────────────────── + # PicoClaw Discord Bot + # ───────────────────────────────────────────── + picoclaw: + build: + context: . + dockerfile: Dockerfile + container_name: picoclaw-discord + restart: unless-stopped + env_file: + - .env + environment: + - PICOCLAW_CHANNELS_DISCORD_ENABLED=true + - PICOCLAW_CHANNELS_DISCORD_TOKEN=${DISCORD_BOT_TOKEN} + volumes: + # Configuration file + - ./config/config.json:/root/.picoclaw/config.json:ro + # Persistent workspace (sessions, memory, logs) + - picoclaw-workspace:/root/.picoclaw/workspace + command: ["gateway"] + +volumes: + picoclaw-workspace: diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..4412e37 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,25 @@ +services: + + + # ───────────────────────────────────────────── + # PicoClaw Agent (one-shot query) + # docker compose run --rm picoclaw-agent -m "Hello" + # ───────────────────────────────────────────── + picoclaw-agent: + build: + context: . + dockerfile: Dockerfile + container_name: picoclaw-agent + profiles: + - agent + env_file: + - .env + volumes: + - ./config/config.json:/root/.picoclaw/config.json:ro + - picoclaw-workspace:/root/.picoclaw/workspace + entrypoint: ["picoclaw", "agent"] + stdin_open: true + tty: true + +volumes: + picoclaw-workspace: