ユーザーは汎用的なタスク管理ツールに興味があり、AIメンバーを活用したい。Multicaではカバーできないため、新しく作る必要があるかという問い。
1. Multicaを拡張する
カスタムステータス、カスタムフィールド、汎用的なエージェント実行基盤を追加する。
work_dir + Claude Codeセッション前提なので、非コード作業を実行させるにはエージェントランタイム自体の再設計が必要2. ゼロから新しく作る
3. 既存の汎用ツール + AIエージェント層
Notion、Asana、Linear等のAPIを叩くAIエージェントを作る。
判断基準: 「汎用タスク管理が主」なら選択肢3、「AIエージェントの自律動作が主」なら選択肢1か2。
Multicaのエージェント基盤は Anthropic APIを直接叩くのではなく、CLIをサブプロセスとして起動する 方式。
Issue割り当て → Server → Daemon(ポーリング) → CLIサブプロセス起動 → 結果をServerに送信
デーモン起動時にPATHを探索し、見つかったCLIを登録する:
claude — Claude Code CLI(メイン)codex — OpenAI Codex CLIopencodeopenclawhermesserver/pkg/agent/claude.go で os.exec.CommandContext() により起動:
claude -p \
--output-format stream-json \
--input-format stream-json \
--verbose \
--strict-mcp-config \
--permission-mode bypassPermissions \
[--model MODEL] \
[--max-turns N] \
[--resume SESSION_ID]
~/multica_workspaces/ に作業ディレクトリを作り、CLIをサブプロセスで起動LLMのAPIは直接使っていない。Claude Code等のCLIツールを「実行エンジン」として使い、Multicaはそれを管理・監視するオーケストレーション層。
claude -p の呼び出し元の詳細server/pkg/agent/claude.go の Execute メソッドの処理フロー:
exec.CommandContext() でCLIプロセスを生成(タイムアウト付き、デフォルト20分)writeClaudeInput() でstdinにユーザーメッセージをJSON形式で書き込む{
"type": "user",
"message": {
"role": "user",
"content": [{"type": "text", "text": "プロンプト本文"}]
}
}
| type | 処理 |
|---|---|
assistant |
テキスト・thinking・tool_useを抽出してチャンネルに送信。トークン使用量も集計 |
user |
tool_resultを抽出 |
system |
session_idを取得 |
result |
最終結果(成功 or エラー) |
log |
ログメッセージ |
Claude Code CLIの stream-json モードを使って、stdin/stdoutのJSONストリームで双方向通信している。Anthropic APIのメッセージ形式に近い構造をCLI経由でやり取りする仕組み。
--permission-mode bypassPermissions の意味Claude Code CLIの実行時に、ツール呼び出し(ファイル編集、コマンド実行など)のたびにユーザーに許可を求める確認プロンプトをすべてスキップし、自動承認するモード。デーモンとして自律実行する場合は人間が画面の前にいないので必要。つまり無人運転モードのためのフラグ。
--permission-mode と --dangerously-skip-permissions の正しさclaude --help で確認した結果、両方とも正式なオプションとして存在するが、別物:
| フラグ | 説明 |
|---|---|
--dangerously-skip-permissions |
単独フラグ。全権限チェックをバイパス。サンドボックス環境推奨 |
--permission-mode <mode> |
モード選択式。選択肢: acceptEdits, auto, bypassPermissions, default, dontAsk, plan |
Multicaの --permission-mode bypassPermissions は正しい使い方。bypassPermissions は --permission-mode の有効な選択肢の一つ。--dangerously-skip-permissions は別の単独フラグとして存在し、機能的にはほぼ同等だが指定方法が異なる。