███╗   ███╗ ██╗   ██╗  ██████╗ ███████╗ ██╗
████╗ ████║ ╚██╗ ██╔╝ ██╔════╝ ██╔════╝ ██║
██╔████╔██║  ╚████╔╝  ██║      █████╗   ██║
██║╚██╔╝██║   ╚██╔╝   ██║      ██╔══╝   ██║
██║ ╚═╝ ██║    ██║    ╚██████╗ ███████╗ ███████╗
╚═╝     ╚═╝    ╚═╝     ╚═════╝ ╚══════╝ ╚══════╝
DemoAcademyPricing
Sign inBook a meeting

Building the harness · August 18, 2026 · 7 min

The work needs something only the client has

Bookkeeping needs the bank statement. A hire needs the role brief. Most agent demos quietly assume the input is already there, and every real engagement stalls on the moment it is not. Refusing well is a product feature, and it has a shape.

By Islam Hachimi, Founder

No bookkeeper on earth can close your month without your bank statement. That is not a limitation of bookkeepers. It is what the job is.

Almost every AI demo skips past this. The information is already there, neatly, at the start. Real work is not like that — and the moment it is not is where most of these systems quietly fall apart.

Work asking for something, the client sending it, the next round using it
Asking well is a feature. And both ends have to be connected — a place to upload that nothing reads is the same as no place to upload.

Three options, one right answer

When work cannot continue without something only the client has:

  • Fail. Honest, and useless. The business owner gets a red error for something that is not their fault and is not broken.
  • Guess. What AI does by default, and the worst possible outcome in bookkeeping. A wrong entry gets discovered by an accountant in March and costs more to untangle than the month's work was worth.
  • Ask — in the client's words — and wait.

Asking properly is harder than it sounds

Here is a real thing our system once said when it could not continue:

"The case does not contain a role brief or a connected candidate-source ID."

Technically that is a question. It is also completely unanswerable, because those are our words. The client does not have a "case." They have never heard of a "candidate-source ID."

What they have is a job description sitting in a folder somewhere.

"A connected candidate-source ID" is unanswerable. "The job description for this role" gets answered in a minute.

So asking in the customer's own language is not politeness. It is the difference between work that unblocks and work that sits there.

Two rules that stop it becoming nagging

Ask about the rule, not the thing

What makes people hate bookkeeping software is being asked the same question every month.

"How should I file this $48 to Acme Supplies?" gets answered, then asked again in thirty days. "Acme Supplies comes up every month — is that always office supplies?" settles it permanently.

And always include your best guess. "I've put this under software — is that right?" takes one word to answer. "How should I handle this?" makes the customer do the thinking they hired you to avoid.

Never pile onto unanswered questions

If work runs on a schedule, something that cannot continue will ask again every single time it runs.

The obvious fix — don't ask the same question twice — fails immediately, because AI does not word things the same way twice. "Please provide the most recent bank statement for the close period" and "Your March bank statement" are the same question, and no simple comparison sees that.

Being clever about near-matches is worse. Set the bar anywhere and eventually you silently block a genuinely different question — and a question that never got asked is invisible. The work just never unblocks and nobody knows why.

What actually works: any one round of work can ask for everything it needs — but it cannot start a second pile on top of questions the client has not answered yet.

That distinction matters. Asking for four receipts at once is fine — that is one list somebody clears in ten minutes. A blanket "maximum three questions" rule would silently drop the fourth and file three quarters of the month, looking completely normal. What is not fine is adding three more questions on top of three the client is already ignoring.

Which files count

Only ones sent in reply to a specific request. Not everything the client has ever sent us.

The generous version sweeps in our own earlier work — last month's report, a rejected draft — so the system reads its own homework back as if the client had provided it, and repeats its own mistakes without ever seeing them.

It also takes away the client's control. A file dropped into a chat to ask a quick question should not silently become an input to work they are being billed for.

"We asked for this, and they sent it for this job" is the only thing that means anything. So it is the only thing that counts.

Everything described here is in the kernel that runs Mycel — the scheduler, the wedges, the guards, and the tests that hold them.

Read the kernel →More writing →

Read next

  • Services are data, not codeA bookkeeping service in our system is a JSON manifest, a folder of markdown, and an output schema. No module, no deploy, no engineer. The consequence that matters is not speed — it is that domain expertise stops being something only a programmer can add.
  • Output schemas are completion contractsMost agent frameworks treat a schema as validation applied after the fact. Treat it instead as the definition of done — the run ends the moment a valid result is written — and three unrelated problems disappear at once: unbounded loops, unresumable runs, and work nobody can grade.
  • One config for every task is the original sin"Build a website for this business" and "decide the next step on this overdue invoice" are not the same job, and giving them the same tools, permissions and credentials is how an agent system becomes unsafe. Three shapes, and a build run that can never hold a send token.

Take the client you turned down last month.

Describe what you deliver and the first draft exists before you have finished your coffee.

Start 7 days free

The first AI delivery firm. You sign.

All systems operational

Ask an AI about us

  • Claude
  • ChatGPT
  • Perplexity

It reads the site and answers on its own. We do not get to edit what it says.

Product

  • What you get
  • Pricing
  • Changelog
  • What it runs
  • Free reports
  • Product map
  • Team
  • Blog
  • Glossary
  • AI Visibility Index
  • Sign in
  • Docs

Compare

  • vs ChatGPT, Claude, or whichever tab is already open
  • vs Grok Bot and the AI-employee platforms
  • vs Hiring an account manager
  • vs Profound
  • vs Otterly
  • vs Building it yourself
  • vs Zapier & n8n
  • vs Temporal
  • vs LangGraph
  • vs CrewAI & AutoGen
  • All comparisons

Legal

  • Privacy
  • Sub-processors
  • Terms
  • DPA
  • Security
███╗   ███╗ ██╗   ██╗  ██████╗ ███████╗ ██╗
████╗ ████║ ╚██╗ ██╔╝ ██╔════╝ ██╔════╝ ██║
██╔████╔██║  ╚████╔╝  ██║      █████╗   ██║
██║╚██╔╝██║   ╚██╔╝   ██║      ██╔══╝   ██║
██║ ╚═╝ ██║    ██║    ╚██████╗ ███████╗ ███████╗
╚═╝     ╚═╝    ╚═╝     ╚═════╝ ╚══════╝ ╚══════╝