Skip to content

Artificial Intelligence

AI Agent Development

An agent that can act on your systems is powerful and dangerous in equal measure. We build the ones worth trusting — tightly scoped, gated on consequential actions, fully audited — and we tell you where an agent has no business at all.

Overview

An AI agent is the difference between a system that answers questions and one that does things. A chatbot tells a customer their order is late; an agent looks the order up, checks the courier’s API, issues the refund and logs the reason. It does that by wrapping a language model in a loop: the model is given a goal and a set of tools — functions that call your APIs, query your data, or trigger a workflow — and it decides which to call, reads the result, and decides what to do next until the task is done. That loop, plus tool integration, memory across steps and some planning, is the whole of what people mean by an agent. The mechanics are not the hard part.

The hard part is that the model is a probabilistic component that can be confidently, fluently wrong — and now it is wired to systems that can move money, change records and email your customers. A chatbot that hallucinates produces an embarrassing sentence. An agent that hallucinates produces an action. Everything that makes agents useful — autonomy, the ability to chain steps, direct access to your tools — is also exactly what makes them a serious error and attack surface. So the real engineering in agent work is not the loop; it is the guardrails around it: what the agent is permitted to touch, where a human has to approve before anything irreversible happens, how every action is recorded, and how you undo one that was wrong.

We build agents that earn the autonomy they are given, one scoped permission at a time, and we are blunt about the ceiling. An unsupervised agent with broad access to production is not a capability, it is an incident waiting for a trigger. The valuable, defensible version of this technology is an agent that automates the tedious middle of multi-step knowledge work while a human keeps hold of the consequential decisions. That is what we design toward, and where a task genuinely needs determinism and safety without a person in the loop, we will tell you an agent is the wrong tool rather than sell you one.

Who it’s for — Teams with multi-step, tool-heavy knowledge work they want to automate — where an agent can do the legwork but a human must stay in control of the decisions that carry real cost.

What you get

  • A defined tool surface — every action the agent can take, specified as a function with typed inputs, explicit scope and a permission boundary, so the agent can only ever do things you deliberately allowed
  • Human-in-the-loop approval gates on every consequential or irreversible action, so the agent proposes and a person confirms rather than the agent acting unchecked
  • A complete audit trail: every model decision, tool call, input and result recorded, so you can reconstruct exactly what the agent did and why after the fact
  • A rollback and containment path for actions that turn out to be wrong, plus hard limits — rate caps, spend caps, blast-radius limits — that bound the damage a misbehaving agent can do
  • Prompt-injection and input-handling defences, because any content the agent reads is a potential instruction from an attacker, not just data
  • An evaluation harness that scores the agent against real task cases, so you measure whether it actually completes work correctly instead of trusting a good demo
  • Everything in your own accounts and repositories — the agent, its tools, its logs and its prompts — with no proprietary layer you must keep paying to run

What AI Agent Development does for you

  • Tedious multi-step work, handled with oversight

    The agent does the legwork of a multi-step task — the looking-up, cross-referencing, drafting and routing — while a person stays on the hook for the decisions that matter. You get the throughput without handing over the judgement.

  • Autonomy you can actually trust, because it is bounded

    Because the agent’s permissions are scoped, its consequential actions are gated and its every move is logged, you can let it operate without lying awake about what it might do. Trust here is a product of the constraints, not of hoping the model behaves.

  • A full account of what happened, every time

    When an agent acts on your systems, "we think it did the right thing" is not good enough. The audit trail means every action has a recorded reason, a who-approved-it and an undo path — which is what makes this defensible to a customer, an auditor or your own risk team.

Why teams choose us for AI Agent Development

  • We treat the agent’s permissions and approval gates as the primary design, not a feature bolted on after the loop works — because the scoping is the engineering that makes an agent safe to run
  • We are honest about the failure modes: agents are confidently wrong, susceptible to prompt injection and capable of taking the wrong action fast, and we design assuming that will happen rather than hoping it will not
  • We will tell you when an agent is the wrong answer — when a task needs determinism, or a consequential action with no human to check it — instead of forcing an agent onto a problem a plain workflow would solve more safely
  • We operate what we build, so the people designing the guardrails are the ones who get paged when the agent does something unexpected — which sharply concentrates the mind on scoping and monitoring

What AI Agent Development includes

