# Your software as tools for AI agents

Most business software was built to be clicked: a screen, a form, a button and a
person in front of it. An agent can click too, slowly and by guesswork, and it
breaks the day a button moves. Its better path is a described tool: an
operation with a name, typed inputs, a clear answer and a permission check. We
take the software you already run — the one your business depends on, however
old — and give it that path, without stopping the business to rewrite it.

## Unpicked: the rules out of the screens

The rules that run a business hide in the software: in a form's validation, in a
stored procedure, in a report nobody dares to change, in the head of the person
who built it. We find them, write them down and move each into one layer — often
the [database](/glossary/#database) itself — where every caller gets the same
answer. The screen, the agent and the partner integration then ask the same
question of the same rule, and cannot disagree.

## Exposed: described tools an agent can call

Each operation an agent should have is offered as a tool named for the work —
book a slot, quote a price, release an order — with typed inputs, errors an agent
can act on, and [idempotent](/glossary/#idempotent) calls so a retry never books
twice. The description is an [OpenAPI](/glossary/#openapi) document generated
from the code, and an MCP server offers the same operations to the agents that
speak it. [Authentication](/glossary/#authentication) is OAuth, so an agent acts
for a user without a password changing hands, and only within that user's
[rights](/ai-security/).

## Kept running: no big-bang rewrite

A rewrite stops the business for the length of the project and bets everything
on the last day. We open the software one operation at a time, behind the system
that already works, and check the new path against the old one until they agree.
Slow work moves onto a [queue](/glossary/#queue) so the agent gets an answer
while the work goes on. The screens your staff use keep working throughout, and
the old code is retired only when nothing calls it.

## A contract that cannot drift

A tool description written by hand is out of date the week after it ships, and
an agent trusts it anyway. Ours are generated from the code outward — the
database, the API, the description, the client — with a check at every step that
fails the build when two of them disagree. An agent reading the description
reads what the software does today, and a change that would break a caller is
found before it ships rather than after.

## The work behind it

We have opened up large systems this way. We
[generated an API contract from the database out](/portfolio/generated-the-api-contract-from-the-database-out/),
with a guard at every hop, and
[migrated an API of 760 operations at 100% parity](/portfolio/migrated-the-api-to-huma-v2-at-100-parity/)
with its published description. We
[designed a JSON passthrough from PostgreSQL to the API](/portfolio/designed-a-json-passthrough-from-postgres-to-api/),
[built a platform in clean layers](/portfolio/a-maritime-platform-built-in-clean-layers/)
with its business rules in one place,
[moved slow work onto a job queue](/portfolio/moved-slow-work-onto-a-river-job-queue/),
and [built the operator back office](/portfolio/built-the-operator-back-office-for-the-platform/)
that runs it without database access.

## How an engagement runs

It starts with a list: what your people do in the software every day, ranked by
how often and how much it costs them. We take the first few operations, find
their rules, and expose them as described tools behind tests and permissions,
running beside the screens rather than instead of them. Then the next few. Your
team keeps the code, the tests and the description; the tools can be called by
[an agent built for your trade](/ai-agents/), by the assistants your staff
already use, or by a partner's system. It is bought like the rest of our work,
on the terms in [what it costs](/what-it-costs/).

If your software only works when somebody clicks it,
[tell us what it is](/contact/) *(we answer the same day)*.

<https://engineer.company/ai-tools/>
