Subsystem Search

Part 2 of 6 Working through your agent

A question that waits for you

By the end of this chapter your agent has hit something only you can settle, has said so and carried on with other work rather than guessing, and the answer you gave once is sitting on the item for a session that has not started yet.

This is the behaviour that most changes what it is like to work with an agent. The alternative is an agent that guesses and is confidently wrong, or one that stops dead until somebody who is not at the keyboard comes back. Both are worse, and without somewhere to put a question both are what you get.

The work so far

The website rebuild as Decisions, findings and dead ends left it: the navigation broken into pieces, and three documents governing them.

$ uv tool install subroutine
Resolved … packages in …
Prepared … packages in …
Installed … packages in …
…
Installed 2 executables: subr, subroutine
$ subroutine init
Ready. Try: subroutine add "something to do"
$ subroutine project create web "Website rebuild"
Created web - Website rebuild
…
$ subroutine agent create claude --profile worker --project web --store
Created service account claude, with the contributor role.

  sr_…
…
$ subroutine add "Write the copy for the home page +web"
Added: Write the copy for the home page  (read +web)
…
$ subroutine add "Choose a typeface for the headings by Tuesday +web"
Added: Choose a typeface for the headings  (due Tue 6 Oct)  (read +web)
…
$ subroutine add "Agree the new navigation +web"
Added: Agree the new navigation  (read +web)
…
$ subroutine add "Build the new navigation +web ~1d"
Added: Build the new navigation  (read +web ~1d)
…
$ subroutine add 'Audit the third-party scripts +web !3/2'
Added: Audit the third-party scripts  (read +web !3/2)
…
$ subroutine link 3 blocks 4
Blocks: Build the new navigation
…
$ subroutine done 3
Done: Agree the new navigation
…
$ subroutine document create "Navigation stays one level deep" --type decision --project web --body "One level, and the four second-level links go in the footer."
Wrote: Navigation stays one level deep
…
$ subroutine link 6 documents 4
Documents: Build the new navigation
…
$ subroutine document create "Do not generate the navigation from the sitemap" --type dead_end --project web --body "It goes stale the moment a page moves, and the build cannot tell."
Wrote: Do not generate the navigation from the sitemap
…
$ subroutine link 7 documents 4
Documents: Build the new navigation
…
$ subroutine document create "The analytics tag loads the consent banner a second time" --type finding --project web --body "Both are injected by the tag manager."
Wrote: The analytics tag loads the consent banner a second time
…
$ subroutine link 8 documents 5
Documents: Audit the third-party scripts
…
$ subroutine add "Write the dropdown markup +web" --under 4
Added: Write the dropdown markup  (read +web)
…
$ subroutine add "Check the navigation on a phone +web" --under 4
Added: Check the navigation on a phone  (read +web)
…
$ subroutine document create "The dropdown opens on click, not on hover" --type decision --project web --body "Hover has no equivalent on a touchscreen."
Wrote: The dropdown opens on click, not on hover
…
$ subroutine link 11 documents 9
Documents: Write the dropdown markup
…
{
  "mcpServers": {
    "subroutine": {
      "command": "subroutine",
      "args": ["mcp"]
    }
  }
}

Something only you can settle

Your agent picks up the dropdown markup and gets one paragraph in before it meets a question that is not a coding question. Whether the navigation has to work with JavaScript turned off is a decision about the product, and about who the site is for. Nobody should want an agent to settle that on its own.

So it writes the question down, says who it is for, and says what it is holding up:

subroutine_add(text="Must the dropdown work without JavaScript? +web @laurence", type="question")
Added #12  question  @laurence  Must the dropdown work without JavaScript?  (read +web @laurence)
subroutine_link(ref=12, type="blocks", other=9)
#12 Blocks #9  Write the dropdown markup

@laurence in the sentence is the whole of the assignment, as +web is the whole of the filing. And blocks is the same relation the last two chapters used for work waiting on work. A question is work: somebody has to do it, and until they do, something else cannot start.

