Ulpi
A native coding-agent product that puts the interactive terminal, execution runtime, policy engine, persistence and model providers in one executable.
The problem worth solving
Coding agents are often assembled as a chat surface over a collection of scripts. That fragmentation makes permissions difficult to reason about, creates different execution paths for the same work and leaves state scattered between tools.
What I built
Ulpi is designed as one native product. Running the ulpi executable opens a Rust terminal interface and starts the embedded runtime, policy engine, persistence layer, model providers and tool graph needed to carry out software work.
The runtime exposes explicit guard policy around tool use and a versioned stdio boundary for its TypeScript SDK. Core filesystem search, reading, editing, patching and verification remain available without depending on an external code-indexing service.
What the product does
- A responsive Rust terminal interface connected directly to an embedded execution runtime.
- Policy-controlled tool use with persisted sessions, events and execution state.
- Provider-neutral model integration behind one canonical product boundary.
- Built-in repository search, reading, editing, patching and verification tools.
- A TypeScript SDK over a hidden, versioned stdio protocol for controlled integration.
Why the design matters
Keeping the terminal, runtime and policy engine together means a permission decision is enforced where the work actually runs. Governance is part of the execution path, not an audit layer added after an agent has already been given access to the machine.
My role
Ciprian created Ulpi and leads its product direction, systems architecture and implementation across the Rust application and TypeScript integration surface.