Compatibility: Pactmark 0.1.x. No network, no external account. The memory-backed runtime is an ephemeral development profile and deliberately fails production readiness.

Run it

Expected output:

What it demonstrates

A complete run

Accepted, planned, one tool call, completed — with a real artifact and evidence record at the end.

A deterministic model driver

An async generator that yields a tool_call then a final. Fully reproducible.

Default-deny policy in the smallest possible form

One rule for R1; everything else denied.

Honest readiness

productionReady: false, because a memory store is not durability.

The tool

examples/minimal-tool-agent/src/example.ts
egress: { mode: "none" } and a frozen fixture together mean this tool is incapable of reaching anything. That is what makes it a good first example — nothing about it can surprise you.

The model driver

The driver names the tool by registration digest. That is not incidental — it is how the example demonstrates that a tool whose schema or security metadata changed cannot be reached by an old reference.

The capabilities declaration

Read this as a list of things this runtime cannot do. It is honest about every one of them, which is why readiness for a production profile fails rather than degrading.

The run

What comes out

Figure 1. Even this minimal run produces the full structure: ordered events, a derived projection, a content-addressed artifact and a bounded evidence record.

What it does not support

The result supports only what the embedded fixture contained during this run. Its memory-backed runtime is an ephemeral development profile and deliberately fails production readiness. No network or external account is used, so nothing here is evidence about a real catalogue service.

Modify it to learn something

1

Change maxToolCalls to 0

Watch the run terminate on budget rather than on completion.
2

Remove the R1 rule from the policy

The tool call is denied with KAF_POLICY_DENIED — and the tool executor records zero calls.
3

Change the tool's input schema without bumping the version

The registration digest changes and the driver’s reference no longer resolves.
4

Ask for a sku the fixture does not have

available: false — the tool returns a truthful negative rather than an error.

Build it yourself

The same agent, written from scratch with every object explained.

Workspace agent

The next step up: bounded filesystem access with real denial paths.