Deterministic local repository context, impact analysis, and merge-readiness evidence for AI agents.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
💡 Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Local-first context and merge evidence for coding agents: turn AI-generated changes into trusted commits.

An agent's output is bounded by two things: the model and the harness around it. The harness includes the prompts, the context it's given, the codebase it works in, and the gates it must pass before code merges. You don't control the model. You control the harness, and a tighter harness lets a cheaper model do the same work with fewer wasted tokens.
Òtítọ́ is that harness layer. It is local-first, deterministic, and model-agnostic: it discovers repositories, builds local indexes, generates task-aware context before an agent edits, scores how much a change actually touches, and gates merge readiness. It works the same way every time, with no server, no account, and no code leaving the machine. Because it depends on software fundamentals rather than any one model, the harness you build today keeps working as models change underneath it.
New in v1.6.0: staged validation receipts, cross-repository workspace receipts, role-aware impact, and host guidance for Gemini and Kimi.
Otito helps the agent understand and bound a task before editing, then gives the maintainer evidence to decide whether to trust the result. A passing local gate is never an automatic merge approval: hosted CI, GitHub review, CODEOWNERS, and the human release decision remain separate authorities.
It does not try to replace opensrc, code-structure, Daytona, or Harnss. It gives developers and coding agents a single CLI that can:
Deterministic merge gates are the differentiated core. This is the human-in-the-loop checkpoint that a model cannot grade for itself:
review_gate tool (gate on the CLI)Local-first context feeds the gates:
code-structureopensrcThe published MkDocs site is a practical discovery and delivery guide:
Read it at:
Code maps use the TypeScript compiler for JS/TS and dedicated language extractors for Go, C#, Python, Java, Ruby, and Rust (see src/lib/code-map/ast-languages.js). Optional external tools are only needed for dependency-source lookup and HTML structure reports.
Install the published package from npm:
You can also run a command without a global install:
For source development:
The current release is available through npm, GitHub Releases, and the MCP Registry as io.github.BASHBOP/otito.
Optional external tools:
Then:
| Goal | Command | Output |
|---|---|---|
| Inspect one repo | otito repo . --json | Repo facts, scripts, languages, entrypoints, and git state |
| Build a code map | otito map . --json | Source files, domains, imports, exports, symbols, and routes |
| Prepare task context | otito context "add a new MCP tool" --path . | Primary files, related files, tests, patterns, and validation commands |
| Generate an agent harness | otito harness . --out .otito/harness.md | Setup, validation, runtime, and context commands |
| Gate an exact staged change | otito gate . --staged --run-validation | Versioned validation outcomes bound to the staged Git tree |
| Gate a product change | otito workspace-gate ../web ../api --request "ship change" | One receipt across staged repositories |
| Review local changes | otito pr . --base origin/main --out .otito/pr-review.md | Changed files, risk prompts, review targets, and test hints |
| Index local projects | otito index ~/projects --discover | External per-user indexes plus a local catalog |
| Search indexed repos | otito search "events controller" | Ranked matches across paths, domains, routes, imports, exports, and symbols |
| Run the MCP server | otito mcp | Stdio MCP server exposing otito tools |
| Track usage & performance | otito dashboard | Self-contained HTML from an opt-in local usage log (off by default) |
| Help improve Otito | otito telemetry share on | Separately opt into a minimal anonymous usage event; no prompts, paths, repo data, or source content |
For Codex, Claude Desktop, VS Code, Cursor, Gemini CLI, Kimi Code, Grok handoff guidance, and generic stdio client snippets, see MCP and Agent Workflows.
| Approach | Strengths | Where otito differs |
|---|---|---|
| Sourcegraph / Cody context | Powerful hosted code search and embedding-based context across an org | otito is local-first and deterministic: no server, no account, no code leaves the machine, and the same query always yields the same packet |
Hand-written CLAUDE.md / rules files | Curated, intent-rich guidance | Hand-written context goes stale; otito regenerates context from the actual code (symbols, imports, routes, tests) on every run and complements a short CLAUDE.md |
grep / ripgrep | Fast, universal text matching | otito ranks whole files by task intent across paths, symbols, exports, and tests, then adds patterns and validation commands. The result is a context packet, not a list of matching lines |
Use the full gate before opening a pull request or publishing a release:
The gate runs:
npm run format:checknpm run lintnpm run typechecknpm run version:checknpm testnpm run test:coveragenpm run eval:accuracynpm run eval:harnessnpm run auditnpm run smokeCoverage currently gates source files at 70% lines, 60% branches, and 75% functions. Generated artifacts under .otito/ are ignored by git, linting, and formatting; keep durable reports there instead of committing them.
The v1.1.0 harness execution evaluation runs only vetted install, test, typecheck, and build commands against committed fixtures. It disables install lifecycle scripts, applies timeouts, and never executes inferred commands from a customer repository.
otito follows Semantic Versioning. Pull requests should identify whether they are no-version-impact, patch, minor, or major changes; maintainers apply the final package version during release.
For longer trust-layer work, use the Builder-Founder Operating Loop to keep every session tied to context, focused changes, visible gates, human decisions, and durable evidence.
Contributions are welcome. Start with CONTRIBUTING.md, open an issue or draft PR for substantial changes, and run npm run ci before requesting review.
All code changes must be reviewed by a maintainer/code owner before merge. The protected main branch requires maintainer approval, passing quality gates, and resolved PR conversations.
Agent repo harness:
Local discovery, indexing, catalog, and search:
Task-aware agent context:
PR review harness:
Merge gate (gate is the canonical v2 command; pass / pass-pr remain as legacy aliases):
In staged mode, changed-path, risk, secret and convergence evidence use the exact Git index tree. Exact-subject source analysis streams raw Git blobs and fails closed above 5,000 source files or 64 MiB. --run-validation additionally executes only a versioned plan from otito.gate.json in the selected base commit against an isolated copy of that staged tree. It records commands, exit outcomes and output hashes in a separate validation receipt; it never records raw output. Supported package-manager script forms include direct and run invocations for npm, pnpm, Yarn, Bun, and Corepack-wrapped commands. Their selected-base script identity is pinned, so a staged manifest cannot replace them with a no-op. Other base-committed commands remain valid policy commands; adding a new package-manager script form requires the same pinning semantics and regression coverage. Validation starts with a scrubbed environment and isolated home; only explicitly allowlisted variables pass through. The source snapshot is exact, while a linked local node_modules directory is explicitly reported as not attested in this first increment. Release and optional analyzer checks still inspect the working tree and remain outside that receipt.
Create the policy in the protected base branch before asking the gate to execute it:
environment.allow is optional. Use it only for the specific variables a protected validation plan requires; values are never recorded in the receipt.
Multi-repo product context:
workspace-gate creates one parent receipt across two or more staged repositories. It binds each repository's exact base, parent and staged-tree identity, changed-file scope, local-gate checks, and any validation receipt. All repositories must have a staged subject before the parent receipt is issued.
GitHub Actions bootstrap:
Local Ollama review:
Local Ollama PR review:
doctorChecks the local runtime and optional external tools.
install / iPrints install commands and current binary status. From a local checkout, --global runs npm install -g .; --link runs npm link.
After installation, use otito as the command.
repo <path>Inspects repo shape: files, package metadata, languages, package managers, scripts, likely entrypoints, git metadata, and ignored-heavy directories.
Git repositories are scanned through git ls-files --cached --others --exclude-standard so ignored files do not pollute harness context. Plain directories fall back to the built-in walker.
discover <root...>Discovers repository roots under one or more local directories without indexing them.
Discovery stops at directories with common repo markers such as package.json, .git, pyproject.toml, go.mod, Cargo.toml, and Package.swift.
index <repo...>Generates per-user external indexes and adds repositories to the local catalog. The inspected repositories are not modified.
The default catalog path is ~/.otito/catalog.json. Set OTITO_CATALOG or pass --catalog to use a different file.
catalogLists repositories currently indexed in the local catalog.
search <query>Searches indexed local repositories by path, domain, kind, route, controller path, imports, exports, and symbols.
By default, search refreshes repo indexes when fingerprints change. Use --offline to read only the stored external indexes.
context <query>Generates a local context-engine packet for a task. The packet includes inferred intent, primary files, related files, matching tests, implementation patterns, validation commands, conflicts, source evidence, and token estimates.
Use this before handing work to a coding agent. It is deterministic and local-first: it relies on repo indexes, code maps, import relationships, tests, and harness commands rather than an external model.
harness <path>Generates a repo harness with setup commands, validation scripts, runtime scripts, context commands, focus areas, and estimated context-token usage.
Use this as the first artifact an agent or CI workflow reads before touching code.
init <path>Scaffolds otito into another repository.
Generated files:
.otito/README.md.github/workflows/otito-ci.ymlThe generated workflow runs on pull requests and commit pushes. Pull request runs generate the report, upload an artifact, and create or update a sticky PR comment. Push runs generate and upload the report artifact without commenting.
structure <path>Runs code-structure against TypeScript files.
If code-structure is missing, the command returns an install hint instead of failing mysteriously. If it is not installed globally but npx is available, otito can run it through npx --yes code-structure.
deps <package>Uses opensrc path <package> to resolve dependency source and optionally search it.
report <path>Generates a shareable developer report.
The default output is formatted for terminal reading and ends with estimated token usage. Use --out for the Markdown artifact or --json for structured data.
workspace <repo...>Generates one product-level report across related repos.
pr <path>Generates a PR review context pack from local git diff metadata, code-map classification, review targets, targeted review prompts, risk flags, suggested verification commands, estimated tokens, and optional GitHub PR comments.
Useful flags:
--base <ref>: compare from a specific base ref. Defaults to PR base, upstream, origin/main, or main.--head <ref>: compare to a specific head ref. Defaults to HEAD.--number <n>: enrich with gh pr view metadata and review comments.--github: ask gh to infer the PR from the current branch.--comment: create or update a sticky GitHub PR comment using gh.This repo includes .github/workflows/otito-ci.yml. The workflow installs dependencies, runs npm run ci, then generates PR or push review context as an uploaded artifact. Use otito init /path/to/target-repo to scaffold an Otito review workflow into another repository.
mcpStarts a stdio MCP server exposing otito as agent-callable tools. MCP repo-map lookups use an external per-user cache with a file fingerprint, refresh when files change, and never write into the inspected repository.
The server is published in the MCP Registry as io.github.BASHBOP/otito.
When wiring it into an MCP host (Claude Desktop, Claude Code, Codex CLI, Cursor, etc.):
If you prefer a globally installed binary:
Ollama can provide the local model, but it does not call MCP tools by itself. To use otito through MCP with a local model, use an MCP-capable agent client that supports Ollama as the model provider and configure the otito server above.
Òtítọ́ exposes 13 MCP tools for repository inspection, context, impact, review, and merge evidence.
| Tool | Purpose |
|---|---|
repo_inspect | Inspect repository shape, scripts, package managers, entrypoints, and git state |
repo_map | Compact JSON code map, filterable by domain, kind, and route |
repo_index | Generate external indexes + catalog entries; dryRun:true discovers read-only |
repo_search | Search the catalog; omit query to return the catalog listing |
context_pack | Build a task-aware context packet |
change_impact | Rank files most likely to own a plain-English change request |
agent_experience | Score Agent Experience (AX 0–100): changeability, containment, guardrails, clarity |
convergence_score | Score intent vs. execution (0–100) with an exact change-subject receipt |
review_context | Diff/comment review context (no verdict) |
review_gate | PASS/WARN/FAIL merge gate: local without pr, GitHub PR gate with pr |
review_verdict | Composite verdict: impact + review_context + review_gate |
workspace_report | Product-level report across multiple repos |
repo_harness | Setup, validation, runtime, and context commands for an agent or CI harness |
matrixPrints the tool evaluation matrix for Greploop, code-structure, opensrc, Daytona, and Harnss.
agent-toolsPrints JSON or Markdown metadata derived from the canonical MCP tool catalog, keeping CLI and MCP integrations aligned.
Wrap first. Measure pain. Build only the missing pieces.
This keeps the project useful quickly while leaving room to replace weak adapters with owned implementations later.
otito is one of four tools that form a deterministic trust layer for AI-assisted development. Each uses static analysis to answer a question people keep handing to an LLM.
More at segunolumbe.com. static analysis, never the model.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/t-t)<a href="https://allmcps.com/mcp/t-t"><img src="https://allmcps.com/api/badge/t-t?style=directory" alt="Òtítọ́ on AllMCPs" /></a>