Two words. That was the command. Navan typed them into a fresh terminal window on a Tuesday morning, and then he sat back and watched the world change.
agate auto
The cursor didn't blink. It didn't wait. The terminal erupted into motion—structured, purposeful, fast. Lines of output scrolled past, each one timestamped, each one tagged with a phase label.
[interview] appeared first. Agate had read the GOAL.md and was now generating clarifying questions. The questions materialized in .ai/interview.md, and Navan watched the file appear in his editor's sidebar like a new conversation opening in a chat window. The questions were specific. Pointed. They asked about error handling for malformed CSV. They asked about streaming versus loading the entire file into memory. They asked whether the output should be an array of objects or a single root object.
Agate exited. Code 255. Not an error—an invitation. Navan answered the questions in the markdown file, saved it, and typed the two words again.
agate auto
[design] came next. Two files appeared in .ai/design/: overview.md and decisions.md. The overview described the architecture—a streaming parser, a configurable output formatter, a CLI interface with flags for common options. The decisions document laid out the trade-offs: why streaming over buffered, why a custom parser instead of encoding/csv, why the output format defaulted to an array of objects.
Then [sprint-planning]. Tasks appeared in .ai/sprints/sprint-01/plan.md. Each task had a description, an estimated complexity, and a skill assignment. Code generation for the parser. Code generation for the formatter. Test generation for both. Documentation generation for the README. The sprint plan was clean, ordered, sensible.
[implementation] began. Navan watched Go files materialize in the source directory. The parser came first. Then the formatter. Then the main.go that wired them together. Then the tests—table-driven, thorough, covering edge cases he hadn't thought to mention but the interview phase had surfaced.
[assessment] ran the tests. They passed. Agate checked the output against the goal. The goal was met.
Exit code 0. Done.
Navan stared at the terminal. The whole thing had taken eleven minutes. Eleven minutes from a markdown file to a working Go CLI tool with tests and documentation. He opened the generated code in his editor and read through it—not because he needed to review it, that wasn't his job, but because he wanted to understand what the agents had decided.
The code was good. Not flashy, not clever, not the kind of code that would earn upvotes on a programming subreddit. It was workmanlike. Correct. The kind of code that passed tests and shipped products and didn't wake anyone up at three in the morning.
Jay walked by his desk. "How'd it go?"
Navan turned his monitor so Jay could see the terminal output. Two words at the top. An exit code at the bottom. Everything in between was the machine doing its job.
"Two words," Navan said. "That's all it takes."
"Workmanlike. Correct. The kind of code that passed tests and shipped products and didn't wake anyone up at three in the morning." That's the highest compliment code can receive.