ward agent talk: interactive, fleet-mounted sibling to ward agent work #219
Closed
opened 2026-06-19 07:33:37 +00:00 by coilyco-ops
·
8 comments
No Branch/Tag specified
main
issue-1082
issue-1460
issue-1459-daemonless-alias
issue-1454
issue-1453
issue-1301
issue-1443
issue-1283
issue-1447
release
issue-1166
issue-1139
issue-1307
issue-1308
issue-1309
issue-1435
issue-1430
issue-1428
issue-1388
issue-1420
issue-1422
issue-1423
issue-1417
issue-1408
issue-1335
issue-1412
issue-1411
issue-1402
issue-1403
issue-1402-scoop-best-effort
issue-1336
issue-1334
issue-1393
issue-1338
issue-1397
issue-1392
issue-1339
issue-1340
issue-1300
issue-1288
issue-1304
issue-1270
issue-1381
issue-1244
issue-1227
issue-1380
issue-996
issue-1016
issue-1375
issue-1371
issue-1372
issue-1370
issue-1364
issue-1175
issue-1234
issue-1360
issue-1358
issue-1353
issue-1242
issue-1346
issue-1347
issue-1342
issue-1321
issue-1073-rebased
issue-1237-friction-events
issue-1320
issue-1344
issue-1073
issue-1275
issue-1332-replacement
issue-1296
issue-1330-replacement
issue-1224-rebased
issue-1323
issue-993
issue-1243
issue-871
issue-1298
issue-1315
issue-1312
issue-1314
issue-1313
issue-1310
issue-1282
issue-1224
issue-1173
issue-1000
issue-1007
issue-1281
issue-1011
issue-1006-recovery-note
issue-998
issue-1221
issue-1240
issue-1170
issue-1239
issue-1172
issue-1168
issue-1174
issue-1201
issue-1112
issue-1179
issue-1246
issue-1247
issue-1245
issue-1050
issue-1105
issue-1041
issue-1120
issue-1197
issue-1111
issue-1225
issue-1196
issue-1171
issue-1194
issue-1203
issue-1198
issue-1202
issue-1200
issue-1213
issue-1205
issue-1207
issue-1209
issue-1206
issue-1195
issue-1191
issue-1188
issue-1180
issue-1147
issue-1149
issue-1134
issue-1143
issue-1145
issue-1140
issue-1094
issue-1129
issue-1142
stash/agentic-os-image-default-rename
fix/test-env-isolation
docs/features-two-stage-release
fix/promote-server-scheme
fix/smartdefaults-error-source
feat/two-stage-release
issue-1086
fix/placeholder-sentinels
fix/migrate-off-cli-guard-dispatch
fix/test-yml-duplicate-main-gate
issue-1014-landing-fix
issue-911-pr
issue-1109
issue-1008
issue-999
issue-861
issue-1074
issue-1076
issue-1049
issue-1039
issue-994
issue-991
issue-1020
issue-1067
issue-913
issue-982
issue-1034
issue-1005
issue-1031
issue-990
issue-1062
issue-995
issue-1057
issue-905
issue-911
issue-1042
issue-1021
issue-1009
issue-1014
issue-1001
issue-978
issue-985
issue-950
issue-979
issue-977
issue-971
issue-935
issue-970
issue-969
issue-956
issue-965
issue-964
issue-962-restore-readme
issue-951
issue-958-container-config-guard
issue-704
issue-697
issue-896
issue-885
issue-876
issue-895
issue-893
issue-940
issue-923
issue-942
issue-952
issue-952-director
issue-936
issue-937
issue-931
issue-924
issue-920
issue-635
issue-903
issue-892
issue-874
issue-879
issue-890
issue-910
issue-875
issue-897
issue-894
issue-637
issue-842
issue-834
issue-860
issue-541
issue-723
issue-830-github-authoritative
issue-853
issue-634
issue-845
issue-846
issue-843
issue-496
issue-832
issue-777
issue-778
issue-836
issue-700
issue-695
issue-124-share-parser
issue-671
issue-722
issue-694
issue-824
issue-640
issue-735
issue-641
issue-642
issue-818
issue-812
issue-733-clean
issue-804
issue-805
issue-803
issue-735-remove-director-consult
issue-797
issue-801
issue-795
issue-791
issue-790
issue-787
issue-780
issue-737-defer-signoz
issue-732
issue-737-signoz-deferred
issue-734
issue-736
issue-744
issue-769
issue-767
issue-760
issue-763
ward-salvage/ward-c6aa5da9
ward-salvage/ward-94dd7346
issue-729
ward-salvage/ward-58aa3fe3
issue-733
ward-salvage/ward-ff6c509f
ward-salvage/ward-e80f0460
issue-737
ward-salvage/ward-3e2e4760
issue-731
ward-salvage/ward-649addd7
ward-salvage/ward-890e4d29
ward-salvage/ward-645b750b
ward-salvage/ward-bf851a72
ward-salvage/ward-98c8652f
ward-salvage/ward-bb10b620
issue-724
ward-salvage/ward-1ee9be1c
ward-salvage/ward-d18595f6
issue-124
ward-salvage/ward-5f914692
ward-salvage/ward-6ca05cbd
ward-salvage/ward-14f676cf
ward-salvage/ward-de811c20
ward-salvage/ward-eba3e824
ward-salvage/ward-16eb4ad0
ward-salvage/ward-c58e9c43
ward-salvage/ward-7487270b
v0.769.0
v0.768.0
v0.767.0
v0.766.0
v0.765.0
v0.764.0
v0.763.0
v0.762.0
v0.761.0
v0.760.0
v0.759.0
v0.758.0
v0.757.0
v0.756.0
v0.755.0
v0.754.0
v0.753.0
v0.752.0
v0.751.0
v0.750.0
v0.749.0
v0.748.0
v0.747.0
v0.746.0
v0.745.0
v0.744.0
v0.743.0
v0.742.0
v0.741.0
v0.740.0
v0.739.0
v0.738.0
v0.737.0
v0.736.0
v0.735.0
v0.734.0
v0.733.0
v0.732.0
v0.731.0
v0.730.0
v0.729.0
v0.728.0
v0.727.0
v0.726.0
v0.725.0
v0.724.0
v0.723.0
v0.722.0
v0.721.0
v0.720.0
v0.719.0
v0.718.0
v0.717.0
v0.716.0
v0.715.0
v0.714.0
v0.713.0
v0.712.0
v0.711.0
v0.710.0
v0.709.0
v0.708.0
v0.707.0
v0.706.0
v0.705.0
v0.704.0
v0.703.0
v0.702.0
v0.701.0
v0.700.0
v0.699.0
v0.698.0
v0.697.0
v0.696.0
v0.695.0
v0.694.0
v0.693.0
v0.692.0
v0.691.0
v0.690.0
v0.689.0
v0.688.0
v0.687.0
v0.686.0
v0.685.0
v0.684.0
v0.683.0
v0.682.0
v0.681.0
v0.680.0
v0.679.0
v0.678.0
v0.677.0
v0.676.0
v0.675.0
v0.674.0
v0.673.0
v0.672.0
v0.671.0
v0.670.0
v0.669.0
v0.668.0
v0.667.0
v0.666.0
v0.665.0
v0.664.0
v0.663.0
v0.662.0
v0.661.0
v0.660.0
v0.659.0
v0.658.0
v0.657.0
v0.656.0
v0.655.0
v0.654.0
v0.653.0
v0.652.0
v0.651.0
v0.650.0
v0.649.0
v0.648.0
v0.647.0
v0.646.0
v0.645.0
v0.644.0
v0.643.0
v0.642.0
v0.641.0
v0.640.0
v0.639.0
v0.638.0
v0.637.0
v0.636.0
v0.635.0
v0.634.0
v0.633.0
v0.632.0
v0.631.0
v0.630.0
v0.629.0
v0.628.0
v0.627.0
v0.626.0
v0.625.0
v0.624.0
v0.623.0
v0.622.0
v0.621.0
v0.620.0
v0.619.0
v0.618.0
v0.617.0
v0.616.0
v0.615.0
v0.614.0
v0.613.0
v0.612.0
v0.611.0
v0.610.0
v0.609.0
v0.608.0
v0.607.0
v0.606.0
v0.605.0
v0.604.0
v0.603.0
v0.602.0
v0.601.0
v0.600.0
v0.599.0
v0.598.0
v0.597.0
v0.596.0
v0.595.0
v0.594.0
v0.593.0
v0.592.0
v0.591.0
v0.590.0
v0.589.0
v0.588.0
v0.587.0
v0.586.0
v0.585.0
v0.584.0
v0.583.0
v0.582.0
v0.581.0
v0.580.0
v0.579.0
v0.578.0
v0.577.0
v0.576.0
v0.575.0
v0.574.0
v0.573.0
v0.572.0
v0.571.0
v0.570.0
v0.569.0
v0.568.0
v0.567.0
v0.566.0
v0.565.0
v0.564.0
v0.563.0
v0.562.0
v0.561.0
v0.560.0
v0.559.0
v0.558.0
v0.557.0
v0.556.0
v0.555.0
v0.554.0
v0.553.0
v0.552.0
v0.551.0
v0.550.0
v0.549.0
v0.548.0
v0.547.0
v0.546.0
v0.545.0
v0.544.0
v0.543.0
v0.542.0
v0.541.0
v0.540.0
v0.539.0
v0.538.0
v0.537.0
v0.536.0
v0.535.0
v0.534.0
v0.533.0
v0.532.0
v0.531.0
v0.530.0
v0.529.0
v0.528.0
v0.527.0
v0.526.0
v0.525.0
v0.524.0
v0.523.0
v0.522.0
v0.521.0
v0.520.0
v0.519.0
v0.518.0
v0.517.0
v0.516.0
v0.515.0
v0.514.0
v0.513.0
v0.512.0
v0.511.0
v0.510.0
v0.509.0
v0.508.0
v0.507.0
v0.506.0
v0.505.0
v0.504.0
v0.503.0
v0.502.0
v0.501.0
v0.500.0
v0.499.0
v0.498.0
v0.497.0
v0.496.0
v0.495.0
v0.494.0
v0.493.0
v0.492.0
v0.491.0
v0.490.0
v0.489.0
v0.488.0
v0.487.0
v0.486.0
v0.485.0
v0.484.0
v0.483.0
v0.482.0
v0.481.0
v0.480.0
v0.479.0
v0.478.0
v0.477.0
v0.476.0
v0.475.0
v0.474.0
v0.473.0
v0.472.0
v0.471.0
v0.470.0
v0.469.0
v0.468.0
v0.467.0
v0.466.0
v0.465.0
v0.464.0
v0.463.0
v0.462.0
v0.461.0
v0.460.0
v0.459.0
v0.458.0
v0.457.0
v0.456.0
v0.455.0
v0.454.0
v0.453.0
v0.452.0
v0.451.0
v0.450.0
v0.449.0
v0.448.0
v0.447.0
v0.446.0
v0.445.0
v0.444.0
v0.443.0
v0.442.0
v0.441.0
v0.440.0
v0.439.0
v0.438.0
v0.437.0
v0.436.0
v0.435.0
v0.434.0
v0.433.0
v0.432.0
v0.431.0
v0.430.0
v0.429.0
v0.428.0
v0.427.0
v0.426.0
v0.425.0
v0.424.0
v0.423.0
v0.422.0
v0.421.0
v0.420.0
v0.419.0
v0.418.0
v0.417.0
v0.416.0
v0.415.0
v0.414.0
v0.413.0
v0.412.0
v0.411.0
v0.410.0
v0.409.0
v0.408.0
v0.407.0
v0.406.0
v0.405.0
v0.404.0
v0.403.0
v0.402.0
v0.401.0
v0.400.0
v0.399.0
v0.398.0
v0.397.0
v0.396.0
v0.395.0
v0.394.0
v0.393.0
v0.392.0
v0.391.0
v0.390.0
v0.389.0
v0.388.0
v0.387.0
v0.386.0
v0.385.0
v0.384.0
v0.383.0
v0.382.0
v0.381.0
v0.380.0
v0.379.0
v0.378.0
v0.377.0
v0.376.0
v0.375.0
v0.374.0
v0.373.0
v0.372.0
v0.371.0
v0.370.0
v0.369.0
v0.368.0
v0.367.0
v0.366.0
v0.365.0
v0.364.0
v0.363.0
v0.362.0
v0.361.0
v0.360.0
v0.359.0
v0.358.0
v0.357.0
v0.356.0
v0.355.0
v0.354.0
v0.353.0
v0.352.0
v0.351.0
v0.350.0
v0.349.0
v0.348.0
v0.347.0
v0.346.0
v0.345.0
v0.344.0
v0.343.0
v0.342.0
v0.341.0
v0.340.0
v0.339.0
v0.338.0
v0.337.0
v0.336.0
v0.335.0
v0.334.0
v0.333.0
v0.332.0
v0.331.0
v0.330.0
v0.329.0
v0.328.0
v0.327.0
v0.326.0
v0.325.0
v0.324.0
v0.323.0
v0.322.0
v0.321.0
v0.320.0
v0.319.0
v0.318.0
v0.317.0
v0.316.0
v0.315.0
v0.314.0
v0.313.0
v0.312.0
v0.311.0
v0.310.0
v0.309.0
v0.308.0
v0.307.0
v0.306.0
v0.305.0
v0.304.0
v0.303.0
v0.302.0
v0.301.0
v0.300.0
v0.299.0
v0.298.0
v0.297.0
v0.296.0
v0.295.0
v0.294.0
v0.293.0
v0.292.0
v0.291.0
v0.290.0
v0.289.0
v0.288.0
v0.287.0
v0.286.0
v0.285.0
v0.284.0
v0.283.0
v0.282.0
v0.281.0
v0.280.0
v0.279.0
v0.278.0
v0.277.0
v0.276.0
v0.275.0
v0.274.0
v0.273.0
v0.272.0
v0.271.0
v0.270.0
v0.269.0
v0.268.0
v0.267.0
v0.266.0
v0.265.0
v0.264.0
v0.263.0
v0.262.0
v0.261.0
v0.260.0
v0.259.0
v0.258.0
v0.257.0
v0.256.0
v0.255.0
v0.254.0
v0.253.0
v0.252.0
v0.251.0
v0.250.0
v0.249.0
v0.248.0
v0.247.0
v0.246.0
v0.245.0
v0.244.0
v0.243.0
v0.242.0
v0.241.0
v0.240.0
v0.239.0
v0.238.0
v0.237.0
v0.236.0
v0.235.0
v0.234.0
v0.233.0
v0.232.0
v0.231.0
v0.230.0
v0.229.0
v0.228.0
v0.227.0
v0.226.0
v0.225.0
v0.224.0
v0.223.0
v0.222.0
v0.221.0
v0.220.0
v0.219.0
v0.218.0
v0.217.0
v0.216.0
v0.215.0
v0.214.0
v0.213.0
v0.212.0
v0.211.0
v0.210.0
v0.209.0
v0.208.0
v0.207.0
v0.206.0
v0.205.0
v0.204.0
v0.203.0
v0.202.0
v0.201.0
v0.200.0
v0.199.0
v0.198.0
v0.197.0
v0.196.0
v0.195.0
v0.194.0
v0.193.0
v0.192.0
v0.191.0
v0.190.0
v0.189.0
v0.188.0
v0.187.0
v0.186.0
v0.185.0
v0.184.0
v0.183.0
v0.182.0
v0.181.0
v0.180.0
v0.179.0
v0.178.0
v0.177.0
v0.176.0
v0.175.0
v0.174.0
v0.173.0
v0.172.0
v0.171.0
v0.170.0
v0.169.0
v0.168.0
v0.167.0
v0.166.0
v0.165.0
v0.164.0
v0.163.0
v0.162.0
v0.161.0
v0.160.0
v0.159.0
v0.158.0
v0.157.0
v0.156.0
v0.155.0
v0.154.0
v0.153.0
v0.152.0
v0.151.0
v0.150.0
v0.149.0
v0.148.0
v0.147.0
v0.146.0
v0.145.0
v0.144.0
v0.143.0
v0.142.0
v0.141.0
v0.140.0
v0.139.0
v0.138.0
v0.137.0
v0.136.0
v0.135.0
v0.134.0
v0.133.0
v0.132.0
v0.131.0
v0.130.0
v0.129.0
v0.128.0
v0.127.0
v0.126.0
v0.125.0
v0.124.0
v0.123.0
v0.122.0
v0.121.0
v0.120.0
v0.119.0
v0.118.0
v0.117.0
v0.116.0
v0.115.0
v0.114.0
v0.113.0
v0.112.0
v0.111.0
v0.110.0
v0.109.0
v0.108.0
v0.107.0
v0.106.0
v0.105.0
v0.104.0
v0.103.0
v0.102.0
v0.101.0
v0.100.0
v0.99.0
v0.98.0
v0.97.0
v0.96.0
v0.95.0
v0.94.0
v0.93.0
v0.92.0
v0.91.0
v0.90.0
v0.89.0
v0.88.0
v0.87.0
v0.86.0
v0.85.0
v0.84.0
v0.83.0
v0.82.0
v0.81.0
v0.80.0
v0.79.0
v0.78.0
v0.77.0
v0.76.0
v0.75.0
v0.74.0
v0.73.0
v0.72.0
v0.71.0
v0.70.0
v0.69.0
v0.68.0
v0.67.0
v0.66.0
v0.65.0
v0.64.0
v0.63.0
v0.62.0
v0.61.0
v0.60.0
v0.59.0
v0.58.0
v0.57.0
v0.56.0
v0.55.0
v0.54.0
v0.53.0
v0.52.0
v0.51.0
v0.50.0
v0.49.0
v0.48.0
v0.47.0
v0.46.0
v0.45.0
v0.44.0
v0.43.0
v0.42.0
v0.41.0
v0.40.0
v0.39.0
v0.38.0
v0.37.0
v0.36.0
v0.35.0
v0.34.0
v0.33.0
v0.32.0
v0.31.0
v0.30.0
v0.29.0
v0.28.0
v0.27.0
v0.26.0
v0.25.0
v0.24.0
v0.23.0
v0.22.0
v0.21.0
v0.20.0
v0.19.0
v0.18.0
v0.17.0
v0.16.0
v0.15.0
v0.14.0
v0.13.0
v0.12.0
v0.11.0
v0.10.0
v0.9.0
v0.8.0
v0.7.0
v0.6.0
v0.5.8
v0.5.7
v0.5.6
v0.5.5
v0.5.4
v0.5.3
v0.5.2
v0.5.1
v0.5.0
v0.4.0
v0.3.0
v0.2.2
v0.2.1
v0.2.0
v0.1.3
v0.1.2
v0.1.1
v0.1.0
v0.0.18
v0.0.17
v0.0.16
v0.0.15
v0.0.14
v0.0.13
v0.0.12
v0.0.11
v0.0.10
v0.0.9
v0.0.8
v0.0.7
v0.0.6
v0.0.5
v0.0.4
v0.0.3
v0.0.2
v0.0.1
Labels
Clear labels
burndown-2026-06
Backlog burndown June 2026
pressure-test
Cold-read release pressure-test findings and coordination
sunday-sprint
Burn-down by Sunday 2026-06-07
coherence-core
Core review set for the warded control plane coherence milestone. These issues form the release spine; adjacent milestone issues are stretch or supporting work.
consult
A human decision, design, or external action must happen first. Fail-closed default for unlabeled/low-confidence.
headless
Agent can take it from open issue to merged change with no human in the loop. The auto-burndown queue.
interactive
Agent does the work but pauses at a human checkpoint mid-flight (design choice, destructive step, human-only verification).
P0
now / blocking / urgent
P1
next / important
P2
backlog / will do
P3
someday / low
P4
icebox / frozen / reopen if it becomes real
No labels
burndown-2026-06
pressure-test
sunday-sprint
coherence-core
consult
headless
interactive
P0
P1
P2
P3
P4
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
coilyco-flight-deck/ward#219
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
ward agent talk- interactive, fleet-mounted sibling toward agent workMotivation
Detail-hunting across the fleet ("which repo has X", "what does that config default to") is a common need, but the only way to have that conversation today is to keep ~25 repos checked out across ~5 dev machines and grep locally. That idle-checkout state is the actual pain - not the bytes, the tracking and cross-machine drift.
ward agent workalready solved the hard part of the lifecycle (ephemeral container, fresh-clone-inside, warm gitcache, reap-on-teardown, canonical-clone-so-identical-everywhere). What's missing is an interactive, read-leaning, multi-repo entry point that reuses that machinery so no repo has to idle in a workspace.Shape
ward agent talk- interactive sibling towork:--all-repos(the common case is hunting across the fleet, not deep in one repo).--depth 1, no history) all enumerated repos into the existing warm gitcache volume, parallel fetch-refresh on start./repos/<org>/<name>.reap: read-leaning by default, so a dirty tree is the exception - land if clean, else salvage branch + filed issue.The one piece of new engineering: cardinality
ward containeris architecturally one repo per container (fresh-clone the single target inside).talk --all-reposneeds N trees in one container. This is not new cloning logic - the warm gitcache already holds per-repo clones - it is a new layout step: lay down N trees from cache into/repos/<org>/<name>.Open decision: where that layout step lives.
container upwith a multi-repo flag (e.g.--repos <list>) - reusable,workcould benefit later,talkstays a thin seed-and-attach wrapper. Leaning this way.talk-only path that calls the cache layer directly - narrower, nocontainer upsurface change.Reused / already settled
reap(land-if-clean, else salvage branch + issue). Exists.container execinto the running container. Exists.Parked
coilyco-flight-deck/repo-recallis a plausible future substrate for the cross-repo-search half (its name is the exact use case). Not pulling it in yet - evaluate later whethertalkshould ride repo-recall's corpus instead of fresh shallow clones. Captured here so the idea does not evaporate.Acceptance sketch
ward agent talkdrops into an interactive session with all canonical fleet repos shallow-mounted, no host workspace touched.ward agent talk <repo>narrows to a single repo.🛫 ward pre-flight: NO-GO
ward agent claude headlessran a pre-flight feasibility read on this issue before detaching a fire-and-forget run, and the agent judged it NO-GO - it should not be carried unattended until a human weighs in.No container was launched. Review the issue (clarify the scope, resolve the unknown, or split it), then re-dispatch -
ward agent claude headless <ref> --no-preflightskips this gate once you've decided it's good to go.full pre-flight read
This is a substantial new feature spanning fleet enumeration, parallel shallow clones into the warm gitcache, a new multi-repo container layout step, and an interactive attach surface - and it carries an unresolved architectural fork (extend
container up --reposvs atalk-only cache path) that the author only marks as "leaning," not decided. The harder unattended risk is verification:talkis fundamentally interactive (drop into a live session with N trees mounted), so confirming it actually works end-to-end is exactly the kind of thing a fire-and-forget container can't exercise - I'd be landing a feature whose acceptance criteria ("drops into an interactive session") can't be self-tested. The cardinality work also reaches intocontainer up, a load-bearing primitive thatworkdepends on, so a wrong layout choice is costly to back out after merging to main. The design lean is real but soft, and the interactive surface plus shared-primitive blast radius is more than I'd commit to main with no human in the loop.NO-GO: unresolved container-layout architecture fork (only "leaning"), an interactive verb whose acceptance can't be self-verified in a detached container, and changes reaching into the shared
container upprimitive thatworkdepends on.Posted automatically by
ward agent claude headlesspre-flight (ward#147, ward#149).— Claude (she/her), via
ward agentRe-triage (goose-triage method, claude-macos-kais-macbook-pro-2 as the judgment engine, 2026-06-24)
Re-triage (goose-triage method, claude-macos-kais-macbook-pro-2 as the judgment engine, 2026-06-24)
Flipped headless: ward agent talk is well-specified in the body (interactive, fleet-mounted, read-leaning sibling of work); implement as specced. Recorded by Claude Code (Fable) during the 2026-07-01 ward launch triage session with Kai.
🔎 ward agent advisor
ward agent advisor --driver clauderan a one-shot standard research pass on this question:Implementation spec:
ward agent talk(ward#219)This is a plan to verify, not a landed design. It is written from a shallow read of
cmd/ward/agent.go,agent_advisor.go,agent_director.go,agent_route.go,container_compute.go, the entrypoint, anddocs/agent-*.md/docs/container-*.md. The single biggest finding reshapes the issue's own framing, so read the What already exists section first.1. What already exists (the reuse map)
The issue treats multi-repo-into-one-container as "the one piece of new engineering." It is mostly already built. Three subsystems land almost the whole feature.
ward containerrun already lays down N repos from the warmward-gitcacheinto one container.preclone-repos.txtis a fixed manifest of ~8 cross-cutting repos; the entrypoint warms each as a bare mirror (TTL-gated fetch,flock-serialised,WARD_SUBSTRATE_TTLdefault 600s) and drops a working copy under/substrate/<name>(container_compute.gocontainerSubstrateDest,parseSubstrateManifest;docs/container-substrate.md). This is the "lay down N trees from cache" step the issue asks for. It exists, it isflock-safe, it hydrates image-tier repos from a baked seed with no network. talk needs a bigger, dispatch-computed manifest, not a new layout engine.cl.listOwnerRepos(ctx, owner)already enumerates an org's repos from canonical Forgejo, used by the director (expandOrgScopesinagent_director.go) and the engineer route survey (surveyRepoCataloginagent_route.go).--all-reposis the union oflistOwnerReposacrossr.primaryOrgs(), de-duped with the existingmergeScopeRepos. The "enumerate from canonical Forgejo, never the local checkout" requirement falls out of code that already ships. Nothing new.claude <seed>session inside a fresh ephemeral container, seeded byinteractivePrompt, read-only, with a--oneshot/ no-TTY fallback toclaude -p(agent_advisor.go:110,container_compute.go:563WARD_ASK). talk's "interactive attach" is this exact path.So talk is not new machinery. It is advisor-freeform-interactive, with the substrate manifest swapped for the enumerated fleet and mounted as the primary read surface.
2. Roster placement - the one genuine fork
Roles today are
engineer | director | advisor(docs/agent.md,agentCommand()inagent.go). The roster was deliberately pruned - ward#353 foldedarchitect/explore/sandboxaway into the director surface. Adding a fourth noun to a curated roster is a real decision, so name it explicitly rather than defaulting.Two shapes, and the codebase pulls toward the first:
talk, implemented as a specialization of the advisor interactive path.agentTalkCommand()besideagentAdvisorCommand(), reusinginteractivePrompt(retitled/re-seeded) and the advisor container plan, differing in:--all-reposdefault, a fleet manifest,/reposmount, and a cross-fleet-search seed. Recommended, because talk's default shape (read across the whole fleet, no single context repo) is genuinely distinct from advisor (one context repo, answer-this-question), and burying it as a flag hides a headline capability behindadvisor --all-repos --interactive.warded advisor --all-reposin interactive mode. Smaller surface, no new roster noun, but it overloads advisor's "one context repo" mental model and makes the fleet-hunt use case undiscoverable.Recommendation: (A), a new role that is a thin wrapper over advisor's interactive internals - the same relationship
engineerfreeform has to its seeded-container path. This is the one spot where Kai should confirm the roster grows before code lands.3. Container lifecycle: reuse vs differs
ward agent work/engineerward agent talkflock--oneshot/no-TTY falls back toclaude -p/workspace/<repo>(+--repogrants), read-only substrate under/substrate/repos/<org>/<name>, read-leaningagentSeedPrompt)origin, pushes tomainWARD_READONLY=1, no-push origin) - see §6runPreflight)Everything above the attach/seed/push rows is untouched reuse.
4. The cardinality piece is a manifest change, not a clone change
The issue's open decision - "extend
container up --repos" vs "talk-only path" - is moot on two counts. First,ward container upwas retired (ward#263); there is nocontainer upsurface to extend. Second, the N-tree layout engine already exists as the substrate warm-loop. So the actual seam is narrower and better:Generalize the substrate manifest from a fixed embedded file to a dispatch-computed one. Concretely:
listOwnerReposacrossprimaryOrgs()), builds an in-memory manifest in the sameowner/name tierformatparseSubstrateManifestalready reads (tier derives from org:coilyco-flight-deck/coilysiren->image,coilyco-bridge->cache, matching the existing public/private split).WARD_SUBSTRATE_MANIFEST-shaped path or an inline env), and pointWARD_SUBSTRATE_DEST(or a parallel var) at/repos, laid out/repos/<org>/<name>as the issue specifies.flock, and baked-seed hydration all work unchanged. "Second run is fast (warm cache)" is free - it is the same gitcache the substrate loop already reuses.This is reusable in exactly the way the issue wanted
--reposto be (a futureworkcould take a computed manifest too), without reviving a retired verb.5.
--all-reposfleet-mount mechanics--all-repos. With no repo arg, talk mounts the whole enumerated fleet.ward agent talk <repo>narrows to a single tree (still under/repos/<org>/<name>for a uniform seed).listOwnerReposper primary org, unioned viamergeScopeRepos. Same-answer-on-every-machine falls out because the source is canonical Forgejo, never the cwd. Depth-1 shallow is the natural default (the issue asks for no history); note that the substrate loop mirrors full today, so confirm whether a shallow-mirror path exists or must be added - this is a real sub-task, not free.talkPrompt(...)in the advisor family: read-only, conversational, and explicitly oriented to search across/repos/<org>/<name>("you have the whole fleet mounted read-only; grep and read across trees to answer detail-hunting questions; you are not carrying anything to merge"). Model it oninteractivePromptplus the surface-session read-only block (ward#293).log()the count and cold-vs-warm state so a slow first run reads as expected, not hung.WARD_SUBSTRATE_SKIP-style escape should still work per the existing loop.6. Teardown / reap - the real tension, and the codebase-consistent answer
The issue says "land if clean, else salvage branch + filed issue." That reuses the reaper's single-target contract (
$WARD_REAP_WORK, onecloses #N), but talk has N trees and no canonical target issue. "Land if clean" across N repos reintroduces exactly the cross-repo push failure mode the codebase already warns against (grantedRepoDoneClause, ward#291: a secondary push silently rejected while the primary succeeds).The established, safer pattern is the director read-only surface (
docs/agent-surface.md):WARD_READONLY=1short-circuits the reaper's push,originpush URL is stripped tono-push://, apre-pushhook walls it, and crucially the doctrine (ward#374) says prefer a sibling dispatch over in-session writes - delegable edits go out aswarded engineer #Nagainst the one specific repo, which lands a durable artifact and sidesteps the N-tree push problem entirely.Recommendation: talk adopts the read-only surface posture, not the land-if-clean engineer posture. Trees mount read-only; a change talk wants made gets dispatched as an engineer run against that repo (talk is interactive, so a human is present to approve). Teardown then reduces to the surface session's existing behavior: reaper short-circuits, nothing pushes, container reaped on exit, only the shared gitcache persists. This satisfies every acceptance bullet ("exit leaves no idle checkout") without inventing N-target reap semantics. The issue's original "land if clean" is the alternative to weigh, but it is the more failure-prone path and contradicts the read-leaning goal.
7. Phased breakdown
listOwnerReposacrossprimaryOrgs()and emits aparseSubstrateManifest-compatible manifest (tier by org). Unit-test the org->tier mapping and de-dup. No container work yet. Unblocks everything below./reposdest. Let the container plan accept a computed manifest and an alternate dest, mounted/repos/<org>/<name>. Verify the entrypoint warm-loop, TTL,flock, and baked-seed hydration work against the computed set. Add a shallow-mirror path if one does not already exist. Depends on phase 1.talkrole.agentTalkCommand()+talkPrompt(), reusing the advisor interactive container plan (WARD_ASK/claude -pfallback preserved),--all-reposdefault, single-repo narrowing,--print. Wire intoagentCommand().Commandsand the roster generator (agent_roster.go). Depends on phases 1-2.WARD_READONLY=1+ no-push origin for talk, confirm the reaper short-circuits with N trees, seed the dispatch-a-sibling-for-writes doctrine. Depends on phase 3.docs/agent-talk.md, roster/agent.md/agent-subcommands.mdupdates,docs/FEATURES.mdentry (house rule: same commit as the feature).8. Bottom line
talk is ~80% assembly of shipped parts: substrate warm-loop (N-tree layout),
listOwnerRepos(canonical enumeration), advisor interactive path (attach + read-only + reaper), director surface posture (read-only teardown). The genuinely new code is (a) fleet-enumeration-to-manifest, (b) making the substrate manifest dispatch-computed with a/reposdest, and possibly (c) a shallow-mirror path. The issue's stated "one piece of new engineering" (cardinality) is smaller than framed, and its two open options are both superseded by the substrate seam.Two decisions for Kai before code lands: (1) roster grows by one noun (
talk) vs a flag on advisor - recommend the new role; (2) teardown is read-only-surface + dispatch-for-writes vs land-if-clean-per-tree - recommend read-only-surface.To verify against live code before building: that
listOwnerReposunions cleanly across all primary orgs with the right visibility, that the substrate entrypoint loop can be repointed at a computed manifest and/reposwithout disturbing the existing/substratewarm, whether a depth-1 shallow-mirror path already exists or must be added, and thatWARD_READONLYshort-circuits the reaper with no singleWARD_REAP_WORKtarget set.Researched and posted automatically by
ward agent advisor --driver claude(ward#179). This is one-shot research, not a carried change - verify before acting on it.— Claude (she/her), via
ward agent🔒 Reserved by
ward agent --driver claude— containerengineer-claude-ward-219on hostKAI-DESKTOP-TOWERis carrying this issue (reserved 2026-07-06T18:12:08Z). Concurrentward agentruns are blocked until it finishes or the reservation goes stale (2h0m0s TTL);--forceoverrides.Do not comment on or edit this issue to steer the run while it is reserved. The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a new issue, dispatched fresh — that is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494).
run seed context — what this run is carrying (ward#609)
coilyco-flight-deck/ward#219· branchissue-219· driverclaude· workflowdirect-mainengineer-claude-ward-219· wardv0.414.0· dispatched2026-07-06T18:12:08ZIssue body as seeded:
… (truncated to 2000 chars; full body is on this issue)
Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.414.0).
— Claude (she/her), via
ward agentThis idea has been wrapped into "advisor"
Closing: superseded. 'ward agent talk' has been folded into the advisor role - per Kai's 2026-07-06 comment and the advisor design pass on this issue, talk is ~80% the existing advisor freeform-interactive path. NOTE: this issue still shows engineer reservations (18:12 and 18:37) - if a container is still carrying it on the host, stop it (docker container stop engineer-claude-ward-219); it should not land. Re-triage 2026-07-06.