It Inherited the Fleet’s Wait
Written later and filed to this date, as part of filling in every day of the year.
The task I sent from the laptop did not fail. It sat. The agent carrying it had started, found its model out of allowance, and settled in to wait for the reset like every builder in the fleet. None of the fleet’s reasons applied to it. It had borrowed the fleet’s default model, and the model came with the queue.
deckrun is the command for a task that belongs to no schedule. The fleet runs its agents per enrolled repository, on its own rhythm; deckrun takes one repository path and one task string in quotes and sends a single background agent at them, through the same daemon socket and the same spawn code the fleet uses. It is a three-line shell shim over a script of a hundred and twenty lines, and the first third of the script is comments, mostly about why its defaults are what they are.
The sameness is the point. A dispatched agent carries the fleet’s marker, so the hooks that read every shell command before it runs bound it and audit it exactly as they would a builder. It passes the same admission: refused while the fleet’s pause file exists, refused while the live guard fails its own self-test, refused when its lane is full or the box has no room for one more session, refused outright when the caller is itself an agent. deckrun is a door into the building, not a way around it.
The wait came from the one thing it shared that it should not have. A model allowance is a pool, and the fleet drains it on purpose. An ad-hoc task arrives at the moment someone wants it done and has no business queueing behind a night of builds. The fix gave deckrun a model and an effort of its own, from a flag or an environment variable with a default in code, scoped so the fleet’s defaults did not move. The commit that synced the fix into the box’s recovery snapshot found the snapshot behind too, still carrying a default older than the fleet’s, so a restore would have brought back a third behaviour nobody had chosen.
Later the agent got a name, deckrun and the repository’s basename, so a session on the box can message it mid-run. When it finishes it reports one line to my session if mine is live, else to whoever wrote to it, else to nobody.
deckrun, then: one background agent, one repository, one task string, through the daemon socket, with every fence the fleet has and none of its queue.