OPEN STANDARD

One file.
Every AI tool.

Before any AI-assisted file edit, write a single JSON file to disk. No SDK. No network. No account. Any tool writes it. Any reader consumes it.

<project>/.omnitype/active-model.json
{
  "model": "claude-sonnet-4-6",
  "tool":  "aider",
  "ts":    1747234567890,
  "file":  "/project/src/main.py"
}
Under 1ms
One atomic file write. No dependency, no API key, no network round-trip. Works in any language in 5 lines.
Your users get attribution
When your tool writes this file, every user gets automatic per-line AI attribution in OmniType and any reader of this spec.
Ships in 13 tools today
Claude Code ships it natively. Cursor, Windsurf, Codex, Cline, Copilot, Gemini CLI, Amp, and more auto-install it. Your users already benefit.
Confidence Tiers · v2

v2 grades every attributed span by how it was sourced. The higher the tier, the less the daemon has to guess. Emit the strongest signal your tool can.

T0Deterministic
Tool emits signed events with exact byte ranges via @omnitype-code/agent-sdk. No inference.
T1Hook-inferred
Tool writes the active-model.json sentinel before each edit (the spec below). Strong, zero-dependency.
T2Retrospective
Classifier reconstructs origin after the fact from timing and process ancestry.
T3Filesystem-only
A bare file change with no signal — best-effort guess.
13 TOOLS LIVE

Works where you already work

Auto-installed by the OmniType extension. Zero config on your end.

Claude Code
Anthropic
PreToolUse hook — ships natively
Cursor
Anysphere
hooks.json preToolUse — auto-installed
Windsurf
Codeium
pre_write_code hook — auto-installed
Codex
OpenAI
PreToolUse hook — auto-installed
Cline
Cline
PreToolUse script — auto-installed
Copilot
GitHub
~/.copilot/hooks/ PreToolUse
Gemini CLI
Google
settings.json BeforeTool — auto-installed
Droid
Factory
settings.json PreToolUse — auto-installed
Firebender
hooks.json preToolUse — auto-installed
Amp
TypeScript plugin — auto-installed
OpenCode
TypeScript plugin — auto-installed
Pi
TypeScript extension — auto-installed
Antigravity
Google
state.vscdb — auto-detected
Coming soon
Aider· no native hook API yetContinue· tracking upstreamGoose· pre-edit hook — proposed
Maintaining a coding tool?Get listed
Integration

Two ways in. For the strongest signal (T0), emit deterministic events from the SDK. For a zero-dependency path (T1), write the sentinel file in your preToolUse hook.

T0Deterministic SDKnpm i @omnitype-code/agent-sdk
import { OmniTypeAgent } from '@omnitype-code/agent-sdk';

const agent = await OmniTypeAgent.tryConnect({
  workspace, sessionId, tool: 'my-agent', model: 'gpt-4o',
});
const txn = await agent.beginTxn(['src/index.ts']);
// …apply the edit, recording exact byte ranges…
await agent.commitTxn(txn, edits);
T1Sentinel file— zero deps. Call this in your preToolUse hook. Pick your language.
import { writeFileSync, mkdirSync } from 'fs';
import { homedir, cwd } from 'os';
import { join } from 'path';
function signalOmniType(model: string, tool: string, file?: string) {
const payload = JSON.stringify(
Object.assign({ model, tool, ts: Date.now() }, file && { file })
);
for (const base of [cwd(), homedir()]) {
try {
const dir = join(base, '.omnitype');
mkdirSync(dir, { recursive: true });
writeFileSync(join(dir, 'active-model.json'), payload);
} catch {}
}
}
signalOmniType('gpt-4o', 'my-agent', '/project/src/index.ts');
Schema
All UTF-8. No nesting. No arrays.
fieldtypedescription
modelstring
Full model identifier. e.g. gpt-4o, claude-sonnet-4-6
toolstring
Stable tool slug in kebab-case. e.g. aider, cline
tsnumber
Unix epoch milliseconds at time of write.
filestring
Absolute path of the file about to be edited. Strongly recommended.
genIdstring
UUID v4 grouping multi-file edits in one agent turn.
required
optional
Rules
01
Write before the edit
The sentinel must land on disk before the file edit begins, not after.
02
Write atomically
Use a temp file and rename to avoid partial reads by the reader.
03
Write to both paths
Write to <project_root>/.omnitype/ (process.cwd()) AND ~/.omnitype/ so readers at both scopes get attribution.
04
Include the file field
Optional in the spec, but strongly recommended. Enables exact per-file attribution with no TTL race.
05
Skip if model unknown
Do not write a placeholder. If you cannot resolve the model, skip writing.
Stable. Forever free. No approval needed.

The file path is permanent. Fields only grow. No registration required. Write the file and you are compatible.