Sleep-driven persona reconstruction: integrate experiences from session turns, apply forgetting pressure, rewrite SOUL.md. Blocked on TASKS-2 (orchestration) completion. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
5.2 KiB
5.2 KiB
CLAUDE.md
Project: picoclaw
Go-based AI agent with multi-channel messaging (Telegram, Discord, Slack, etc.) and a Telegram Mini App UI.
Build & Test
go build ./...
go test ./...
go vet ./...
Lint: golangci-lint run
Plan Mode
- Interview tool filtering:
interviewAllowedToolsinpkg/agent/loop.gois the single source of truth for tools available during interview/review phases. BothfilterInterviewTools(strips definitions before LLM call) andisToolAllowedDuringInterview(argument-level gating) reference this map. - History clear:
/plan start clearwipes session history and summary on transition to executing. The Mini App review UI offers two sliders: standard approve and approve-with-clear.
Subagent Orchestration (実装済み部分)
- Startup flag:
--orchestrationで on/off。SubagentsConfig.Enabledで gate。 - Conductor identity: orchestration 有効時に conductor identity + spawn/subagent guidance を system prompt へ注入。
- Sandbox/Spawn:
pkg/tools/sandbox.go,pkg/tools/spawn.go実装済み。 - AgentReporter:
orch.AgentReporter/orch.Noop/orch.Broadcasterで統一。main/heartbeat/subagent 全セッションが同一 Broadcaster に発火。Mini App はagentLoop.GetOrchBroadcaster()→handler.SetOrchBroadcaster()で受信。
Session DAG (Phase 0–3 実装済み)
- SQLite SessionStore:
pkg/session/sqlite.go—modernc.org/sqlite(CGO不要)、WAL モード、sessions+turnsテーブル - SessionStore interface:
pkg/session/store.go— Create/Get/List/Append/Turns/Compact/Fork/Prune 等15メソッド - LegacyAdapter:
pkg/session/legacy_adapter.go— SessionStore をラップし SessionManager と同一 API を提供。Store()/AdvanceStored()で直接 DAG 操作も可能 - CompactOldTurns:
LegacyAdapter.CompactOldTurns(key, keepLast, summary)— flush → turn 単位で cut point 算出 → SQLite Compact → キャッシュ更新。summarizeSession()から呼び出し (fallback 付き) - SessionGraph:
pkg/session/graph.go—SessionGraph+BeginTurn()/TurnWriter。LegacyAdapter.Graph()で取得。将来の段階移行準備 - JSON → SQLite migration:
pkg/session/migrate.go— 起動時にsessions/*.jsonを検出 → SQLite import →.json.migratedにリネーム - 配線:
pkg/agent/instance.goのSessions型が*LegacyAdapterに変更。sessions.dbを workspace 直下に生成 - SessionRecorder:
pkg/tools/session_recorder.go(interface) +pkg/agent/session_recorder.go(impl) — SubagentManager から Fork/Turn/Completion/Report を記録 - Prune: 起動時
store.Prune(7d)+flushLoop内 6h 定期 prune。AgentLoop.gcLoopで 30分毎に idlesessionLocksを GC - CLI
/sessionコマンド:list/graph/fork [label]/resetサブコマンド。default は DAG summary + token stats - Mini App Session Graph:
/miniapp/api/sessions/graphendpoint。SSEsessionevent にgraph含む。フロントエンドで tree rendering
コードの匂い — チェックリスト
新しいコードを書くとき・レビューするときの確認事項:
[]string+strings.Join→strings.Builderに一本化[]byte → string → io.Reader→bytes.NewReader(b)を直接使用- ループ内で静的なものを毎回生成 → ループ外で1回生成してキャッシュ
- 全件コピーが呼び出し側の用途より広い → COW または RWMutex + ポインタ返却を検討
- 同じ content を複数関数が独立して Split → 呼び出し側で1回 Split して渡す
var x []Tから始まる容量なし append → ソース長が既知ならmake([]T, 0, n)[]rune(s)変換前に長さチェックなし →len(s) <= maxで ASCII fast path を先に
未実装タスク
以下の todo/ ファイルに分割。各ファイルは互いに依存関係がなく、別ブランチで並列実装可能。
| ファイル | 概要 |
|---|---|
todo/TASKS-1.md |
Memory & Performance Optimization — MemoryStore キャッシュ、FunctionCall/ToolDefinition 型整理、stats フラッシュ最適化 |
todo/TASKS-2.md |
Subagent Orchestration (Container Model) — SubagentContainer、Orchestrator、Presets enforcement、Subagent Plan Mode |
todo/TASKS-3.md |
/session CLI コマンド、Mini App グラフ UI) |
todo/TASKS-4.md |
Mini App & Static Serving — 静的配信の汎用化、バンドラ導入、フロントエンドテスト追加 |
todo/TASKS-5.md |
/plan worktrees の list/inspect/merge/dispose、安全化した PruneOrphaned、Mini App /miniapp/api/worktrees + Git タブ UI) |
todo/TASKS-6.md |
SOUL.md — AI Persona Evolution — 睡眠フェーズで体験を統合・忘却し人格を再構成。TASKS-2 完了後に着手 |