Blog

Experiments, notes, and things I'm building.

A collection of experiments and notes around security engineering, tooling, AI, and whatever I happen to be building.

Latest

2026-09-23

Transforming a CLI into an AI-Native CLI

Part 6 — Observing the Agent: Adding Events and Tracing to ESKit AI

Once the ESKit AI experiment became a multi-step agent, I needed a better way to understand what it was actually doing. I added an event-driven observability layer with an EventBus, a console listener, and optional JSONL tracing. The trace makes tool calls, results, waits, user input, and the overall execution flow visible without coupling observability to the agent itself.

ESKit AI Agents Observability

2026-09-02

Transforming a CLI into an AI-Native CLI

Part 5 — Agent Loop: Letting the LLM Decide When to Act, Ask, and Stop

The ESKit AI experiment is now more than a single tool call. With an agent loop, the LLM can use multiple ESKit operations, ask the user for information when necessary, and decide when it has enough information to finish. The interesting part is that the agent isn't forced to execute every request—it can investigate, ask, act, or simply return a useful response.

ESKit AI Agents Claude

2026-08-31

Transforming a CLI into an AI-Native CLI

Part 4 — From 25K to 7K Tokens: Simplifying the CLI Definition Without Losing Context

After getting the AI interface working, I looked at how much CLI definition data I was sending to Claude. By removing unnecessary fields and deduplicating common arguments, I reduced the AI-facing definition from roughly 55 KB to 17 KB, cutting input tokens from about 25K to 7K without changing the underlying CLI definitions.

ESKit AI Token Optimization Python

2026-08-28

Transforming a CLI into an AI-Native CLI

Part 3 — Separating Execution from Presentation in ESKit

While working on the next stage of the ESKit AI experiment, I realized that the CLI commands were doing too much. I refactored the command layer so that execution returns structured results while presentation is handled separately, making the same results easier to use from the CLI, AI layer, or a future WebUI.

ESKit Architecture Python AI

2026-08-23

Transforming a CLI into an AI-Native CLI

Part 2 — Turning Tool Calls Back into Commands

The next step in my ESKit AI experiment was turning Claude's tool calls into actual CLI operations. The basic proof of concept worked, but it also exposed an important difference between executing one tool call and building a real agent loop.

AI Agents ESKit Claude