Watch
2
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
release
docs/readme-agents-surface
fix/pr-repair-verb-lookup
aos/claude/aw85-docs-bands
aos/claude/aw85-declare-band
aos/claude/bk79-autonomy-label-scope
fix/gofmt-runner
chore/umbra-rename
aos/claude/mg96-fm
claude/agents-temp-clone-note
aos/claude/qa57
remove-format-exec-gate-refusal
fix/ward-1649-ci-fixture
fix/detached-ci-exec
issue-1626-generic-agent-broker
issue-1177
issue-1160
issue-1501
ward-salvage/ward-12486bc7
ward-salvage/ward-babfa2ba
ward-salvage/ward-a832df03
ward-salvage/ward-85c795b2
ward-salvage/ward-b87f8859
issue-1484
ward-salvage/ward-86b72dcf
ward-salvage/ward-b7b26d1d
recovery/2026-07-28-triaged-branch-archive
recovery/2026-07-27-local-work
issue-1584
issue-1571
issue-1524
ward-salvage/ward-3800c2d1
ward-salvage/ward-70175da3
ward-salvage/ward-bcbfef78
issue-1298
issue-737-signoz-deferred
ward-salvage/ward-c6aa5da9
ward-salvage/ward-94dd7346
ward-salvage/ward-58aa3fe3
ward-salvage/ward-ff6c509f
ward-salvage/ward-e80f0460
ward-salvage/ward-3e2e4760
ward-salvage/ward-649addd7
ward-salvage/ward-890e4d29
ward-salvage/ward-645b750b
ward-salvage/ward-bf851a72
ward-salvage/ward-98c8652f
ward-salvage/ward-bb10b620
ward-salvage/ward-1ee9be1c
ward-salvage/ward-d18595f6
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.890.0
v0.889.0
v0.888.0
v0.887.0
v0.886.0
v0.885.0
v0.884.0
v0.883.0
v0.882.0
v0.881.0
v0.880.0
v0.879.0
v0.878.0
v0.877.0
v0.876.0
v0.875.0
v0.874.0
v0.873.0
v0.872.0
v0.871.0
v0.870.0
v0.869.0
v0.868.0
v0.867.0
v0.866.0
v0.865.0
v0.864.0
v0.863.0
v0.862.0
v0.861.0
v0.860.0
v0.859.0
v0.858.0
v0.857.0
v0.856.0
v0.855.0
v0.854.0
v0.853.0
v0.852.0
v0.851.0
v0.850.0
v0.849.0
v0.848.0
v0.847.0
v0.846.0
v0.845.0
v0.844.0
v0.843.0
v0.842.0
v0.841.0
v0.840.0
v0.839.0
v0.838.0
v0.837.0
v0.836.0
v0.835.0
v0.834.0
v0.833.0
v0.832.0
v0.830.0
v0.831.0
v0.829.0
v0.828.0
v0.827.0
v0.826.0
v0.825.0
v0.824.0
v0.823.0
v0.822.0
v0.821.0
v0.820.0
v0.819.0
v0.818.0
v0.817.0
v0.816.0
v0.815.0
v0.814.0
v0.813.0
v0.812.0
v0.811.0
v0.810.0
v0.809.0
v0.808.0
v0.807.0
v0.806.0
v0.805.0
v0.804.0
v0.803.0
v0.802.0
v0.801.0
v0.800.0
v0.799.0
v0.798.0
v0.797.0
v0.796.0
v0.795.0
v0.794.0
v0.793.0
v0.792.0
v0.791.0
v0.790.0
v0.789.0
v0.788.0
v0.787.0
v0.786.0
v0.785.0
v0.784.0
v0.783.0
v0.782.0
v0.781.0
v0.780.0
v0.779.0
v0.778.0
v0.777.0
v0.775.0-tmp
v0.776.0
v0.775.0
v0.774.0
v0.773.0
v0.772.0
v0.771.0
v0.770.0
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
autonomy
async-consult
A human needs to consult on the issue to upgrade it to headless
autonomy
epic
This issue has many units of sub work - its size makes it meaningfully exclusive with other autonomy types
autonomy
headless
The agent can perform the work on its own
autonomy
live-collab
The agent and the human need to work together in realtime
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.
priority
P0
priority tier
priority
P1
priority tier
priority
P2
priority tier
priority
P3
priority tier
priority
P4
priority tier
qa-fixture
Disposable issue admitted to the bounded Ward QA verification lane.
role/advocate
requires work from the Developer Advocate seat
role/director
requires work from the Portfolio Director seat
role/exec
requires work from the exec role
role/frontend
requires work from the Frontend Engineer seat
role/gamedev
requires work from the Game Developer seat
role/human
requires a person, and specifically not an agent seat
role/platform
requires work from the Platform Engineer seat
role/qa
requires work from the QA role
role/science
requires work from the Applied Scientist seat
role/sysadmin
requires work from the Systems Administrator seat
state
ambient
ambient and ephemeral work, held as a maintained document rather than a queue
No labels
burndown-2026-06
pressure-test
sunday-sprint
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/advocate
role/director
role/exec
role/frontend
role/gamedev
role/human
role/platform
role/qa
role/science
role/sysadmin
state
ambient
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
2 participants
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…
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.