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

Building the harness · August 22, 2026 · 9 min

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.

By Islam Hachimi, Founder

You would not give the new intern and the office manager the same set of keys. The intern needs the supply cupboard. The office manager needs the client files and the company card. Nobody thinks this is complicated.

Most AI systems give every job the same keys anyway. One setup, one toolkit, one set of permissions, handed to every task the system ever does. It is the easy thing to build. It is also how these systems become dangerous.

Three kinds of job: decide, build, general
Each kind of job gets its own tools, its own limits, and its own keys.

Three kinds of job

Deciding

Look at the situation, work out the right move, write it down. Chasing an invoice. Choosing what to do next on a case. Screening a candidate.

These run at near-zero creativity on purpose. The same overdue invoice with the same history should not get a gentle nudge on Tuesday and a final warning on Wednesday. That is not judgement, that is a coin flip.

Building

Writing a website, changing code, producing something and proving it works. Big toolkit, long leash, plenty of time.

And no ability to contact anyone. At all.

A job that writes code never gets the key that sends email. Not even if someone configures it to. This is the one setting a customer cannot override.

The reason is simple once you say it out loud. Something that can write code can write code that sends email. So every safety check you put on sending is a lock on a door with no wall next to it. If a service genuinely needs both, that is two jobs, and splitting them is the point — not the inconvenience.

Looking things up

Research, background checks, summarising. Reads things. Changes nothing.

Asking is not the same as getting

A service can ask for a bigger budget, a smarter model, more time, more tools. None of those requests are simply granted. Each one gets checked against what that customer's plan actually allows.

And when a request is too big, it gets trimmed — never refused. A service asking for more than its plan allows gets what the plan allows. It does not blow up at three in the morning because someone wrote an ambitious number in a settings file.

Why keys matter more than tools

Taking away a tool is a soft barrier. Something running in a sandbox with a command line can usually find another route. Removing a tool mostly costs it convenience.

Keys are a hard barrier. If the job never receives a key to a customer's mailbox, then no amount of cleverness gets it into that mailbox. There is nothing to be clever with.

So our safety does not rest on which tools a job has. It rests on which keys get handed out, for which job, for how long, and to which specific accounts.

In practice, a job never touches a real password or key at all. It gets a temporary pass, valid only for this job, only for the accounts this service was allowed to use, and cancelled the moment the job ends. The real credentials sit behind a door the job cannot open — and that door is where a human gets asked before anything irreversible happens.

The point

Someone writing a new service writes one word — which kind of job this is — and inherits a whole set of sensible decisions somebody thought carefully about once.

They are not assembling safety out of parts. That is the thing nobody does properly when they are in a hurry, and everybody is always in a hurry.

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.
  • Fulfilment is not one shotReal service work is not a single prompt. A weekly visibility report is twelve independent measurements and one aggregation; a month-end close is strictly sequential and stops dead without a bank statement. Both need a run that can suspend itself as a row and resume days later.

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
███╗   ███╗ ██╗   ██╗  ██████╗ ███████╗ ██╗
████╗ ████║ ╚██╗ ██╔╝ ██╔════╝ ██╔════╝ ██║
██╔████╔██║  ╚████╔╝  ██║      █████╗   ██║
██║╚██╔╝██║   ╚██╔╝   ██║      ██╔══╝   ██║
██║ ╚═╝ ██║    ██║    ╚██████╗ ███████╗ ███████╗
╚═╝     ╚═╝    ╚═╝     ╚═════╝ ╚══════╝ ╚══════╝