boxglow 0.5.2 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -29
- package/bin/boxglow.js +10609 -2903
- package/dist/assets/index-BpZb2sGB.css +1 -0
- package/dist/assets/index-ujaBGwdT.js +3604 -0
- package/dist/icon-180.png +0 -0
- package/dist/icon-192.png +0 -0
- package/dist/icon-512-maskable.png +0 -0
- package/dist/icon-512.png +0 -0
- package/dist/index.html +7 -2
- package/docs/AGENTS_SNIPPET.md +74 -19
- package/examples/logic-daw/boxglow.json +37 -37
- package/examples/notes-app/boxglow.json +146 -48
- package/package.json +18 -4
- package/dist/assets/index-B0rLWujQ.css +0 -1
- package/dist/assets/index-qzdNjZOL.js +0 -3465
package/dist/icon-180.png
CHANGED
|
Binary file
|
package/dist/icon-192.png
CHANGED
|
Binary file
|
|
Binary file
|
package/dist/icon-512.png
CHANGED
|
Binary file
|
package/dist/index.html
CHANGED
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
<meta property="og:type" content="website" />
|
|
11
11
|
<meta property="og:site_name" content="すきま研究所日誌" />
|
|
12
12
|
<meta name="theme-color" content="#eceef0" />
|
|
13
|
+
<!-- PWA: ホーム画面に追加できるようにする (マニフェスト。Service Worker は src/main.tsx が boxglow.app でだけ登録する) -->
|
|
14
|
+
<link rel="manifest" href="manifest.webmanifest" />
|
|
15
|
+
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
16
|
+
<meta name="apple-mobile-web-app-title" content="Boxglow" />
|
|
17
|
+
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
|
|
13
18
|
<!-- アプリのアイコン (public/ の自前のロゴ。SVG を優先し、古い環境は ico) -->
|
|
14
19
|
<link rel="icon" type="image/svg+xml" href="favicon.svg" />
|
|
15
20
|
<link rel="icon" type="image/x-icon" href="favicon.ico" />
|
|
@@ -27,8 +32,8 @@
|
|
|
27
32
|
} catch (e) {}
|
|
28
33
|
})();
|
|
29
34
|
</script>
|
|
30
|
-
<script type="module" crossorigin src="./assets/index-
|
|
31
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
35
|
+
<script type="module" crossorigin src="./assets/index-ujaBGwdT.js"></script>
|
|
36
|
+
<link rel="stylesheet" crossorigin href="./assets/index-BpZb2sGB.css">
|
|
32
37
|
</head>
|
|
33
38
|
<body>
|
|
34
39
|
<div id="root"></div>
|
package/docs/AGENTS_SNIPPET.md
CHANGED
|
@@ -16,22 +16,31 @@ boxglow.json はリポジトリ直下に置く (`npx boxglow init --name "<プ
|
|
|
16
16
|
### 作業のたびに守ること
|
|
17
17
|
|
|
18
18
|
1. **最初に読む**: `npx boxglow resume` (または `npx boxglow status --brief`) で、作業中・判断待ち・AI 未確認の回答・次の候補・未完了の引き継ぎメモを読む。前のセッションの続きは、ここに出る引き継ぎメモから再開する。`npx boxglow show <block>` で担当するボックスの入出力を確認する
|
|
19
|
-
2.
|
|
20
|
-
|
|
19
|
+
2. **準備を確認**: 取りかかる前に `npx boxglow context <block>` を読む。出力の `readiness` が準備の状態: `state` が `ready` なら着手できる。`unprepared` (要具体化) なら `unprepared` の理由と `next` の次の一手に従って先に具体化する。`waiting` は必須の入力か分岐の答えを待っている
|
|
20
|
+
3. **受け持ち、具体化**: 具体化や分解の前に `npx boxglow claim <block>` で受け持ちだけを取る (実行中にはならない。受け持ち制御が無効な計画では「取得不要」で正常終了する)。そのうえで不足を埋める:
|
|
21
|
+
- 出力の予定成果物: `npx boxglow port <block> --expect "<出力名>=file:src/x.ts"` (kind は file / dir / url / doc / note / decision / result。hint はパスの見当や題名。まだ作っていないファイルでよい)
|
|
22
|
+
- 完了条件: `npx boxglow scope <block> --acceptance "<完了と判断する条件>"`。処理の範囲は `--goal`。出力を作るうえで守る条件 (性能・品質・サイズ・寸法・消費電力など) は `--constraints`
|
|
23
|
+
- 1 つのボックスで出力を作る見通しが立たないなら `npx boxglow split <block> --spec '<JSON>'` で中に小さなボックスを置く。今回着手する子だけ expect / acceptance を書き、先の子は題名と出力だけでよい (要具体化として残る)。入力は不明なら省略してよい (自動で上の階層の入力になる)
|
|
24
|
+
- 対象のファイルが分からないときは、架空のファイルを書かず「対象を特定する調査」のボックスを出力 `note` で作って始める
|
|
25
|
+
4. **着手を記録**: 準備ができたら `npx boxglow context <block>` を読み直してから `npx boxglow start <block> --note "<何をするか>"`。同時に進めるボックスは 1〜2 個まで。
|
|
26
|
+
start したボックスに「今ここ」(本当にいま作業しているボックス。複数の AI や人がいれば、いくつでも) が付き、画面で太い枠と NOW の札が付く。別のボックスにも付けるときは `npx boxglow now <block>` (外すときは `--off`、全部消すときは `now none`)。done / leave でそのボックスの分が外れる。人も画面の状態タブの NOW で付け外しする
|
|
27
|
+
確認トークンの要求 (guard) が有効な計画では、出力の `contextToken` (確認トークン) を付ける:
|
|
21
28
|
`npx boxglow start <block> --note "<何をするか>" --context-token <確認トークン>` (下の「確認トークンと引き継ぎ」を参照)
|
|
22
|
-
|
|
23
|
-
|
|
29
|
+
要具体化のボックスへの start は既定では警告 (理由と次の一手が出る)。`policy --unprepared reject` の計画では開始できない (`--reason` では通れない。人の操作は通る)。出力を子に任せきりの親も実行するものが無いので、子を start する
|
|
30
|
+
5. **完了を記録**: 出力の成果物ができたら `npx boxglow done <block> --artifact "<名前>=<リポジトリ内のパス>"`。
|
|
24
31
|
guard が有効なら `--context-token <確認トークン>` を付ける (直前の自分の操作の出力に「新しい確認トークン: <token>」が出ていれば、それを使う)。
|
|
25
32
|
HEAD にコミット済みで内容が一致するファイルは「コミット + パス + 中身のハッシュ」で記録される (アップロードはしない)。未コミット・未追跡のファイルはローカル参照として残り、コミットした後の `npx boxglow check` で Git の参照に補完される。記録のためだけにコミットしない。全階層が必要なら `npx boxglow status` を読む。PR や外部資料は URL でもよい。
|
|
26
33
|
成果物だけ先に付けるなら `npx boxglow artifact <block> <パス>`。進捗の途中経過は `npx boxglow set <block> --progress 60`
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
34
|
+
6. **人間の判断が要る**: `npx boxglow ask <block> "<質問>" --options "A|B"`。回答があるまでそのボックスは進めず、他のボックスへ移る。人の回答は `status` の「回答あり」に出る。読んだら `npx boxglow ack <block>` で引き取る (そのボックスの `start` / `done` / `set` などでも自動で引き取られる)。引き取るまで人の画面には「AI 未確認」として残り、人が答えを直せる。回答の中に問い返しがあれば、`ask` と `answer --by <自分>` で自分の答えも記録する
|
|
35
|
+
7. **詰まったら**: 入力 (前のボックスの成果物・資料) が足りないことが原因なら、詰まりにしない。`npx boxglow show <block>` で入力の配線を確かめ、足りないものを作るボックスが無ければ `npx boxglow add` で外 (上流) に作り、`npx boxglow connect` でこのボックスの入力につなぐ (配線が「待ち」の色で残り、何を待っているかが図で見える)。選択肢から選んでもらえば進めるなら `ask`。それ以外の、計画の外にある障害 (環境が動かない、権限やキーが無い、外部の返事待ち、原因の分からない失敗) だけを `npx boxglow blocked <block> --note "<困っていること>"` で記録する
|
|
36
|
+
8. **成果物の確認**: ファイルを移動・改名したら `npx boxglow check` を実行する (移動を検出してパスを付け替える。見つからなければ印が付く)
|
|
37
|
+
9. **進捗や気づきを残す**: `npx boxglow log <block> "<本文>"` で、日付と書き手つきの作業記録をボックスに足す (Markdown 可。人は画面の「記録」タブで同じものを見て書く)。引き継ぎメモ (checkpoint) は 1 つを上書きするが、記録は積み上がる
|
|
38
|
+
10. **中断・引き継ぎの前に**: セッションの終わり・コンテキストの圧縮・他の AI や人への引き継ぎの前に、`npx boxglow checkpoint <block> --note "分かったこと; 次にすること; 未解決のこと"` で引き継ぎメモを残す (guard が有効なら `--context-token <確認トークン>` を付ける)。会話の履歴が消えても計画の中に残り、次のセッションが `resume` と `context` で読む
|
|
39
|
+
11. **報告**: 作業の最後に `npx boxglow status --brief` の内容を要約して報告する
|
|
32
40
|
|
|
33
41
|
### 構造の約束
|
|
34
42
|
|
|
43
|
+
- **まだ決まっていない分かれ道は分岐で表す**: 計画を作る時点で、判断次第で後の作業 (道) が変わるときは `npx boxglow branch "<題名>" --options "A|B" --question "<問い>" --context "<判断材料>"` で分岐のボックスを作る。選択肢ごとに道 (出力) ができるので、それぞれの道の最初のボックスへ `connect` する。道が後で 1 つにまとまるところには `npx boxglow join --title "<題名>"` で合流の部品を置き、それぞれの道の最後の出力をこの部品へ `connect` し、部品の出力を先の箱へつなぐ (どれか 1 つの道が届けば先へ進む)。人が答えると、選ばなかった道の先は「見送り」になり、進捗と次の候補から外れる。すでに作ったボックスが実は決まっていない分かれ道だと分かったら、`npx boxglow branch --box <block> --options "A|B" --question "<問い>"` で分岐に変える (今の出力が 1 つ目の選択肢の道になり、線は残る)。答えが出る前の道のボックスは「分岐待ち」で、着手すると警告される (先に下調べするなど理由があれば `--reason` で記録する)
|
|
35
44
|
- 最上位には「入力ノード」「最終成果物ノード」と「プロジェクトのボックス」だけがある。タスクはプロジェクトのボックスの中に置く (`add` の既定の親は最初のプロジェクトのボックス)
|
|
36
45
|
- 階層の深さに制限はない。`split` は何段でも使える
|
|
37
46
|
- 別のプロジェクトでも使えそうなボックス (例: 入力画像のモノクロ化) は `npx boxglow export-block <block> --out <名前>.boxglow-block.json` でテンプレートにし、
|
|
@@ -44,17 +53,43 @@ boxglow.json はリポジトリ直下に置く (`npx boxglow init --name "<プ
|
|
|
44
53
|
```json
|
|
45
54
|
{
|
|
46
55
|
"blocks": [
|
|
47
|
-
{ "title": "
|
|
48
|
-
|
|
56
|
+
{ "title": "対象箇所を特定する", "inputs": ["再現手順"], "outputs": ["調査メモ"],
|
|
57
|
+
"expect": "note:対象のファイルと処理、根拠、変更候補、確認方法、未決事項", "acceptance": "変更するファイルと処理が決まり、後続のボックスに expect と acceptance を設定できる。または、設定できない理由と必要な判断が分かる",
|
|
58
|
+
"goal": "再現して経路を追う。製品コードの修正は今回の範囲外" },
|
|
59
|
+
{ "title": "保存の再試行後に同期状態を取り直す", "inputs": ["調査メモ"], "outputs": ["修正"],
|
|
60
|
+
"expect": "file:src/sync/state.ts", "acceptance": "保存を一度失敗させ、再保存後に同期状態と操作が戻る (テストで確認)" },
|
|
61
|
+
{ "title": "リリースノートを書く", "inputs": ["修正"], "outputs": ["ノート"] }
|
|
49
62
|
],
|
|
50
63
|
"connections": [
|
|
51
|
-
{ "from": "parent
|
|
52
|
-
{ "from": "
|
|
53
|
-
{ "from": "
|
|
64
|
+
{ "from": "parent.再現手順", "to": "対象箇所を特定する.再現手順" },
|
|
65
|
+
{ "from": "対象箇所を特定する.調査メモ", "to": "保存の再試行後に同期状態を取り直す" },
|
|
66
|
+
{ "from": "保存の再試行後に同期状態を取り直す.修正", "to": "リリースノートを書く" },
|
|
67
|
+
{ "from": "リリースノートを書く.ノート", "to": "parent.出力" }
|
|
54
68
|
]
|
|
55
69
|
}
|
|
56
70
|
```
|
|
57
71
|
|
|
72
|
+
`expect` (予定成果物: `"kind:hint"` または `{ "kind", "hint" }`)、`acceptance` (完了条件)、`goal` (今回行う処理) は今回着手する子だけに書く。
|
|
73
|
+
3 つ目の子のように題名と出力だけの子は「要具体化」として残り、着手する番になってから `port --expect` / `scope --acceptance` で決める。
|
|
74
|
+
親自身が作る出力 (子の成果を統合するなど) は `"parentMakes": ["出力名"]` で印を付ける (子の結線と重なると「担当が重複」と案内される)。
|
|
75
|
+
`"splitBy": "工程"` で直下の子の分け方を一語で残す (工程 / 成果物 / 機能 など。`set <block> --split-by` でも書ける)。同じ階層の子は同じ分け方・同じ具体度にそろえる。
|
|
76
|
+
`split` が保存しないのは壊れた構造 (結線先が無い、循環、形の違う expect) だけ。子が 1 個、親の出力を作る子がまだ無い、といった途中の分解は保存され、不足として表示される。
|
|
77
|
+
分解の後と着手の前に `npx boxglow lint <block>` を読む。「必ず直す」(親出力の担当の未定・重複、同じ分岐の排他の道の両方を必須にしている、作業中なのに予定成果物・完了条件が無い、検査の対象そのものの欠落) は直してから進む。
|
|
78
|
+
「着手の前に埋める」(まだ始めていないボックスの予定成果物・完了条件) は、その子の着手の番で埋めればよい (先の仕事の分を今、形だけ書かない)。
|
|
79
|
+
「見直し候補」(子が 1 個、どこにもつながらない出力、形だけの記入、道の先が無い分岐、入力 1 本の合流、兄弟の同じ予定成果物) は内容を見て判断する (機械は拒否しない)。`context` にも件数と上位 3 件が出る。
|
|
80
|
+
|
|
81
|
+
**内容のレビュー (意味は機械では判定できないので、AI か人が材料を読んで評価し、根拠を残す)**
|
|
82
|
+
- 分解した後: `npx boxglow review-split <親>` で材料 (親の目的・制約・完了条件・入出力、子の対象・入出力・予定成果物・完了条件、結線) とチェック項目を読み、評価したら `npx boxglow split-ok <親> --note "<根拠: 何を確認したか>"` で記録する。
|
|
83
|
+
- 着手する前: `npx boxglow review-box <block>` で材料 (対象・処理・予定成果物・確認方法、入力の供給元、上流の分岐の答え) を読み、`npx boxglow box-ok <block> --note "<根拠>"` で記録する。
|
|
84
|
+
- 記録は「評価したと申告し根拠を残した記録」であり、妥当性の証明ではない。材料が変わると `context` の `reviews` が `stale` (何が変わったかと、何を確認すればよいかの案内つき) になる。`stale` は「分解が不正」ではなく「前回の確認後に材料が変わった」という意味。位置や配色、進捗、担当の変更では古くならない。分解の記録は分岐の答えでは古くならず、着手準備の記録は答えが変わると古くなる。
|
|
85
|
+
- 先の子を着手の番で具体化すると、親の分解の記録は必ず `stale` になる (子の expect / acceptance も材料のため)。その子の expect・scope を一通り書き終えてから、変わった子と、親の完了条件・対象外範囲・兄弟との分担への影響だけを確認し、整合すれば `split-ok <親> --note "B181 の具体化を確認。親の対象外範囲に入らず、B182 との分担は重複しない"` のように更新する。port や scope の操作ごとに再確認はしない。複数の子を同時に具体化したら、まとめて確認してよい。
|
|
86
|
+
- 着手の条件にはしていない (既定でも reject の計画でも)。`start` を止めるのは要具体化と入力待ちだけ。
|
|
87
|
+
|
|
88
|
+
**分岐・合流を AI が使う**
|
|
89
|
+
- `ask` に選択肢を付けたとき、答えで後の作業が分かれるなら `--branch` を付ける: そのボックスが分岐になり、選択肢ごとの道 (出力) ができる。各道の最初のボックスへ `connect` し、道がまとまるところに `join` を置く。
|
|
90
|
+
- `split` の JSON でも作れる: 子に `"branch": { "question": "...", "options": ["A", "B"] }` で分岐のボックス (出力は選択肢の名前)、`"join": true` で合流の部品。例:
|
|
91
|
+
`{ "blocks": [{ "title": "認証方式を決める", "branch": { "question": "どれ?", "options": ["メール", "OAuth"] } }, { "title": "メールで実装", "outputs": ["認証"] }, { "title": "OAuth で実装", "outputs": ["認証"] }, { "title": "合流", "join": true }], "connections": [{ "from": "認証方式を決める.メール", "to": "メールで実装" }, { "from": "認証方式を決める.OAuth", "to": "OAuth で実装" }, { "from": "メールで実装.認証", "to": "合流" }, { "from": "OAuth で実装.認証", "to": "合流" }, { "from": "合流.合流", "to": "parent.認証" }] }`
|
|
92
|
+
- `lint` は、同じ分岐の排他の道の両方を 1 つのボックスが必須にしている (両方が届くことはない) を「必ず直す」、道の先が無い・合流の入力が 1 本を「見直し候補」として出す。
|
|
58
93
|
`parent.<名前>` は分解するボックス自身の入力 / 出力。`<block>` は短い ID (B12 など。status に出る) か題名。
|
|
59
94
|
下の階層を持たないボックスの出力は 1 本 (outputs は 1 つだけ書く)。題名は「何を作るか」が分かる短い言葉にする。
|
|
60
95
|
期日や時間は `npx boxglow set <block> --due 2026-10-15 --start 2026-10-01 --estimate 8 --hours 3.5` で記録する。
|
|
@@ -87,7 +122,7 @@ npx boxglow done B12 --artifact "<名前>=<パス>" --context-token <新しい
|
|
|
87
122
|
- **自分で更新できる場合**: 自分の `ask` / `artifact` / `done` / `set` / `split` / `checkpoint` などでコンテキストが変わったときは、その出力の最後の行に「新しい確認トークン: <token>」が出る。自分で変えた内容は分かっているので、読み直さずに次の操作へ使う。`ask` / `decision` / `answer` / `reopen` は確認トークン無しでも実行できるが、新しい確認トークンが出るのは最新の確認トークンを付けたときだけ
|
|
88
123
|
- **最初は短い形で読む**: `npx boxglow context <block> --brief` は、対象のボックスの情報 (説明・範囲・判断・引き継ぎ・入出力・成果物) は全部、計画全体の説明、親と入力元の題名・状態・判断 (材料と選択肢つき。前の回答の履歴は省く)・対象につながる出力を出す。確認トークンは `--brief` なしと同じなので、そのまま `--context-token` に使える。`target.missingInputs` (不足している必須の入力) と `target.inputs[].sources` (どのボックスのどの出力か・成果物の参照) を先に見る。`omitted` に省いた件数が出る。省かれた説明・入出力の条件・引き継ぎが作業に関わりそうなら、`--brief` なしで読むか、そのボックスの `context` を読む
|
|
89
124
|
- **短い形で始める前提**: 範囲 (scope) を 1 項目でも設定した親・入力元のボックスの説明は、短い形では省かれる (`omitted.descriptions` に件数)。範囲を設定するときは、説明に書いた制約 (互換性・禁止事項・期限など) を範囲へ写し終えてからにする。写したか分からない計画・`omitted.descriptions` が 0 でない計画では、着手前に `--brief` なしで 1 度読む。短い形は調査の出発点で、それだけ読めば十分という保証ではない
|
|
90
|
-
- 短い形でも用が足りるように書く: 作業を縛る条件は説明の中に埋めずに scope (non-goals / acceptance / consult) に書く。引き継ぎメモは最新の 1 件だけが残るので、未解決の点・注意点・次の手順を毎回書き直して持ち越す。調べ始める場所は、対象のボックスの説明に次の形で書く (出発点であり、そのファイルだけ読めば足りるという意味ではない):
|
|
125
|
+
- 短い形でも用が足りるように書く: 作業を縛る条件は説明の中に埋めずに scope (non-goals / constraints / acceptance / consult) に書く。引き継ぎメモは最新の 1 件だけが残るので、未解決の点・注意点・次の手順を毎回書き直して持ち越す。調べ始める場所は、対象のボックスの説明に次の形で書く (出発点であり、そのファイルだけ読めば足りるという意味ではない):
|
|
91
126
|
`変更候補: <パス> — <調べ始める理由>` / `関連検査: <パスまたはコマンド> — <確かめること>`
|
|
92
127
|
- 古い確認トークンを通すために guard を無効にしない (AI が `guard off` するには最新の確認トークンが要る)
|
|
93
128
|
- MCP では `boxglow_context` と、各ツールの `contextToken` 引数を使う (新しい確認トークンはツールの結果の最後の行に出る)
|
|
@@ -95,17 +130,37 @@ npx boxglow done B12 --artifact "<名前>=<パス>" --context-token <新しい
|
|
|
95
130
|
|
|
96
131
|
### 着手・完了、今回の範囲、記録の鮮度
|
|
97
132
|
|
|
98
|
-
- 最初に resume の現況 (活動・判断待ち・未確認回答) を読む。候補は「今回の範囲 / その他」の各組で「着手できる /
|
|
133
|
+
- 最初に resume の現況 (活動・判断待ち・未確認回答) を読む。候補は「今回の範囲 / その他」の各組で「着手できる / 要具体化 / 入力待ち」に分かれ、要具体化の理由と不足する入力名が出る。要具体化や入力待ちを、準備済みと取り違えない。
|
|
134
|
+
- 「着手できる」(Ready) は、自身が作る出力があり、その予定成果物 (expect) と完了条件 (acceptance) が書かれ、必須の入力がそろっている、という機械検査の結果。内容が具体的かどうかまでは保証しない (`expect = src/`、`acceptance = 動作する` でも通る)。対象・処理・成果・確認方法を第三者が追えるように書く。
|
|
99
135
|
- ボックスの任意4項目を scope で設定する。goal = 今回達成すること、non-goals = 今回は扱わないこと、acceptance = 完了と判断する条件、consult = 範囲を広げる前に相談する条件。context の先頭で対象と親の範囲を読み、着手前と完了前に照合する。完了条件の本文をAIが満たしたかは自動判定しない。
|
|
100
|
-
- scope B12 --goal "達成すること" --non-goals "今回扱わないこと" --acceptance "確認する条件" --consult "相談する条件" で設定する。scope B12 は表示だけ。各項目に none
|
|
136
|
+
- scope B12 --goal "達成すること" --non-goals "今回扱わないこと" --acceptance "確認する条件" --consult "相談する条件" で設定する。scope B12 は表示だけ。各項目に none または空文字を渡すと消す。画面では詳細パネルの「その他」タブ →「作業範囲を編集」。記入済みの項目だけが「今回の範囲」に出る。
|
|
101
137
|
- focus B12 でこのボックスと配下を次候補の先頭にする。focus は現在の対象の表示、focus none は解除。対象外も別の組に残る。候補に出ること自体は作業範囲の拡大や公開を許可しない。
|
|
102
138
|
- start の必須入力不足は既定で警告するが、従来どおり開始できる。先行作業が必要なら --reason "先に行う理由" を付ける。警告は出ず、理由は活動とログに残る。done の出力成果物なしも既定で警告のみ。既存の出力成果物または --artifact を数え、ボックスの参考資料は数えない。
|
|
103
|
-
- 計画で選ぶ場合だけ policy --start reject --done reject にする。それぞれ warn
|
|
139
|
+
- 計画で選ぶ場合だけ policy --start reject --done reject --unprepared reject にする。それぞれ warn に戻せる。入力待ちの拒否でも理由付きの開始は可能だが、要具体化の拒否は理由では通れない (先に具体化する)。成果物なしの拒否は set --status white にも効く。人の操作 (画面 / --actor human) は拒否しない。AIが拒否を避けるために人を名乗ったり、設定を弱めたりしない。
|
|
104
140
|
- guard 有効時、scope の変更、focus の設定・解除、policy の変更にも --context-token が必要。scope/focus/policy を変えると新しいトークンが出るので、次の操作はそれを使う。表示だけには不要。
|
|
105
141
|
- resume は完了済みの引き継ぎ本文を隠し、件数だけ示す。履歴が必要な場合だけ resume --include-completed で展開する (context / show では個別に読める)。
|
|
106
142
|
- 説明は descriptionUpdatedAt、状態は statusChangedAt、引き継ぎは既存の at で日時を確認できる。状態変更より古いメモはその旨を示す。旧記録の不明な日時は補わない。「新しい記録」は真偽の保証ではない。
|
|
107
143
|
- Done で古い状況説明が残る可能性がある場合、CLI・詳細パネル・resume に見直し案内が出る。本文は自動で消さない。内容を確認し、必要なら set B12 --note "現在の説明" (none で消去) または画面の Notes で直す。
|
|
108
|
-
- MCP は boxglow_scope / boxglow_focus / boxglow_policy、boxglow_start の reason、boxglow_resume の includeCompleted を使う。変更には contextToken を付ける。
|
|
144
|
+
- MCP は boxglow_scope / boxglow_focus / boxglow_policy、boxglow_claim、boxglow_port の expect / self、boxglow_start の reason、boxglow_resume の includeCompleted を使う。変更には contextToken を付ける。
|
|
109
145
|
- データ形式は v5 のままで全項目は任意。旧版 (0.4.2以前) は新しい規則を実行せず、保存時に計画の workflowPolicy / focusBlockId を落とす。これらを使う計画の書き手 (CLI・serve・画面・拡張内のアプリ) は対応したビルドに揃える。版番号だけでなくビルド日時も確認する。
|
|
110
146
|
|
|
147
|
+
|
|
148
|
+
### Sync decisions
|
|
149
|
+
|
|
150
|
+
AI may only sync already bound projects and inspect comparisons. If sync stops for a conflict or a human choice, summarize the differences and use ask to notify the user. Never resolve conflicts, create a new binding, relink, recover, adopt, restore, or confirm an account. A human must use the UI or explicitly run CLI with --actor human. AI must never add --actor human, including after a chat answer; record the answer and wait for the human to apply the sync choice.
|
|
151
|
+
|
|
152
|
+
Codexは全CLI呼び出しに `--actor codex`、Claude Codeは `--actor claude-code` を明示する。WSLなどでは実行環境の印が渡らないことがある。サブエージェントは `codex-作業名` などに分け、人を名乗らない。
|
|
153
|
+
|
|
154
|
+
### 並列作業の受け持ち
|
|
155
|
+
|
|
156
|
+
計画で受け持ちが有効なら、CLI実行ごとに一意の `BOXGLOW_INSTANCE_ID` を固定し、`claims` と `context` を読んでから `claim` (具体化・分解の前) または `start` (実行) する。`claim` で取った受け持ちは、そのまま `start` に引き継がれる。独立したエージェント間で実行IDを共有しない。既定はボックスのみ、必要なら `--scope subtree`。成功したCLAIM行のtokenを保持し、保存する操作に `--claim-token` を付ける。MCPは実行IDと受領証を自動で保持する。5分ごと (期限が短ければ半分以内) に `claim-renew` / `boxglow_claim_renew` を呼び、中断前はcheckpoint。done/leaveは対象の受け持ちを解放する。期限切れや世代違いを無視せず、最新contextを確認して取り直す。同名actorでも別実行の受け持ちは奪わない。設定・強制解除・同期競合の解決は人に依頼し、AIがhumanを名乗って代行しない。共有ファイル以外の同期コピー間には排他保証がない。詳しくは `docs/CLAIMS.md`。
|
|
157
|
+
|
|
158
|
+
他者の実行ID・受領証を使わない。計画やclaimsの出力から他者の受領証を組み立てることも禁止。MCP再起動後の同名actorも別実行なので、自動で引き継がず期限を待つか人に解除を頼む。
|
|
159
|
+
|
|
160
|
+
入力の自動引き上げは元のボックスの範囲で扱う。共有入力の内容変更や別ボックスへの配置変更には、影響する範囲の取得も必要。focusやgroupなど計画全体の設定には `context root` → `claim root` でrootを取得し、そのCLAIMを渡す (`start root` でも取れるが、実行中にはしない `claim` を使う)。rootのみの取得は通常のボックスを含まない。計画設定の変更はrootのみで足りる。rootのsubtreeは並行作業を全部止めるので、AIは使わず人に相談する。rootの終了は `leave root`。context guardの確認トークンも引き続き必要。
|
|
161
|
+
|
|
111
162
|
---
|
|
163
|
+
|
|
164
|
+
同期の人専用操作は、強制的な権限分離ではなく誤操作の防止です。AI は `--actor human` を名乗らず、比較と停止理由を人へ伝えてください。MCP と AI として識別した CLI は、人用の選択コマンドを出力しません。
|
|
165
|
+
|
|
166
|
+
人のCLI操作は `--actor human:名前` も受け付けます。AIはこの形でも人を名乗らないでください。AI向け停止文の `boxglow sync --help` は、AI環境を引き継いだ人への案内です。AIの代行許可ではありません。
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"status": "gray",
|
|
69
69
|
"assigneeIds": [],
|
|
70
70
|
"position": {
|
|
71
|
-
"x":
|
|
71
|
+
"x": 581.6,
|
|
72
72
|
"y": 76
|
|
73
73
|
},
|
|
74
74
|
"collapsed": true,
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"status": "gray",
|
|
89
89
|
"assigneeIds": [],
|
|
90
90
|
"position": {
|
|
91
|
-
"x":
|
|
91
|
+
"x": 1085.6,
|
|
92
92
|
"y": 76
|
|
93
93
|
},
|
|
94
94
|
"collapsed": true,
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
"status": "gray",
|
|
109
109
|
"assigneeIds": [],
|
|
110
110
|
"position": {
|
|
111
|
-
"x":
|
|
111
|
+
"x": 1589.6,
|
|
112
112
|
"y": 76
|
|
113
113
|
},
|
|
114
114
|
"collapsed": true,
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
"assigneeIds": [],
|
|
146
146
|
"position": {
|
|
147
147
|
"x": 120,
|
|
148
|
-
"y":
|
|
148
|
+
"y": 764
|
|
149
149
|
},
|
|
150
150
|
"collapsed": false,
|
|
151
151
|
"artifacts": [],
|
|
@@ -178,7 +178,7 @@
|
|
|
178
178
|
"status": "white",
|
|
179
179
|
"assigneeIds": [],
|
|
180
180
|
"position": {
|
|
181
|
-
"x":
|
|
181
|
+
"x": 605.5999999999999,
|
|
182
182
|
"y": 76
|
|
183
183
|
},
|
|
184
184
|
"collapsed": false,
|
|
@@ -195,7 +195,7 @@
|
|
|
195
195
|
"status": "white",
|
|
196
196
|
"assigneeIds": [],
|
|
197
197
|
"position": {
|
|
198
|
-
"x":
|
|
198
|
+
"x": 1093.6,
|
|
199
199
|
"y": 76
|
|
200
200
|
},
|
|
201
201
|
"collapsed": false,
|
|
@@ -244,7 +244,7 @@
|
|
|
244
244
|
"status": "white",
|
|
245
245
|
"assigneeIds": [],
|
|
246
246
|
"position": {
|
|
247
|
-
"x":
|
|
247
|
+
"x": 624,
|
|
248
248
|
"y": 76
|
|
249
249
|
},
|
|
250
250
|
"collapsed": false,
|
|
@@ -261,7 +261,7 @@
|
|
|
261
261
|
"status": "white",
|
|
262
262
|
"assigneeIds": [],
|
|
263
263
|
"position": {
|
|
264
|
-
"x":
|
|
264
|
+
"x": 1128,
|
|
265
265
|
"y": 76
|
|
266
266
|
},
|
|
267
267
|
"collapsed": false,
|
|
@@ -278,7 +278,7 @@
|
|
|
278
278
|
"status": "white",
|
|
279
279
|
"assigneeIds": [],
|
|
280
280
|
"position": {
|
|
281
|
-
"x":
|
|
281
|
+
"x": 1632,
|
|
282
282
|
"y": 76
|
|
283
283
|
},
|
|
284
284
|
"collapsed": false,
|
|
@@ -313,7 +313,7 @@
|
|
|
313
313
|
"assigneeIds": [],
|
|
314
314
|
"position": {
|
|
315
315
|
"x": 120,
|
|
316
|
-
"y":
|
|
316
|
+
"y": 780
|
|
317
317
|
},
|
|
318
318
|
"collapsed": false,
|
|
319
319
|
"artifacts": [],
|
|
@@ -331,7 +331,7 @@
|
|
|
331
331
|
"assigneeIds": [],
|
|
332
332
|
"position": {
|
|
333
333
|
"x": 120,
|
|
334
|
-
"y":
|
|
334
|
+
"y": 1512
|
|
335
335
|
},
|
|
336
336
|
"collapsed": false,
|
|
337
337
|
"artifacts": [],
|
|
@@ -347,8 +347,8 @@
|
|
|
347
347
|
"status": "gray",
|
|
348
348
|
"assigneeIds": [],
|
|
349
349
|
"position": {
|
|
350
|
-
"x":
|
|
351
|
-
"y":
|
|
350
|
+
"x": 1848,
|
|
351
|
+
"y": 1512
|
|
352
352
|
},
|
|
353
353
|
"collapsed": false,
|
|
354
354
|
"artifacts": [],
|
|
@@ -381,7 +381,7 @@
|
|
|
381
381
|
"status": "white",
|
|
382
382
|
"assigneeIds": [],
|
|
383
383
|
"position": {
|
|
384
|
-
"x":
|
|
384
|
+
"x": 624,
|
|
385
385
|
"y": 76
|
|
386
386
|
},
|
|
387
387
|
"collapsed": false,
|
|
@@ -398,7 +398,7 @@
|
|
|
398
398
|
"status": "white",
|
|
399
399
|
"assigneeIds": [],
|
|
400
400
|
"position": {
|
|
401
|
-
"x":
|
|
401
|
+
"x": 1128,
|
|
402
402
|
"y": 76
|
|
403
403
|
},
|
|
404
404
|
"collapsed": false,
|
|
@@ -432,7 +432,7 @@
|
|
|
432
432
|
"status": "white",
|
|
433
433
|
"assigneeIds": [],
|
|
434
434
|
"position": {
|
|
435
|
-
"x":
|
|
435
|
+
"x": 624,
|
|
436
436
|
"y": 76
|
|
437
437
|
},
|
|
438
438
|
"collapsed": false,
|
|
@@ -449,7 +449,7 @@
|
|
|
449
449
|
"status": "gray",
|
|
450
450
|
"assigneeIds": [],
|
|
451
451
|
"position": {
|
|
452
|
-
"x":
|
|
452
|
+
"x": 1128,
|
|
453
453
|
"y": 76
|
|
454
454
|
},
|
|
455
455
|
"collapsed": false,
|
|
@@ -471,7 +471,7 @@
|
|
|
471
471
|
"status": "black",
|
|
472
472
|
"assigneeIds": [],
|
|
473
473
|
"position": {
|
|
474
|
-
"x":
|
|
474
|
+
"x": 1632,
|
|
475
475
|
"y": 76
|
|
476
476
|
},
|
|
477
477
|
"collapsed": false,
|
|
@@ -505,7 +505,7 @@
|
|
|
505
505
|
"status": "black",
|
|
506
506
|
"assigneeIds": [],
|
|
507
507
|
"position": {
|
|
508
|
-
"x":
|
|
508
|
+
"x": 624,
|
|
509
509
|
"y": 76
|
|
510
510
|
},
|
|
511
511
|
"collapsed": false,
|
|
@@ -538,7 +538,7 @@
|
|
|
538
538
|
"status": "black",
|
|
539
539
|
"assigneeIds": [],
|
|
540
540
|
"position": {
|
|
541
|
-
"x":
|
|
541
|
+
"x": 1128,
|
|
542
542
|
"y": 76
|
|
543
543
|
},
|
|
544
544
|
"collapsed": false,
|
|
@@ -572,7 +572,7 @@
|
|
|
572
572
|
"status": "black",
|
|
573
573
|
"assigneeIds": [],
|
|
574
574
|
"position": {
|
|
575
|
-
"x":
|
|
575
|
+
"x": 624,
|
|
576
576
|
"y": 76
|
|
577
577
|
},
|
|
578
578
|
"collapsed": false,
|
|
@@ -606,8 +606,8 @@
|
|
|
606
606
|
"status": "gray",
|
|
607
607
|
"assigneeIds": [],
|
|
608
608
|
"position": {
|
|
609
|
-
"x":
|
|
610
|
-
"y":
|
|
609
|
+
"x": 1848,
|
|
610
|
+
"y": 76
|
|
611
611
|
},
|
|
612
612
|
"collapsed": false,
|
|
613
613
|
"artifacts": [],
|
|
@@ -624,7 +624,7 @@
|
|
|
624
624
|
"assigneeIds": [],
|
|
625
625
|
"position": {
|
|
626
626
|
"x": 120,
|
|
627
|
-
"y":
|
|
627
|
+
"y": 780
|
|
628
628
|
},
|
|
629
629
|
"collapsed": false,
|
|
630
630
|
"artifacts": [],
|
|
@@ -657,7 +657,7 @@
|
|
|
657
657
|
"status": "black",
|
|
658
658
|
"assigneeIds": [],
|
|
659
659
|
"position": {
|
|
660
|
-
"x":
|
|
660
|
+
"x": 624,
|
|
661
661
|
"y": 76
|
|
662
662
|
},
|
|
663
663
|
"collapsed": false,
|
|
@@ -674,7 +674,7 @@
|
|
|
674
674
|
"status": "black",
|
|
675
675
|
"assigneeIds": [],
|
|
676
676
|
"position": {
|
|
677
|
-
"x":
|
|
677
|
+
"x": 1128,
|
|
678
678
|
"y": 76
|
|
679
679
|
},
|
|
680
680
|
"collapsed": false,
|
|
@@ -708,7 +708,7 @@
|
|
|
708
708
|
"status": "black",
|
|
709
709
|
"assigneeIds": [],
|
|
710
710
|
"position": {
|
|
711
|
-
"x":
|
|
711
|
+
"x": 624,
|
|
712
712
|
"y": 76
|
|
713
713
|
},
|
|
714
714
|
"collapsed": false,
|
|
@@ -742,7 +742,7 @@
|
|
|
742
742
|
"status": "black",
|
|
743
743
|
"assigneeIds": [],
|
|
744
744
|
"position": {
|
|
745
|
-
"x":
|
|
745
|
+
"x": 624,
|
|
746
746
|
"y": 76
|
|
747
747
|
},
|
|
748
748
|
"collapsed": false,
|
|
@@ -759,7 +759,7 @@
|
|
|
759
759
|
"status": "black",
|
|
760
760
|
"assigneeIds": [],
|
|
761
761
|
"position": {
|
|
762
|
-
"x":
|
|
762
|
+
"x": 1128,
|
|
763
763
|
"y": 76
|
|
764
764
|
},
|
|
765
765
|
"collapsed": false,
|
|
@@ -794,7 +794,7 @@
|
|
|
794
794
|
"assigneeIds": [],
|
|
795
795
|
"position": {
|
|
796
796
|
"x": 120,
|
|
797
|
-
"y":
|
|
797
|
+
"y": 764
|
|
798
798
|
},
|
|
799
799
|
"collapsed": false,
|
|
800
800
|
"artifacts": [],
|
|
@@ -827,7 +827,7 @@
|
|
|
827
827
|
"status": "black",
|
|
828
828
|
"assigneeIds": [],
|
|
829
829
|
"position": {
|
|
830
|
-
"x":
|
|
830
|
+
"x": 607.9999999999999,
|
|
831
831
|
"y": 76
|
|
832
832
|
},
|
|
833
833
|
"collapsed": false,
|
|
@@ -844,7 +844,7 @@
|
|
|
844
844
|
"status": "black",
|
|
845
845
|
"assigneeIds": [],
|
|
846
846
|
"position": {
|
|
847
|
-
"x":
|
|
847
|
+
"x": 1095.9999999999998,
|
|
848
848
|
"y": 76
|
|
849
849
|
},
|
|
850
850
|
"collapsed": false,
|
|
@@ -878,7 +878,7 @@
|
|
|
878
878
|
"status": "black",
|
|
879
879
|
"assigneeIds": [],
|
|
880
880
|
"position": {
|
|
881
|
-
"x":
|
|
881
|
+
"x": 624,
|
|
882
882
|
"y": 76
|
|
883
883
|
},
|
|
884
884
|
"collapsed": false,
|
|
@@ -895,7 +895,7 @@
|
|
|
895
895
|
"status": "black",
|
|
896
896
|
"assigneeIds": [],
|
|
897
897
|
"position": {
|
|
898
|
-
"x":
|
|
898
|
+
"x": 1071.1999999999998,
|
|
899
899
|
"y": 76
|
|
900
900
|
},
|
|
901
901
|
"collapsed": false,
|
|
@@ -3013,11 +3013,11 @@
|
|
|
3013
3013
|
"terminals": {
|
|
3014
3014
|
"in": {
|
|
3015
3015
|
"x": 0,
|
|
3016
|
-
"y":
|
|
3016
|
+
"y": 243
|
|
3017
3017
|
},
|
|
3018
3018
|
"out": {
|
|
3019
|
-
"x":
|
|
3020
|
-
"y":
|
|
3019
|
+
"x": 2515.2,
|
|
3020
|
+
"y": 269
|
|
3021
3021
|
}
|
|
3022
3022
|
},
|
|
3023
3023
|
"log": [
|