It moves on

The agent asks what it can start now, and gets a different answer than it would have a minute ago:

subroutine_list(ready=true)
#12  question  blocker  @laurence  Must the dropdown work without JavaScript?
#10  task  Check the navigation on a phone
#5  task  !3/2  Audit the third-party scripts
#2  task  due 2026-10-06  Choose a typeface for the headings
#1  task  Write the copy for the home page

The dropdown markup is not in that list. It asked a question about it thirty seconds ago and has already stopped being offered it, because it is blocked by something unfinished, and ready leaves those out. The agent does not have to remember that it is waiting, and neither do you.

The question is at the top of the list instead, marked blocker, with your name on it. The thing holding the work up has become the most startable thing there is, which is the correct answer to what should happen next and is not one anybody had to arrange.

Meanwhile there is plenty left, so the agent takes the phone check and carries on.

It reaches you

You are not in that session and did not see any of it. You look at your own list:

$ subroutine agenda
…
   #9  Task      blocked        ^4                 Write the dropdown markup
      waiting on #12  @laurence
  #10  Task                     ^4                 Check the navigation on a phone
  #12  Question  blocker                @laurence  Must the dropdown work without JavaScript?
…

Two lines say it. The work is blocked, and underneath it waiting on #12 @laurence, which names both the question and the person who owes the answer. That second line is the one worth knowing about: work stalled on somebody is the thing that goes unnoticed longest, and here it says so on the face of the item.

The same two lines are on the agenda in the browser you left running in Watch it happen, which is where most people will actually meet them. Answering there instead, without a terminal at all, is what the browser part of this guide is for.

You answer once

$ subroutine comment 12 "No. Progressive enhancement everywhere else on the site, but the navigation is the one place we already require JavaScript."
Noted on: Must the dropdown work without JavaScript?
…
$ subroutine done 12
Done: Must the dropdown work without JavaScript?
…

That is the whole of your part: one sentence, and the question ticked off. You did not have to find the agent that asked, and it did not have to still exist.

And it is waiting for whoever comes next

A session later, or a month later, something picks the work up again. It may not be the agent that asked. It asks the same question it always asks:

subroutine_list(ready=true)
#10  task  Check the navigation on a phone
#9  task  Write the dropdown markup
#5  task  !3/2  Audit the third-party scripts
#2  task  due 2026-10-06  Choose a typeface for the headings
#1  task  Write the copy for the home page

The dropdown markup is back, without anybody unblocking it. You finished the question; the thing it was holding up became startable again; and the list said so to the next thing that asked.

subroutine_show(ref=9)
#9  task  Write the dropdown markup
open  +web
version 1
part of #4  Build the new navigation

Read first (3)
#11  decision  The dropdown opens on click, not on hover
#7  dead_end  Do not generate the navigation from the sitemap  from #4
#6  decision  Navigation stays one level deep  from #4

1 of 1 blockers done
Documented by  #11  The dropdown opens on click, not on hover
Blocked by  #12  Must the dropdown work without JavaScript?  (over)

1 of 1 blockers done and (over) are the difference between this was never blocked and this was blocked, and here is what by. The second is worth reading, so it is still there:

subroutine_show(ref=12)
#12  question  done  blocker  @laurence  Must the dropdown work without JavaScript?
done 2026-10-05  assigned by @claude  +web
version 2

Blocks  #9  Write the dropdown markup

2026-10-05  @laurence  No. Progressive enhancement everywhere else on the site, but the navigation is the one place we already require JavaScript.

assigned by @claude is the part to notice. The record says an agent decided this was yours to answer, you answered it, and both of those are attributed. Nobody has to take anybody's word for how the decision got made.

The answer is a sentence, written once, sitting where the work is. Every agent that touches the dropdown from now on reads it without being told it exists, and none of them asks you again.

So far every agent here has been the same one. The next chapter gives a second project its own, and has the two of them hand work to each other.