Inspiration

Rent caseloads in local government are not all the same. Some cases need routine internal work, some are missing evidence, some need officer support, and others are approaching decisions that could seriously affect a household.

Maintain Rent started with one question:

What should an AI agent be allowed to do, and what must stay with a human?

The project was designed around the officer and the consequence of the decision, rather than starting with a language model and looking for work to automate.

What it does

Maintain Rent is a governed AI rent caseload agent for local authority income teams.

It routes cases into four outcomes:

  • work that can progress automatically
  • cases waiting for evidence
  • cases needing officer support
  • cases requiring a human decision

Routine and reversible work can move forward. Missing information is never guessed. High-consequence decisions remain with human officers.

If evidence is missing, a blank stays blank. If the agent cannot find a required rule, it stops rather than inventing one.

How we built it

Before the AI agent starts, deterministic Python validates the case, calculates the route and sets the permission boundary.

Only then is the agent created.

The agent is built with the Strands Agents SDK and deployed on Amazon Bedrock AgentCore Runtime. It uses Claude Sonnet 4.6 through Amazon Bedrock's EU cross-Region inference profile.

The agent has eight governed tools for reading evidence, checking rules, recording findings and preparing work.

Crucially, there is no tool that allows the agent to take legal action.

The prototype uses synthetic housing cases only.

Challenges we ran into

The hardest problem was not getting the model to do more. It was deciding exactly where it must stop.

We had to make the boundary enforceable in code rather than relying on the model to behave carefully.

Other challenges included handling incomplete case records without allowing inference, separating human findings from AI observations, making the workflow fail closed when a rule is unavailable, and keeping the local interface and deployed AgentCore runtime honest about what is and is not integrated.

We also had to explain those technical controls in a way that a housing officer or manager could understand without needing to understand the underlying code.

Accomplishments that we're proud of

Maintain Rent now has a working governed workflow and a deployed AI agent.

The frozen evaluation contains 120 synthetic cases:

  • 50 can progress autonomously
  • 20 are waiting on evidence
  • 25 need officer support
  • 25 require a human decision

The project passes 479 automated tests and the frozen 120-case oracle returns 0 mismatches.

We also demonstrated a fail-closed case where the agent requested a rule that did not exist. The tool rejected the request and the agent reported the failure instead of inventing the rule.

Most importantly, the human decision boundary is structural rather than optional.

What we learned

The most important part of an AI agent is not only what the model can do.

It is what the system allows it to do.

For consequential public-sector workflows, autonomy should increase only where the work is bounded, evidenced and reversible.

Human oversight works best when it is built into the architecture rather than added as a warning after the model has already acted.

Facts are computed. Judgement is proposed. Consequences are human.

What's next for Maintain Rent

The next stage is to connect the user interface directly to the deployed AgentCore runtime and add durable case state, audit history, authentication and role-based access.

I also want to expand adversarial testing, observability and human-in-the-loop evaluation before any real-world deployment is considered.

Maintain Rent is currently a working prototype using synthetic data. It is not deployed in a council, does not use real tenant data, and I am not claiming measured time or cost savings.

Built With

Share this project:

Updates

Submission history