自分で仕事を探すエージェント
「エージェントが自ら仕事を見つけます。」命令を送信するのに人間は必要ありません。作業自体はタスクボードから取得されます。
「目覚める」から「自分の仕事を見つける」まで
s09 / s10 のチームメイトはパッシブです。メールボックスが機能し始める前に、誰かがメールボックスを介してメッセージを送信する必要があります。完了するとアイドル状態になり、再びウェイクアップされます。
S11 の自律的なチームメイト アクティブ: 仕事がなくても実際には止まりません。 .tasks/ ディレクトリを 5 秒ごとにスキャンします。所有されていないタスクが見つかると、claim_task がそれを要求して作業を開始します。
Teammate lifecycle:
+-------+
| spawn |
+---+---+
|
v
+-------+
| WORK | <-- LLM tool_use 循环
+---+---+
|
| stop_reason != tool_use OR tool_use("idle")
v
+-------+
| IDLE | poll 每 5s,共 12 次 = 60s 超时
+---+---+
|
+--> inbox 有新消息? → resume WORK
|
+--> scan .tasks/,发现未认领 → claim → resume WORK
|
+--> 60s 什么都没等到 → status = shutdown,线程退出
自動請求・タスクボードから「受注」
コア機能:
def scan_unclaimed_tasks() -> list: unclaimed = [] for f in sorted(TASKS_DIR.glob("task_*.json")): task = json.loads(f.read_text()) if (task.get("status") == "pending" and not task.get("owner") and not task.get("blockedBy")): unclaimed.append(task) return unclaimed
3 つのフィルタ = 保留中 + 所有者なし + ブロック対象なし。どちらも欠かせないものです。
要求アクション自体には、2 つのエージェントが同じ未要求タスクを同時に取得することを防ぐためのロック (_claim_lock) があります。ロックを再度読み取り、所有者がまだ空かどうかを確認し、「in_progress」マークと所有者をディスクに書き込みます。
複数のエージェントをシミュレートしてタスクボードを同時にスキャンします
3 人のチームメイトがアイドル状態にあり、3 つのタスクが要求を待っています。 「次のラウンドをスキャン」をクリックして、誰が最初にそれを獲得するかを確認します。
アイデンティティの再注入 · 圧縮後も自分が誰であるかがわかります
s06 は、auto_compact がメッセージを概要に置き換えると述べました。自律エージェントは、数時間実行した後でも簡単にトリガーできます。圧縮後は、モデルはその名前や役割を認識しません。
S11 のコツ: 新しいタスクを要求するときに、len(messages) ≤ 3 (圧縮されたばかりであることを示す) の場合、ヘッダーに ID ブロックを自動的に挿入します。
if len(messages) <= 3: messages.insert(0, { "role": "user", "content": f"<identity>You are 'alice', role: coder, team: my-team. Continue your work.</identity>", }) messages.insert(1, {"role":"assistant", "content": f"I am alice. Continuing."})
このモードはアイデンティティ再注入と呼ばれます。これは、人工的に構築された一連の対話を使用して「モデルに自分が誰であるかを伝える」ことで、キャラクターの感覚を取り戻すことができます。