The four principles

Unibench is shaped by four product principles. They're load-bearing — features that conflict with them get pushed back, not bolted on.

1. The manifest is the source of truth

Every aspect of a project's local environment is in unibench.toml. Services, runtimes, dependencies, lifecycle hooks, seed scripts, secrets-by-reference. You can git diff what changed between yesterday and today; you can reproduce a colleague's setup by cloning their repo.

What this rules out:

  • "Click this button to enable Postgres" UI flows that mutate hidden state.
  • App-managed scratch directories that aren't a peer to the project folder.
  • One-shot "setup wizards" whose decisions you can't audit later.

Corollary: anything Unibench knows is something the manifest captures or something the orchestrator could re-derive from the manifest + filesystem.

2. Polyglot first

The first-class service types span Python, Node, Go, Ruby, Rust, and PHP ecosystems plus the five blessed data services (Postgres, Redis, Qdrant, Ollama, MinIO). A RAG project that mixes a Python indexer, a Node.js frontend, and a Go health-probe is the normal case, not an edge case.

The orchestrator's process and task_service types intentionally don't constrain the runtime — they wrap whatever binary the manifest names. mise-driven lockfile detection picks up the right Python / Node / Ruby version automatically when the project's lockfiles declare one.

3. The graph is the workspace

The dependency graph isn't a side view — it's the main UI surface. Every operational concern (start order, healthcheck retries, "why is API red?", "which service is blocking?") maps to a node or edge in that graph.

What this means for tooling:

  • Per-service inspection drawers (logs, env, ports, type-specific surfaces, Diagnose tab) hang off graph nodes.
  • The AI agent's read-only tool catalog is shaped around the graph (get_service_status, get_dependency_graph, get_service_logs).
  • The audit log scopes naturally to the open project's graph.

When a feature requires the user to leave the graph view, that's a signal we got the affordance wrong.

4. The AI agent is opt-in and read-only at v1

The agent (Anthropic / OpenAI / local Ollama via BYOK) is a diagnosis tool, not a control plane. v1 surfaces:

  • read-only tools over manifest + service state + logs + dependency graph
  • a structured response shape (summary / details / see_also / confidence) so the GUI can render usefully even when the model is unsure
  • per-response thumbs feedback (opt-in telemetry)

What the agent can't do in v1:

  • modify the manifest
  • start / stop / restart services
  • read or write secrets
  • send anything outside the chosen provider's endpoint

The "agent can write" path (decision 2.39 phase 2) is a v2 conversation with an audit-log surface and a per-action confirmation pattern.


These four principles are decision filters more than rules. When a new feature feels right but you can't tell which principle it serves, that's usually the sign to step back and reframe.