The concrete pieces of work this covers — scoped to what your problem actually needs.

  • Agent loop and orchestration

    We build the core reason-act loop — the model receives a goal, selects a tool, reads the result and decides the next step — with sensible termination, step limits and fallbacks so it cannot spin, loop forever or wander off the task. For work that spans several specialised steps we orchestrate multiple tightly-scoped agents or a planned sequence rather than one over-powered generalist, because narrow agents are easier to constrain and to reason about.

  • Tool and function-calling integration

    Each action the agent can take is a defined function with a typed contract, validated inputs and an explicit permission scope. We design the tool surface deliberately — exposing the least the agent needs, never a raw database handle or an admin key — so the set of things the agent can possibly do is a decision you made, not an emergent property of the model.

  • Permission scoping and least privilege

    The agent runs with the narrowest access that lets it do its job, and consequential capabilities are separated from routine ones. A read is not a write; a write to a draft is not a write to production; issuing a refund below a threshold is not the same permission as issuing one above it. This is the single most important control, and we treat it as such.

  • Human-in-the-loop approval

    For any action that spends money, contacts a customer, changes a record of consequence or cannot be cleanly undone, the agent proposes and a human confirms. We build the approval surface so the reviewer sees exactly what will happen and why, can approve, edit or reject, and the decision is recorded — turning the human from a rubber stamp into a real control.

  • Memory, planning and grounding

    Agents need to remember what they have done within a task and, sometimes, across sessions — and they need to plan a sequence of steps rather than react one turn at a time. We wire in the memory and retrieval that keep the agent grounded in your actual data rather than its own guesses, because an ungrounded agent invents facts and then acts on them.

  • Evaluation, monitoring and audit

    We build the evaluation harness that scores the agent against real task cases before it ships and after every change, and the monitoring that watches it in production — flagging anomalous tool-call patterns, cost spikes and failed tasks. Underneath sits the audit trail: a durable record of every decision and action, which is what lets you investigate, prove compliance and improve the agent over time.

Where it fits

  • Internal operations agent with approval gates

    A support or operations team drowns in multi-step tasks — pulling data from three systems, cross-referencing it, drafting a response, taking an action. An agent does the assembly and proposes the action; a person approves anything that touches a customer or a balance. The tedium is automated, the judgement stays human, and every step is logged.

  • Research and data-gathering agent

    A knowledge task requires reading across many sources, retrieving records, and synthesising a draft — a case file, a due-diligence summary, a compliance check. Here the agent’s actions are mostly reads, which is a far safer surface, and it produces a grounded, cited draft for a human to verify rather than a final decision. A good fit precisely because the consequential act — the decision — stays with the person.

  • Workflow automation across your own systems

    A process spans several internal tools that were never designed to talk to each other, and today a person bridges them by hand. An agent can drive that workflow — reading from one system, transforming, writing to the next — with writes to consequential systems gated and everything auditable. We are careful here that a deterministic pipeline is not the better answer; often, for the fixed parts, it is, and we split the work accordingly.

  • Customer-facing agent with a hard boundary

    An agent that helps customers directly — answering, looking things up, taking limited safe actions like resending a receipt — with a firm line drawn at anything that spends money, changes an account or cannot be undone, which is handed to a human or a deterministic flow. The design question that dominates is not what the agent can do, but what it must never do alone, and we start there.

How we approach AI Agent Development

We start from the actions, not the model. Before any agent loop exists, we map every action the agent might take and sort them ruthlessly: which are safe to automate outright, which need a human to approve first, and which an agent should never perform at all. That map — the tool surface, the permission boundaries and the approval gates — is the real architecture of the system. Get it right and the agent is useful and contained; get it wrong and no amount of clever prompting will make it safe. We spend our expensive early effort here, because these are the decisions that are cheap to make and ruinous to unwind after the agent is live.

From there we build the smallest agent that does the job, with the narrowest access that lets it work, and we prove it against real task cases in an evaluation harness before it touches anything that matters. We assume the model will be confidently wrong and that someone will try to hijack it through the content it reads, and we design the guardrails, limits and monitoring for that reality rather than for the happy path a demo shows. Autonomy is then extended deliberately, one scoped permission at a time, as the evidence earns it — never granted wholesale at the start.

How we build an agent you can actually trust

We open by enumerating actions, not by writing prompts. We sit down and list everything the agent could conceivably need to do, then classify each one: safe to automate, needs human approval, or off-limits to the agent entirely. Out of that comes the tool surface — the exact set of functions the agent is given, each with a typed contract and a permission scope — and the approval gates that sit in front of the consequential ones. This classification is the most important decision in the whole engagement, so it is made by senior engineers who have thought hard about what goes wrong, not left to emerge from experimentation.

