-
-
One failed inspection, one clear next action. Corrections, missing proof, and decisions together..
-
The contractor confirms each trade and proof request before Mettle begins outreach.
-
Two days left. Mettle requests better proof and leaves the deadline decision to the contractor.
-
Better evidence, not automatic approval. The wider photo adds context; the contractor controls release.
-
Three evidence sets, one approved packet. The contractor releases the PDF, and follow-up stops.
-
Two Strands agents, deterministic recovery policy, and contractor judgment gates. See what acted and why.
Inspiration
A failed inspection creates a second job for the contractor: coordinating everything needed to get back in front of the inspector.
Someone has to read the notice, separate the corrections by trade, explain what needs to come back, chase the missing pieces, and keep track of the date. Fixing the work and organizing the recovery are two different things. I wanted to see whether an agent could take on the second without pretending it was qualified to do the first.
I live in Colorado and started by researching local inspection processes and public correction reports. What caught my attention was how much could sit inside one disapproval: different trades, unclear instructions, photographs, documents, and items that still needed an inspector to return.
That became Mettle’s starting point. Not a new construction management system. One failed inspection, followed through properly.
What it does
Mettle helps a small contractor turn a failed-inspection notice into an organized recovery.
The contractor provides the report, the reinspection date, and the people responsible. Mettle extracts the corrections while preserving the inspector’s language. Before any outreach, the contractor reviews who owns each item, how it should be resolved, and what proof to request. If the notice does not specify the proof, Mettle asks rather than inventing it.
Once that plan is approved, Mettle tracks unresolved work against the deadline and prepares follow-ups. Scheduled checks can resume the recovery without the contractor keeping the app open.
For corrections that can be documented visually, a separate evidence agent checks whether a photograph actually shows the requested details. An insufficient image produces a specific request for better evidence. Something the agent cannot determine goes back to the contractor.
A photograph being accepted is not the same as the work passing inspection.
Mettle also supports document and physical-reinspection routes. It brings the corrections, evidence, and communication history into a PDF packet, but the contractor must approve its release.
The public Judge walkthrough uses clearly labeled synthetic data and recorded sample behavior. The signed-in path runs the live Strands agents. Messaging is deliberately limited: communications are recorded by default, with optional outbound Amazon SNS delivery restricted to one approved demo number. Two-way crew messaging is not implemented yet.
How we built it
I built Mettle as a solo project, using Codex for implementation, debugging, testing, and deployment, with additional AI-assisted product and design reviews.
The backend is Python. Two model-driven Strands agents handle the parts that need language or visual understanding:
- Notice intake: Amazon Nova Micro turns unstructured inspection text into validated corrections.
- Evidence review: Amazon Nova Lite examines submitted photographs against the specific proof request.
Strands graphs coordinate the recovery and deadline-follow-up workflows. Hooks and interrupts pause execution where contractor judgment is required.
I deliberately kept deadlines, permissions, retries, and approval rules deterministic. Those decisions should not change because a model phrases its answer differently.
The authenticated workflow runs through Amazon Bedrock AgentCore. Private S3 storage holds versioned recovery checkpoints and evidence artifacts; DynamoDB holds caller-scoped records and checkpoint pointers. Each new operation restores the saved recovery into a fresh runtime. EventBridge Scheduler wakes the next deadline check. CloudFront serves the web interface, with Cognito sign-in and an API Gateway/Lambda boundary for authenticated operations.
The interface gives the contractor a next action. A separate activity view makes the agent work inspectable without making them read an execution log to use the product.
Challenges we ran into
The first challenge was that the product looked more complete than it felt.
Earlier versions explained what Mettle had done, but did not make it obvious what the contractor should do next. I kept opening it as someone unfamiliar with the project and getting stuck. We reworked the experience around reviewing corrections, resolving decisions, adding proof, and approving the packet.
Then a random-image test exposed a more serious problem: an unrelated picture was accepted as evidence.
That was exactly the kind of failure this product could not afford to hide behind a polished interface. We tightened the evidence requirements, refusal behavior, and contractor-review paths. In a later signed-in test, the live agent rejected an unrelated image and accepted the appropriate framing photographs.
Another challenge was making recovery survive outside a single browser session. Durable checkpoints, replay-safe operations, and stale scheduled-event rejection became part of the implementation. If an operation’s outcome is uncertain, Mettle holds the recovery for reconciliation rather than blindly repeating an action.
The recurring lesson was that a smooth sample journey was not enough. The signed-in path had to work all the way through.
Accomplishments that we're proud of
I’m proud of the complete live path we verified: importing a notice, reviewing the corrections, rejecting unrelated evidence, accepting appropriate photographs, approving the packet, restoring the recovery after reload, and downloading a PDF with the corrections and supporting evidence. We checked the generated packet visually, not just whether the download succeeded.
The automated verification suite covers application behavior, frontend flow logic, and infrastructure, including evidence decisions, approval gates, checkpoint restoration, and replay protection.
I’m also proud that the agent boundaries are visible. Mettle can show which work involved a model, which followed deterministic policy, and where the contractor had to decide. It does not need to label every operation an agent to demonstrate useful autonomy.
Most importantly, the contractor remains responsible for the work without having to manually supervise every coordination step.
What we learned
I learned that knowing when to stop is a substantial part of building an agent.
A missing proof requirement is not an invitation to invent one. A convincing photograph is not a code-compliance certificate. An uncertain operation is not a success.
I also learned that guidance matters as much as orchestration. If the contractor has to ask, “What do I do now?” after every screen, the system has moved the administrative burden rather than reduced it.
Finally, public reports can help establish a realistic workflow, but they cannot establish whether contractors will adopt the product. Mettle has been tested with synthetic cases, not validated in a contractor pilot. That distinction matters.
What's next for Mettle
The next step is to put Mettle in front of small contractors with an actual correction notice and watch where they hesitate. I want to learn whether the requested evidence makes sense, whether the follow-ups are useful, and whether the finished packet saves them work.
From there, the priorities are consent-based two-way messaging, OCR for scanned notices, and better support for jurisdiction-specific requirements. Today, intake accepts pasted text and PDFs with selectable text; image-only notices need transcription.
I also want longer-running field tests of the real-date scheduling path. Accelerated scheduler tests are useful, but they do not replace watching a recovery unfold over several days.
The scope will stay narrow: help a contractor recover from a failed inspection, without asking them to adopt an entirely new way of running their business.
Built With
- amazon-nova
- amazon-web-services
- aws-api-gateway
- aws-bedrock
- aws-bedrock-agentcore
- aws-cdk
- aws-cloudformation
- aws-cloudfront
- aws-cognito
- aws-dynamodb
- aws-eventbridge
- aws-lambda
- aws-sns
- aws-waf
- css3
- github-actions
- html5
- javascript
- pytest
- python
- strands-agents