gists

Multicaの全体像とエージェント基盤に関する議論

Q1: これはタスク管理ツールなのか?

Q2: タスクとしてどのようなものを扱っているか?

Q3: 汎用的に使えるか?(例: 業績評価の面談・シート承認管理)

Q4: 汎用タスク管理ツールを作る場合の選択肢

ユーザーは汎用的なタスク管理ツールに興味があり、AIメンバーを活用したい。Multicaではカバーできないため、新しく作る必要があるかという問い。

3つの選択肢

1. Multicaを拡張する

カスタムステータス、カスタムフィールド、汎用的なエージェント実行基盤を追加する。

2. ゼロから新しく作る

3. 既存の汎用ツール + AIエージェント層

Notion、Asana、Linear等のAPIを叩くAIエージェントを作る。

判断基準: 「汎用タスク管理が主」なら選択肢3、「AIエージェントの自律動作が主」なら選択肢1か2。

Q5: エージェント基盤の仕組み — 何を呼び出しているのか?

Multicaのエージェント基盤は Anthropic APIを直接叩くのではなく、CLIをサブプロセスとして起動する 方式。

全体像

Issue割り当て → Server → Daemon(ポーリング) → CLIサブプロセス起動 → 結果をServerに送信

対応しているエージェントCLI

デーモン起動時にPATHを探索し、見つかったCLIを登録する:

Claude Code の呼び出し方

server/pkg/agent/claude.goos.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]

デーモンの動作フロー

  1. 起動時: PATHからCLIを検出し、サーバーにランタイム登録
  2. ポーリング: 3秒間隔でサーバーからタスクをclaim(最大同時実行20)
  3. 実行: ~/multica_workspaces/ に作業ディレクトリを作り、CLIをサブプロセスで起動
  4. 報告: 実行中のメッセージ・進捗・結果をサーバーに送信

LLMのAPIは直接使っていない。Claude Code等のCLIツールを「実行エンジン」として使い、Multicaはそれを管理・監視するオーケストレーション層。

Q6: claude -p の呼び出し元の詳細

server/pkg/agent/claude.goExecute メソッドの処理フロー:

  1. exec.CommandContext() でCLIプロセスを生成(タイムアウト付き、デフォルト20分)
  2. writeClaudeInput() でstdinにユーザーメッセージをJSON形式で書き込む
  3. stdinを閉じる
  4. goroutineでstdoutをスキャンし、JSON行を1行ずつパース

stdinへの入力フォーマット

{
  "type": "user",
  "message": {
    "role": "user",
    "content": [{"type": "text", "text": "プロンプト本文"}]
  }
}

stdoutから受け取るメッセージの種類

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経由でやり取りする仕組み。

Q7: --permission-mode bypassPermissions の意味

Claude Code CLIの実行時に、ツール呼び出し(ファイル編集、コマンド実行など)のたびにユーザーに許可を求める確認プロンプトをすべてスキップし、自動承認するモード。デーモンとして自律実行する場合は人間が画面の前にいないので必要。つまり無人運転モードのためのフラグ。

Q8: --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 は別の単独フラグとして存在し、機能的にはほぼ同等だが指定方法が異なる。