Case Study — AM / HelloAM

AM

Agentic software engineering platform — systems that build systems.

An engineering environment that directs AI agents to produce, review, test, and verify software within controlled workflows. Not a chatbot or code-completion wrapper — a structured development system that constrains probabilistic AI output into deterministic, auditable engineering results. It was developed alongside ClaimHawk and used throughout its development.

The problem with unconstrained agents

AI agents can produce large amounts of code. Their output is stochastic. Without structure, code generation drifts architecturally, increases churn and complexity, introduces regressions, and leaves codebases harder to maintain.

AM puts engineering discipline around those agents. It is a structured development environment and orchestration layer — stories and tickets, state machines, verification gates, and Git-backed audit history — not a chatbot, code-completion tool, or thin wrapper around an LLM API.

What AM does

Kanban-driven task management

Work lives on a board with explicit card state. Humans create cards; agents execute them. Nothing advances by implication.

State-machine workflows

Cards move through a gated pipeline: backlog → in-progress → in-review → shipped. Each transition is checked by a deterministic gate worker before the board accepts it.

Interchangeable agent backends

The agent loop invokes models through an AgentAdapter interface. Implemented adapters: Implemented: ClaudeAdapter (default / primary path), OpenAICompatibleAdapter, Gemma4Adapter..

Automated verification

Gate checks enforce criteria files, research attachments, test passage, and optional CODE_QUALITY.md rules before a card can leave a column. The agent does not decide its own work is done.

Failure routing

When verification fails, the card does not advance. Failed in-review work routes back via in-review → in-progress (always allowed when verification fails). The agent must address gate failures (returned as specific 422 reasons) before retrying.

Persistent context and memory

Card work logs and knowledge table with embeddings / cosine similarity search (implemented in board schema)

Git-backed auditability

Each card owns a git worktree. Every agent iteration commits with a log. Execution history is inspectable — commit SHAs, iteration logs, and board transitions.

Architecture

Human → Board (card) → Runner → Agent loop → Gate worker → Board (state advance). No step runs without the prior step completing. No card advances without verification.

Board

Next.js Kanban board with SQLite via Drizzle ORM. REST API for cards, priorities, attachments, and knowledge search. UI for humans watching the work.

Agent loop

One-shot agent invocation per iteration with git commit after each step. Runner repeats until the agent signals DONE or hits a max-iteration limit.

Gate worker

Deterministic verification before every state transition; agent cannot self-certify completion. Checks criteria.md, research.md, todo completion, tests, and optional CODE_QUALITY.md rules depending on the transition.

Source control

Per-card git worktrees with iteration logs and commit SHAs. Ship path can squash iteration commits into a single auditable change.

Stack: TypeScript, React, Next.js, Bun, SQLite, Drizzle ORM, Claude adapter, OpenAI-compatible adapters, Gemma4 adapter, Git worktrees, Kanban state machine, gate worker

Engineering philosophy

AM constrains probabilistic systems into controlled workflows. The goal is to make agent work reproducible, verifiable, auditable, testable, consistent with architectural standards, and maintainable over time.

Traditional engineering principles — code quality, complexity management, review, testing, and operational accountability — still apply when AI writes the code. AM is the system that enforces them.

Why this project matters

AM demonstrates application and backend architecture, frontend development, state-machine design, agent orchestration, software quality controls, developer tooling, and AI integration — built by a software engineer who designs AI-native engineering systems, not someone who only consumes coding assistants.

  • Created a Kanban-driven development environment that coordinates AI coding agents through interchangeable execution backends via a shared AgentAdapter interface.
  • Implemented adapters: ClaudeAdapter (default / primary path), OpenAICompatibleAdapter, and Gemma4Adapter.
  • Implemented state-machine-driven workflows (backlog → in-progress → in-review → shipped), task decomposition, persistent card context, and engineering guardrails.
  • Built a deterministic gate worker that verifies criteria, research, tests, and optional code-quality rules before any card advances; failed verification routes work back to in-progress.
  • Implemented traceable execution history via per-card git worktrees, iteration commits, agent logs, and board work logs.