Skip to content

v1.42.0 ·

Nobody is watching

Every skill assumed a person was there. Two unattended dry runs of a roadmap item on 2026-10-02 each logged 13 places where a skill said to ask, wait, present a menu or get approval. Without a rule for each, an unattended agent either stalls or invents its own answer and leaves no record. One of the 13 was a plain bug. The worktree promote flow left the roadmap item unlinked from its instance, with promoted_to unset and the item not moved, because that step was prose an agent could skip.

What changed

Set AIDLC_UNATTENDED=1 and an agent follows one new rule. For each place a skill would stop and ask, the rule says either take this default and write down that you did, or stop, park the item, and end. Stopping covers what nobody should decide alone: anything against the project's constitution, deleting someone else's data, touching credentials or permissions, and doing more than the roadmap item asked for.

Every default the agent takes goes in one file per piece of work, so a person can review a whole unattended run in minutes. The normal end is finishing the tests. The agent writes the release plan and stops, and whatever started it does the release. The list of 13 places came from the two practice runs, which found the same stops on two machines.

Two steps that agents had been seen getting wrong are now commands. aidlc start --roadmap-item links the item, moves it to in-progress and copies it in, all at once. aidlc roadmap park moves an item to hold with a reason, which is how an unattended run stops. The clean-up that removes records of finished worktrees now names each one it removes.

Why this way

I made unattended a rule the agent reads, not a switch the tool reads. A switch means a new branch in every command, a cost every future change pays. A rule costs nothing until the mode is on, so the tool behaves the same with the setting on or off. Only two steps became commands.

When the safe answer is not obvious, I did not let the agent pick the least bad option. Every stop found in practice has exactly one written outcome, and anything not on the list is a stop, never a guess. A test reads the stops from the practice runs and fails if any has no outcome or two.

On where a run ends: parking the item at release time would have put every successful item on hold. Letting the agent release would have put two actors on one release lane, which is how two releases collided the day before. So finishing the tests is its own outcome.