Takt Package
Packages are the publishable units in Takt.
This skill is a routing guide. Treat takt schema package --format toon and takt.json as the source of truth.
Critical Rules
- Never put workflow orchestration in
takt.json. Packages publish capabilities and pin one exact Node version. - Never let workflow concerns leak into capability definitions through raw step scripts or inline OCI images.
- If unsure about available fields, run
takt schema package --format tooninstead of guessing. - Validate after every meaningful package edit with
takt validate package --format toon.
Quick Reference
| Task | Command |
|---|---|
| Get package schema | takt schema package --format toon |
| Validate package | takt validate package --format toon |
| Inspect concepts | takt concepts --format toon |
| Scaffold package | takt init <name> |
Responsibilities
- publish capabilities
- pin an exact Node version
- declare handler entrypoints
- point at input and output schemas
Review Flow
- Read
takt.json. - Run
takt schema package --format toon. - Run
takt validate package --format toon. - Confirm the package pins an exact Node version.
- Confirm each capability defines a handler plus input and output schemas.
Rules
- Search the local package before inventing a new capability.
- The package Node version is the execution contract for every capability.
- Capabilities should define handlers and schemas, not execution-policy knobs.
- Workflow files must never reference package names or container images directly.
- Capability changes should preserve the distinction between reusable interface and package-local action configuration.
Current Command
Use takt init <name> to scaffold a new package, then edit
takt.json.
Smells
- package names appearing directly in workflow steps
- raw container images referenced by workflows
- one-off script paths standing in for capabilities
Handlers and Runtimes
Each capability has a handler.entrypoint pointing at a Node ESM module
inside the package. Takt invokes it with this contract:
TAKT_RUN_ID,TAKT_CAPABILITY,TAKT_PACKAGE_ROOTenv varsTAKT_INPUT_PATH— JSON file containing the merged inputsTAKT_RESULT_PATH— path the handler MUST write its JSON result to- result shape:
{ "output": <any>, "artifacts": [{name, type, value|path, content_type, tags}] }
Capabilities reference a runtime profile via runtime: "<name>" (defaults
to default). Profiles in runtimes configure how the handler is launched:
sandbox: "process"(default) — runs the handler as a plain Node subprocess. No isolation; trust your own handlers.sandbox: "microsandbox"— runs the handler inside a microsandbox microVM. Requires themsbCLI on PATH (see https://microsandbox.dev) and animagefield with a pinned OCI reference such asdocker.io/library/node:22-alpineor a digest-pinned image. Network defaults to disabled; setnetwork.mode: "allow-all"to lift it.
Sandboxing is opt-in — the scaffold ships sandbox: "process" so basic
runs work without extra installs.