docs: add heartbeat documentation with spawn/subagent details
- Add Heartbeat section explaining periodic task execution - Document spawn tool for async subagent creation - Explain independent context and message tool communication - Add workflow diagram for subagent communication - Update workspace layout with HEARTBEAT.md and state/ - Add heartbeat config to config.example.json Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
121
README.ja.md
121
README.ja.md
@@ -196,6 +196,10 @@ picoclaw onboard
|
|||||||
"max_results": 5
|
"max_results": 5
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"heartbeat": {
|
||||||
|
"enabled": true,
|
||||||
|
"interval": 30
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -303,22 +307,115 @@ picoclaw gateway
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## 設定 (Configuration)
|
## ⚙️ 設定
|
||||||
|
|
||||||
PicoClaw は設定に `config.json` を使用します。
|
設定ファイル: `~/.picoclaw/config.json`
|
||||||
|
|
||||||
|
### ワークスペース構成
|
||||||
|
|
||||||
|
PicoClaw は設定されたワークスペース(デフォルト: `~/.picoclaw/workspace`)にデータを保存します:
|
||||||
|
|
||||||
|
```
|
||||||
|
~/.picoclaw/workspace/
|
||||||
|
├── sessions/ # 会話セッションと履歴
|
||||||
|
├── memory/ # 長期メモリ(MEMORY.md)
|
||||||
|
├── state/ # 永続状態(最後のチャネルなど)
|
||||||
|
├── cron/ # スケジュールジョブデータベース
|
||||||
|
├── skills/ # カスタムスキル
|
||||||
|
├── AGENTS.md # エージェントの行動ガイド
|
||||||
|
├── HEARTBEAT.md # 定期タスクプロンプト(30分ごとに確認)
|
||||||
|
├── IDENTITY.md # エージェントのアイデンティティ
|
||||||
|
├── SOUL.md # エージェントのソウル
|
||||||
|
├── TOOLS.md # ツールの説明
|
||||||
|
└── USER.md # ユーザー設定
|
||||||
|
```
|
||||||
|
|
||||||
|
### ハートビート(定期タスク)
|
||||||
|
|
||||||
|
PicoClaw は自動的に定期タスクを実行できます。ワークスペースに `HEARTBEAT.md` ファイルを作成します:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# 定期タスク
|
||||||
|
|
||||||
|
- 重要なメールをチェック
|
||||||
|
- 今後の予定を確認
|
||||||
|
- 天気予報をチェック
|
||||||
|
```
|
||||||
|
|
||||||
|
エージェントは30分ごと(設定可能)にこのファイルを読み込み、利用可能なツールを使ってタスクを実行します。
|
||||||
|
|
||||||
|
#### spawn で非同期タスク実行
|
||||||
|
|
||||||
|
時間のかかるタスク(Web検索、API呼び出し)には `spawn` ツールを使って**サブエージェント**を作成します:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# 定期タスク
|
||||||
|
|
||||||
|
## クイックタスク(直接応答)
|
||||||
|
- 現在時刻を報告
|
||||||
|
|
||||||
|
## 長時間タスク(spawn で非同期)
|
||||||
|
- AIニュースを検索して要約
|
||||||
|
- メールをチェックして重要なメッセージを報告
|
||||||
|
```
|
||||||
|
|
||||||
|
**主な特徴:**
|
||||||
|
|
||||||
|
| 機能 | 説明 |
|
||||||
|
|------|------|
|
||||||
|
| **spawn** | 非同期サブエージェントを作成、ハートビートをブロックしない |
|
||||||
|
| **独立コンテキスト** | サブエージェントは独自のコンテキストを持ち、セッション履歴なし |
|
||||||
|
| **message ツール** | サブエージェントは message ツールで直接ユーザーと通信 |
|
||||||
|
| **非ブロッキング** | spawn 後、ハートビートは次のタスクへ継続 |
|
||||||
|
|
||||||
|
#### サブエージェントの通信方法
|
||||||
|
|
||||||
|
```
|
||||||
|
ハートビート発動
|
||||||
|
↓
|
||||||
|
エージェントが HEARTBEAT.md を読む
|
||||||
|
↓
|
||||||
|
長いタスク: spawn サブエージェント
|
||||||
|
↓ ↓
|
||||||
|
次のタスクへ継続 サブエージェントが独立して動作
|
||||||
|
↓ ↓
|
||||||
|
全タスク完了 message ツールを使用
|
||||||
|
↓ ↓
|
||||||
|
HEARTBEAT_OK 応答 ユーザーが直接結果を受け取る
|
||||||
|
```
|
||||||
|
|
||||||
|
サブエージェントはツール(message、web_search など)にアクセスでき、メインエージェントを経由せずにユーザーと通信できます。
|
||||||
|
|
||||||
|
**設定:**
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"heartbeat": {
|
||||||
|
"enabled": true,
|
||||||
|
"interval": 30
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
| オプション | デフォルト | 説明 |
|
||||||
|
|-----------|-----------|------|
|
||||||
|
| `enabled` | `true` | ハートビートの有効/無効 |
|
||||||
|
| `interval` | `30` | チェック間隔(分)、最小5分 |
|
||||||
|
|
||||||
|
**環境変数:**
|
||||||
|
- `PICOCLAW_HEARTBEAT_ENABLED=false` で無効化
|
||||||
|
- `PICOCLAW_HEARTBEAT_INTERVAL=60` で間隔変更
|
||||||
|
|
||||||
|
### 基本設定
|
||||||
|
|
||||||
1. **設定ファイルの作成:**
|
1. **設定ファイルの作成:**
|
||||||
|
|
||||||
サンプル設定ファイルをコピーします:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp config.example.json config/config.json
|
cp config.example.json config/config.json
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **設定の編集:**
|
2. **設定の編集:**
|
||||||
|
|
||||||
`config/config.json` を開き、APIキーや設定を記述します。
|
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"providers": {
|
"providers": {
|
||||||
@@ -335,11 +432,11 @@ PicoClaw は設定に `config.json` を使用します。
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**3. 実行**
|
3. **実行**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
picoclaw agent -m "Hello"
|
picoclaw agent -m "Hello"
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
@@ -389,6 +486,10 @@ picoclaw agent -m "Hello"
|
|||||||
"apiKey": "BSA..."
|
"apiKey": "BSA..."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"heartbeat": {
|
||||||
|
"enabled": true,
|
||||||
|
"interval": 30
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
82
README.md
82
README.md
@@ -399,15 +399,93 @@ PicoClaw stores data in your configured workspace (default: `~/.picoclaw/workspa
|
|||||||
~/.picoclaw/workspace/
|
~/.picoclaw/workspace/
|
||||||
├── sessions/ # Conversation sessions and history
|
├── sessions/ # Conversation sessions and history
|
||||||
├── memory/ # Long-term memory (MEMORY.md)
|
├── memory/ # Long-term memory (MEMORY.md)
|
||||||
|
├── state/ # Persistent state (last channel, etc.)
|
||||||
├── cron/ # Scheduled jobs database
|
├── cron/ # Scheduled jobs database
|
||||||
├── skills/ # Custom skills
|
├── skills/ # Custom skills
|
||||||
├── AGENTS.md # Agent behavior guide
|
├── AGENTS.md # Agent behavior guide
|
||||||
|
├── HEARTBEAT.md # Periodic task prompts (checked every 30 min)
|
||||||
├── IDENTITY.md # Agent identity
|
├── IDENTITY.md # Agent identity
|
||||||
├── SOUL.md # Agent soul
|
├── SOUL.md # Agent soul
|
||||||
├── TOOLS.md # Tool descriptions
|
├── TOOLS.md # Tool descriptions
|
||||||
└── USER.md # User preferences
|
└── USER.md # User preferences
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Heartbeat (Periodic Tasks)
|
||||||
|
|
||||||
|
PicoClaw can perform periodic tasks automatically. Create a `HEARTBEAT.md` file in your workspace:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# 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**:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# 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:**
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"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
|
### Providers
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
@@ -513,6 +591,10 @@ picoclaw agent -m "Hello"
|
|||||||
"api_key": "BSA..."
|
"api_key": "BSA..."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"heartbeat": {
|
||||||
|
"enabled": true,
|
||||||
|
"interval": 30
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -100,6 +100,10 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"heartbeat": {
|
||||||
|
"enabled": true,
|
||||||
|
"interval": 30
|
||||||
|
},
|
||||||
"gateway": {
|
"gateway": {
|
||||||
"host": "0.0.0.0",
|
"host": "0.0.0.0",
|
||||||
"port": 18790
|
"port": 18790
|
||||||
|
|||||||
Reference in New Issue
Block a user