Then we build the loop and the tools narrowly, and we build the audit trail and the guardrails alongside them rather than after. Every tool call is validated, logged and bounded by the limits we agreed — rate caps, spend caps, and a blast radius beyond which the agent simply cannot reach. We wire in the human-approval surface so a reviewer sees exactly what the agent proposes and why, and we build the rollback path for the actions that need one before those actions are ever enabled in a real environment.

Before the agent acts on anything that matters, we prove it against a set of real task cases in an evaluation harness — including the adversarial ones: the ambiguous request, the injected instruction hidden in retrieved content, the edge case where the right move is to stop and ask. We would rather find out in evaluation that the agent takes a wrong action under pressure than find out in production. Only once it holds up, and with monitoring watching it in the wild, do we widen its autonomy — and we do that incrementally, one earned permission at a time.

The agent loop, the tools and the boundary around them

At the centre is the agent loop: a language model given a goal and a set of tools, which reasons about what to do, calls a tool, reads the result and decides the next step until the task is complete or a limit stops it. We keep this loop deliberately boring and well-bounded — clear termination conditions, a hard cap on steps, and fallbacks when the model is uncertain — because an unbounded loop with tool access is precisely the thing that turns a small mistake into a runaway one. Where the work spans distinct stages, we prefer several narrowly-scoped agents or a planned sequence over one all-powerful generalist, since a narrow agent is far easier to constrain and to reason about.

The tools are the load-bearing part of the architecture, because they define the entire universe of what the agent can do. Each is a function with a typed input contract, validation on the way in, and an explicit permission scope — never a raw connection to a database or a broad API key that the model can point anywhere. We expose the least the agent needs, and we separate reads from writes, and routine writes from consequential ones, so that the agent’s power is granted in small, named increments rather than as a blanket. Memory and retrieval sit alongside, keeping the agent grounded in your real data across the steps of a task rather than reasoning from its own inventions.

Around all of it sits the boundary: the approval gates, the limits and the audit trail that make the difference between an experiment and a system you can run. Consequential actions pass through a human; every decision and action is recorded durably enough to reconstruct after the fact; and hard limits cap the rate, the spend and the reach of anything the agent does. This is not defensive decoration — it is the architecture. An agent is only as trustworthy as the boundary drawn around it, and we design that boundary first.

An agent that can act is a serious attack surface

The uncomfortable truth about agents is that connecting a language model to your tools creates an attack and error surface that a chatbot simply does not have. The central threat is prompt injection: any content the agent reads — a web page, an email, a support ticket, a document it retrieves — can contain instructions crafted to hijack it, and the model cannot reliably tell your instructions from an attacker’s buried in the data. So we treat everything the agent reads as untrusted input, never as a command, and we design so that a successful injection still cannot reach a consequential action without passing the same permission scopes and human gates as anything else. The defence is not a cleverer prompt telling the model to ignore malicious instructions — that does not hold — it is the boundary that means even a hijacked agent can only do what it was scoped to do.

The second failure mode needs no attacker at all: the agent is simply, confidently wrong, and takes an action it should not have. Over-broad permissions are what turn that ordinary mistake into a serious incident — an agent with write access to production that misreads a situation can do real damage fast. So least privilege is the core security control here, not an afterthought: the agent runs with the narrowest access that lets it work, consequential capabilities are separated and gated, and hard limits bound the blast radius of any single wrong move. We assume the agent will make mistakes, because it will, and we make sure the expensive ones are impossible or human-approved rather than merely unlikely.

Underneath sits the audit trail and the monitoring, which are security controls as much as operational ones. Every action the agent takes is recorded with its reason and its approval, so an incident can be reconstructed rather than guessed at, and the monitoring watches for the anomalous patterns — a spike in tool calls, an unusual sequence, a cost jump — that signal something is wrong before it goes far. And where a task genuinely cannot tolerate a wrong action and has no human to catch one, we say so plainly: that is not a case for a better-guarded agent, it is a case for not using one.

Signs it’s time

  • You have multi-step knowledge work — the kind that means pulling data from several systems, cross-referencing it and taking a routine action — that is eating skilled people’s time and would benefit from automation with a human still in control of the decisions
  • You have already built a chatbot or an assistant and now need it to actually do things — take actions on your systems — and you have realised that crossing from answering to acting is a serious step up in risk
  • A workflow currently has a person manually bridging systems that do not talk to each other, and you want an agent to drive the legwork while consequential writes stay gated and everything stays auditable
  • You are considering an agent for something consequential and you need an honest assessment of whether it is safe to automate at all — including the answer that, for the riskiest parts, it is not

