The trust model

Built to be verified,
not believed.

The agent proposes; you accept; the engine enforces. Every piece of code a KB can run — its validator, its source plugins — is a WebAssembly component whose entire authority is the list of capabilities it imports. That list is checked before a single instruction executes, and the engine is the only thing that can answer it.

01 · The execution boundary
The import list is the permission slip

A component declares a typed world: exactly the host interfaces it may call. There is no ambient filesystem, network, clock, randomness or environment — an import the world doesn't name is an authority that does not exist. Kyyn reads that list off the artifact and checks it against policy before instantiation, every time.

KYYN:VALIDATORwhat a validator may do
world validator {
  // imports: none.
  export registry;
  export validate;
}

Zero imports. A validator receives a canonical snapshot of the tree, returns violations, and structurally cannot observe the clock, the network, the filesystem or anything else.

KYYN:TAPwhat a source plugin may do
world tap {
  import kyyn:tap/host; // evidence, state, config
  import outbound-http; // host-mediated
  export run;
}

A tap's HTTP goes through the engine, which enforces the host allowlist you consented to, applies size and deadline limits, and attaches credentials itself — secrets never enter the plugin's memory.

Before any component runs, kyyn hashes the bytes against the tree or tap pin, extracts the world and full import set, refuses anything outside the profile, and applies memory, table, stack and time budgets. Over-importing, digest-mismatched or malformed components never instantiate.

02 · Deterministic validation
The tree carries its own judge

A KB is a pair: the tree, and the validation function that accepted it. The validator component is committed in the tree itself — not a recipe for rebuilding it. Any machine with the kyyn binary can re-run the exact predicate that accepted any commit: no toolchain, no build, no network.

Same tree, same verdict

Validators run under a pinned deterministic execution profile — no threads, canonical arithmetic, fixed limits. The verdict is a property of the tree, not of whichever machine happened to check it.

Guaranteed to halt

Every run has a fuel budget — an instruction allowance metered by the runtime. An accidental infinite loop in a proposed validator is a clean, reproducible rejection, never a hung accept gate.

Receipts you can replay

Each accept records the component digest, its world, the execution profile, configured limits, outcome and fuel consumed.

validator: sha256:9f2c…
profile: validator@1
verdict: pass · fuel: 1.4M
03 · Source-bound schema changes
The code you review is the code that runs

When your agent proposes a schema change, you review Rust source — so kyyn makes sure the source and the executable can't drift apart.

SOURCE-BOUNDyour agent's proposals

Staging builds the component from the proposal's source and stages both atomically. At accept, kyyn rebuilds from the reviewed source and requires byte-for-byte equality with the staged component. A changed source tree, build input or artifact breaks the binding — there is no silent fallback.

ARTIFACT-ONLYimported components

First-party and third-party components are accepted by digest, like packages from a repository you choose to trust. Kyyn never pretends adjacent source produced them — the review UI labels the trust mode honestly, and the component stays capability-contained at runtime regardless.

04 · Honest boundaries
What the engine enforces — and what it doesn't
Enforced mechanically
No escape to files, network, clocks, env or secrets without an explicit host capability
Memory, stack, fuel and deadline limits on every run
Artifacts immutable by digest — substitution after review is refused
Tap egress only to the hosts you consented to
Opening, validating or fetching a repository never runs build machinery
Yours to judge
Whether an accepted component's policy is the one you wanted — that's what review is for
The tools you deliberately run while authoring, with your own authority
Anything you explicitly mark as trusted native code — labelled loudly, never chosen for you

Containment tells you what code can do. Deciding what it should do stays with you — which is the whole point.

The payoff: one binary, anywhere

The runtime is the sandbox, and it's embedded in kyyn itself. Consuming a KB — validating, pulling, reviewing, running taps — needs no Rust toolchain, no OS sandbox packages, no build step. Identical containment on Linux and macOS. A pinned toolchain is used only when you author schema changes, and kyyn installs it on demand.

$ kyyn validate # no rustc, no bwrap, no builds
$ kyyn pull # fail-closed, replays the tree's own validator
✓ same verdict on every machine
kyyn— from kin: knowledge that knows what it's related to.How it worksSourcesRoadmap