Case Study — AM / HelloAM
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.
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.
Work lives on a board with explicit card state. Humans create cards; agents execute them. Nothing advances by implication.
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.
The agent loop invokes models through an AgentAdapter interface. Implemented adapters: Implemented: ClaudeAdapter (default / primary path), OpenAICompatibleAdapter, Gemma4Adapter..
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.
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.
Card work logs and knowledge table with embeddings / cosine similarity search (implemented in board schema)
Each card owns a git worktree. Every agent iteration commits with a log. Execution history is inspectable — commit SHAs, iteration logs, and board transitions.
Human → Board (card) → Runner → Agent loop → Gate worker → Board (state advance). No step runs without the prior step completing. No card advances without verification.
Next.js Kanban board with SQLite via Drizzle ORM. REST API for cards, priorities, attachments, and knowledge search. UI for humans watching the work.
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.
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.
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
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.
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.