Scope the actions first, earn the autonomy second

Our method inverts the usual order. Most agent projects start with the exciting part — the loop, the model, the demo where it does something impressive — and treat safety as a thing to add later. We start with the actions and the boundary, because that is where the real decisions live, and we hold to a simple rule: an agent should be granted the least autonomy that lets it do its job, and no more. Every capability it has is a deliberate, named grant, not a default. That discipline is unglamorous and it is exactly what separates an agent you can run from a demo you cannot.

The second discipline is earning autonomy through evidence. We do not hand an agent broad access on day one and hope; we prove it against real task cases, including adversarial ones, and we widen what it is allowed to do incrementally as it demonstrates it can be trusted with each next thing. Human approval gates start tight and loosen only where the evidence and the stakes justify it. This is deliberately conservative, and it is the right posture for a system that can take real actions — you can always grant more autonomy once it is earned; you cannot un-take an action the agent should never have been allowed to make.

Running through both is a refusal to pretend the model is more reliable than it is. We design assuming the agent will be confidently wrong sometimes and that someone will try to hijack it — and we build so that when those things happen, the damage is bounded, caught and reversible. An honest agent design is one that plans for its own failure, and that is the kind we build.

Technologies we build it with

Chosen per problem, not per fashion — this is the stack we most often reach for on this work.

How we deliver

  1. 01

    Discover

    We map the system, the constraints and the business it serves — including the parts nobody documented.

    Architecture brief

  2. 02

    Architect

    Decisions get made, written down and defended before a line of production code exists.

    Decision records

  3. 03

    Build

    Short cycles against working software. You see progress in the product, not in a status deck.

    Shipping increments

  4. 04

    Operate

    Monitoring, incident response and iteration. The system is alive, so the engagement is too.

    Runbooks & SLOs

What changes

  • Multi-step work automated, judgement retained

    The tedious assembly and legwork of a multi-step task handled by the agent, with the consequential decisions still made or approved by a person — throughput without surrendering control.

  • Autonomy that is bounded and provable

    An agent whose every action is scoped, gated where it matters, logged and reversible — so its autonomy is something you can defend to an auditor or a risk team rather than something you hope holds.

  • A clear account of what the agent did

    A durable audit trail behind every action, so any decision the agent made can be reconstructed, explained and, if wrong, undone — which is what makes acting on your systems defensible at all.

Industries we serve

Domain knowledge changes what gets built. A few of the sectors we know before the first meeting.

How pricing works

  • Agent engagements are priced against the complexity and risk of the actions involved, not a fixed feature list — the number of tools the agent needs, how consequential those actions are, and how much approval, audit and rollback machinery the risk of them demands.
  • The main drivers are the size and sensitivity of the tool surface, how many actions require human-in-the-loop gates and how sophisticated those gates need to be, the depth of audit and monitoring your context requires, and how much integration with your existing systems each tool involves.
  • Agents that act on regulated, financial or otherwise sensitive systems cost more, because the guardrails, audit trail and evaluation must be correspondingly stronger and are part of the scope from the start rather than added later — we flag this early so it is never a surprise in the number.
  • We are happy to price a deliberately narrow first agent — one scoped to the lowest-risk, highest-value slice of the work — so you can prove the approach on something contained before extending its autonomy and reach, which is usually the cheaper and safer way to learn.

Typical timeline

  1. 01

    Action mapping and boundary design (about one to two weeks)

    We enumerate every action the agent might take, classify each as safe-to-automate, needs-approval or off-limits, and design the tool surface, permission scopes and approval gates. This is where the most important decisions are made.

  2. 02

    Loop, tools and guardrails (a few weeks)

    We build the agent loop and its narrowly-scoped tools, with the audit trail, limits and human-approval surface built alongside rather than after — so the guardrails exist before any consequential action is ever enabled.

  3. 03

    Evaluation and hardening (about one to two weeks)

    We prove the agent against real and adversarial task cases in an evaluation harness — the ambiguous request, the injected instruction, the edge case where stopping is correct — and harden it before it acts on anything that matters.

  4. 04

    Controlled rollout and earned autonomy (ongoing)

    We put the agent live with tight gates and full monitoring, then widen its autonomy incrementally as the evidence justifies — one earned permission at a time, never wholesale.

