What happens after
your agent finishes?
You read the output. Then the session ends, and next week the same agent finds the same things and argues the settled ones again.
- What if the agent could see that you already decided that one was a false positive, and why?
- What if the same defect came back after a fix, and you knew it was the same one?
- Which of your agents actually find things that matter?
- What if decisions are being made faster than anyone writes them down?
The first is half-built: the decision and its reason are on the record; the agent reading it back is being built.
The operations layer for agentic work.
Git remembers what changed. UluOps remembers what was decided — what was decided about what the agents found: fixed, deferred, wontfix, false positive, or noted and left alone, with the reason.
Observability tells you what the agent did. UluOps tells you what it found, what you decided about it, and whether it came back.
- a trace
- agentmodeltooloutputtokenslatency
- a UluOps run
- runfindingsissuesdecisionnext run
The trace is about the run. UluOps is about the finding, and the finding outlives the run.
Runs are the unit of agentic work.
Findings are what a run produces.
Issues are findings with a status and a history: the decision, and its reason, on the record.
A fingerprint is a finding's identity: agent, file, category and title, hashed together, so the same finding is recognised across runs. This is a real project's log, newest first, cut down to one finding and the runs around it.
$ ulu log -p mcp-tool-surface-sweepregressed 2026-09-28 01:11 051939f7e71c "T1: save_run without idempotency_key duplicates runs on retry despite identical payloadHash" via run #4 by agentrun #4 2026-09-28 01:10 tool-sweep tool-sweep-validator score -, gates -new 57 . recurring 0 . regression 3…decided 2026-08-22 23:02 051939f7e71c fixed <- open "Fixed both ends: API falls back to payloadHash dedupe for keyless saves (mutations.ts, migration 082 index); ops-sdk ..."…run #1 2026-08-22 01:20 tool-sweep tool-sweep-validator score -, gates -new 16 . recurring 0 . regression 0
Same fingerprint, three states. Run #1 found it. It was decided fixed the same day, and the reason says what changed. Five weeks later run #4 found it again, and the log knows it is the same finding, with the August decision still attached. The line in the middle is the one git could not have held.
One honest limit: a fingerprint survives a fix and a regression. It does not survive a rewritten title, so a finding the agent re-describes looks new. That gap is known and tracked.
What came back, January 2026 to 2026-10-23
- 7
- Caught by re-running: a later run found a fixed finding again
- 6
- Reopened by decision: a resolved finding reopened by a person or an agent, with no run involved
Counts, not rates, and nothing here says how many were missed.
Our own record, not a benchmark: one operator, 40 weeks, 29,432 findings tracked. Read from the tracker, not typed.
as of 2026-10-23 · 257 of the 581 published definitions are agents
Install, restart, run.
- 01
Install
npx @uluops/setupasks whether you're new. Sign up with an email and password, or paste an API key you already have;--signupskips the question. It installs 23 agents and 28 commands into Claude Code, OpenCode, Gemini CLI or Codex;--all-detectedinstalls into every harness it finds. - 02
Restart the harness
The agents and commands load when the harness starts, so restart it once after setup.
- 03
Run
In a repo you own, run the first validator. Runs and findings are saved to a hosted tracker at app.uluops.ai, under your account.
Works in Claude Code, OpenCode, Gemini CLI and Codex. The registry holds 257 published agents; setup installs a curated 23 of them.
Start free. Pay for room.
The catalog, the issue lifecycle and every analytics view are free on every tier. Tiers meter workspace: projects, private definitions, members. Agents generate more than anyone can hold in their head, and the audits and the decisions about them need somewhere to sit and scale.
On every tier, including Free
- All 581 published definitions — 257 agents, 226 commands, 75 pipelines, 23 workflows
- Findings tracked as issues, fingerprinted across runs, regressions caught
- Every decision on the record with its reason — fixed, deferred, wontfix, false positive, observation
- Every analytics view: agent reliability, trends, taxonomy, cost, cross-project
- MCP servers, CLI and SDKs — bring your own model key
Free
The whole product, for one person and a few repos.
- 3 projects · 5 private definitions
- 1 member
Hobbyist
Room for the repos you actually run agents against.
- Everything in Free
- 10 projects · 25 private definitions
- 3 members
Plus
A team's worth of projects and the people who decide on them.
- Everything in Hobbyist
- 50 projects · 50 private definitions
- 10 members
Pro
Stop counting. Unlimited projects and private definitions.
- Everything in Plus
- Unlimited projects & private definitions
- 25 members
- Priority support
Enterprise
Unlimited members. Dedicated support.
- Everything in Pro
- Unlimited projects & private definitions
- Unlimited members
- Dedicated support
Rate limits apply on every tier. Monthly billing, no contracts; downgrade and your history stays — nothing is deleted.
Two tools. One record.
The Registry holds the definitions. The Tracker holds what they found and what you decided. Together, or on their own.
Four layers. One record.
Definitions become runs. Runs produce findings. Findings become issues with a decision and a history, and the next run is read against them.
Registry
DEFINEAgents, commands, workflows and pipelines as versioned YAML definitions, published to a shared registry: 257 published agents across validators, analysts, explorers, forecasters, generators and executors.
Tracker
RECORDRuns save their findings as issues, identified across runs by fingerprint: new, recurring, or a regression when a fixed one comes back. Every status change stays in the issue's history, with the reason given.
The corpus
FINDBeside the engineering validators sit 109 cognitive-lens agents (Machiavelli, Husserl, Wang Yangming and others) that read an artifact the way a discipline would. They are why the findings are worth tracking. How agents audit agents is on the research page.
SDK & MCP
INTEGRATEMCP servers give the harness direct access to the tracker and the registry. The SDK and the ulu CLI cover everything else.
Define. Run. Decide.
Illustrative mockups of the tracker and the registry. The numbers in them are samples; the real ones are in “Built by operating it” above.
Validates code quality, standards compliance, test coverage, and best practices. Blocks progression if critical issues found.
SDK-first design
Five packages. One pipeline. The SDKs handle auth, type safety, and error handling. The CLI ties them together.
Save runs, track issues, query analytics. The operations layer.
import { OpsClient } from '@uluops/ops-sdk'; const client = new OpsClient({apiKey: process.env.ULUOPS_API_KEY,}); // Save a runconst run = await client.runs.submit({project: 'my-app',agent: 'code-validator',score: 87,issues: findings,}); // Query project analyticsconst trends = await client.analytics.getTrends('my-app');