TailraceTailrace

Govern agent data at the boundary.

Detect secrets and PII in-process. Block, tokenize, or restore - at model, tool, and MCP - with zero required config.

$ npx @tailrace/cli init
tailrace.config.tsTypeScript
1import { createTailrace } from "@tailrace/core";
2// import { definePolicy } from "@tailrace/core";
3 
4// Zero-config: secrets → block, common PII → tokenize.
5// Customize with definePolicy({ entities: { email: "tokenize", api_key: "block" } })
6// and pass { policy } to createTailrace.
7// Policy JSON Schema: https://tailrace.dev/schema/policy.v1.json
8export const tailrace = createTailrace();

Input → detect → resolve → apply.

Sensitive values are found in-process, policy decides the action, and audit records the decision - never the raw value. Boundaries

Live pipeline · Input
agentsupport-bot · workflow sess-7f3a
prompt.ts
1// User message → model boundary (out)
2const prompt = `
3 Email billing@example.com
4 Key sk_test_FAKE
5`;

Agent prompt crosses the model boundary

In-process only · zero network on the hot path · same email + workflow → same token

In-process, not a proxy.

No network on the hot path

Detection, policy, and vault run inside your process. No proxy, sidecar, or round-trip to apply a block.

Node, Workers, and Edge

@tailrace/core uses WebCrypto only - the same gate runs where your agent already runs.

Policy is the product

Detection engines are pluggable. Effort goes into resolution, tokenization, and audit at each boundary.

Deployment model (factual contrast; full comparison page later)
TailraceProxy / gateway
Where it runsIn your Node / Worker / Edge processSeparate hop in front of the model
Hot-path networkNone for check / restoreRequired to reach the gateway
Policy ownershipCode + config in your repoOften a hosted control plane

Drop in at the boundary you already use.

Adapters construct the boundary and call check / restore - they contain no policy logic of their own.

Try Tier 0 in your browser.

Paste text, see spans, toggle policy actions. Scanning stays client-side after load - nothing you paste is uploaded.

Open playground

Govern the next boundary.

$ npx @tailrace/cli initGet started