Why teams choose us for AI Agent Development

  • We design the boundary before the loop

    The permission scopes, approval gates and audit trail are the first thing we build, not the last, because that boundary is what makes an agent safe to run. A team that builds the impressive demo first and secures it later has the order exactly backwards.

  • We are honest about where agents fail

    Agents are confidently wrong, hijackable through the content they read, and capable of taking a bad action quickly. We design for that reality instead of hoping the model behaves, and we will tell you plainly when a task should not be handed to an agent at all.

  • We grant autonomy only as it is earned

    We do not hand an agent broad access and hope. We prove it against real and adversarial cases and widen what it can do one scoped permission at a time — conservative by design, because you cannot un-take a wrong action.

  • We operate what we build

    The engineers designing the guardrails are the ones who get paged when the agent does something unexpected, which is exactly why we scope tightly and monitor properly rather than trusting a system we would not have to answer for.

How to engage us

Three ways to work with us on this — chosen to fit the problem, not our margin.

Related services

Part of AI Development. Other work we do alongside this.

Related terms

Common questions

What is the difference between an AI agent and a chatbot?

A chatbot produces words; an agent produces actions. A chatbot can tell a customer their refund policy, but an agent can look up the order, check it qualifies and actually issue the refund by calling your systems. That single difference — from answering to acting — is what makes agents genuinely useful and also what makes them a serious risk. When a chatbot is confidently wrong, you get an embarrassing sentence. When an agent is confidently wrong, you get a wrong action taken on your systems. So while the two share the same underlying model, they are engineered completely differently: an agent needs permission scoping, approval gates, an audit trail and a rollback path that a chatbot has no need of. Most of our work on an agent is in that surrounding machinery, not in the model.

Can I let an agent run unsupervised on my production systems?

For anything consequential, no — and we will say so directly rather than sell you the fantasy. A language model is a probabilistic component that can be confidently wrong and can be hijacked by instructions hidden in the content it reads, and handing something with those properties unsupervised access to production is an incident waiting for a trigger. The useful, defensible version of an agent automates the tedious multi-step legwork while a human keeps control of the decisions that carry real cost — approving anything that spends money, contacts a customer or cannot be cleanly undone. There are lower-risk actions an agent can take on its own, and we widen that set incrementally as evidence earns it, but the answer to "can it run the consequential stuff unsupervised" is one we treat as no by default and only revisit where the stakes and the evidence genuinely justify it.

What is prompt injection and why does it matter so much for agents?

Prompt injection is when content the agent reads — a web page, an email, a support ticket, a retrieved document — contains instructions designed to hijack it, and the model cannot reliably distinguish your instructions from an attacker’s buried in the data. For a chatbot this is a nuisance; for an agent it is dangerous, because a hijacked agent can be steered into taking real actions. It matters enormously and it does not have a clean solution: you cannot simply tell the model to ignore malicious instructions and trust that it will. So we defend against it structurally rather than with cleverer prompting. We treat everything the agent reads as untrusted, and we design the permission scopes and approval gates so that even a successfully hijacked agent cannot reach a consequential action without passing the same human checks as anything else. The boundary is the defence — the prompt is not.

How do I know the agent did the right thing?

Because we build the audit trail as a first-class part of the system, not an add-on. Every decision the model makes, every tool it calls, the inputs it used and the results it got are recorded durably enough that you can reconstruct exactly what the agent did and why after the fact. Consequential actions additionally carry a record of who approved them. On top of that sits monitoring that watches for the patterns that signal trouble — a spike in tool calls, an unusual sequence, a cost jump — so you find out something is off early rather than after it has gone far. "We think it did the right thing" is not good enough when an agent acts on your systems, which is why we make "here is precisely what it did, and here is how to undo it" the standard instead.

When is an agent the wrong tool for the job?

When a task needs determinism or safety without a human in the loop, an agent is usually the wrong answer, and we will tell you so rather than force one onto the problem. If a process must produce exactly the same correct result every time — a financial calculation, a compliance rule, a fixed sequence of steps — a plain deterministic workflow is more reliable, cheaper and easier to reason about than a probabilistic model, and dressing it up as an agent adds risk for no benefit. Similarly, if an action is consequential and there is genuinely no human available to approve or catch a mistake, that is a reason not to automate it with an agent, not a reason to build a more elaborately guarded one. The honest fit for an agent is multi-step knowledge work with oversight; where the work is fixed and rule-based, or where a wrong action cannot be tolerated and no one is watching, we would steer you to a different and safer approach.

Let’s talk about AI Agent Development.

Tell us what you’re building or fixing. A senior engineer reads every enquiry and replies within a business day.

Two fields required. We reply to real enquiries — no list, no sequence.