twf-cli
Design, visualize, and implement entire Temporal systems — namespaces, workers, workflows, and Nexus — as a validated, visual source of truth.
Write your architecture in .twf and a real parser, language server, and visualizer give you (and your AI agent) compiler-grade feedback on the whole system before you write a line of SDK code — then generate the workers and provision the infra from the same design.
- Catch design errors before code. A real parser and language server validate the whole system — undefined activities, broken Nexus routing, misplaced determinism — while it's still a design, not a production incident.
- See the whole deployment. An interactive graph of namespaces → workers → workflows, plus a tree view that expands calls inline. Architecture you can actually look at.
- One parseable source of truth.
.twfis a file every teammate and every tool reads and validates — not architecture prose buried in a prompt. - Design → running system. Generate Temporal Go SDK code and provision control-plane infra from the same
.twf— or recover a deployment graph straight from production history with the sampler.
activity ReserveFunds(amount: Money) -> (Hold):
reserve(amount)
activity CaptureFunds(hold: Hold) -> (Receipt):
capture(hold)
workflow ChargeOrder(order: Order) -> (Receipt):
signal Cancel():
close fail("cancelled")
activity ReserveFunds(order.amount) -> hold
options:
start_to_close_timeout: 30s
activity CaptureFunds(hold) -> receipt
close complete(receipt)
worker billing:
workflow ChargeOrder
activity ReserveFunds
activity CaptureFunds
namespace payments:
worker billing
options:
task_queue: "billing"
Workflow logic, the worker that hosts it, and the namespace topology — one readable file.
twf-cli is a thin wrapper around the bundled platform binary — same tool, same flags, same output as the standalone twf distribution, installable via pip.
Install
pip install twf-cli
twf --help
The wheel for your platform ships the matching twf binary. Supported platforms (one wheel each): macosx_11_0_arm64, macosx_10_15_x86_64, manylinux2014_x86_64, manylinux2014_aarch64, win_amd64.
The twf CLI
A single Go binary: parser, validator, deployment-graph extractor, and a full LSP server. Every command and flag is discoverable via twf --help and twf <command> --help.
| Command | Description |
|---|---|
twf check <file...> |
Parse and validate .twf files, reporting errors |
twf parse <file...> |
Output the AST as JSON (partial AST even with errors) |
twf symbols <file...> |
List workflows and activities with their signatures |
twf graph <file...> |
Emit the resolved deployment graph (nodes are deployments, edges are dispatches) |
twf graph chunks <file...> |
Decompose a design into independently-implementable chunks at contract boundaries |
twf spec [--list | <slug>] |
Print the embedded TWF language specification |
twf mcp |
Start the MCP server over stdio (agent entry point) |
twf lsp |
Start the language server over stdio |
Common options: --json (structured output) and --lenient (continue past resolve errors). The language server adds real-time diagnostics, completions, hover, go-to-definition, references, rename, code actions, folding, inlay hints, semantic tokens, and signature help.
Use as an MCP server
twf mcp runs a Model Context Protocol server over stdio — the agent entry point. The examples below launch it through npx, so Node.js and npm must be installed and npx must be available on PATH.
Claude Desktop
Add the twf entry to the existing mcpServers object in the Claude Desktop configuration file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"twf": {
"command": "npx",
"args": ["-y", "@temporal-architect/twf", "mcp"]
}
}
}
Restart Claude Desktop after saving the file.
Cursor
Create .cursor/mcp.json in a project to enable twf for that project, or use ~/.cursor/mcp.json to enable it globally. Both locations use the same Cursor MCP configuration shape:
{
"mcpServers": {
"twf": {
"command": "npx",
"args": ["-y", "@temporal-architect/twf", "mcp"]
}
}
}
Continue
Create .continue/mcpServers/twf.yaml at the top level of the workspace. Continue's standalone MCP blocks require the name, version, and schema metadata fields:
name: TWF MCP server
version: 0.0.1
schema: v1
mcpServers:
- name: twf
command: npx
args:
- "-y"
- "@temporal-architect/twf"
- "mcp"
The tools (twf_check, twf_parse, twf_symbols, twf_graph, twf_graph_chunks, twf_spec_list, twf_spec_get) are thin wrappers over the same parser pipeline as the CLI, so their JSON is identical. The embedded language specification is exposed as resources at twf://spec and twf://spec/<slug>.
Subprocess use from Python
import subprocess, json
result = subprocess.run(
["twf", "parse", "workflow.twf"],
capture_output=True, text=True, check=True,
)
ast = json.loads(result.stdout)
Versioning
Versions track the upstream temporal-architect Git tag, so 0.3.x of this package corresponds to v0.3.x of the toolchain.
License
MIT. See LICENSE.
Release files for twf-cli 0.12.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| twf_cli-0.12.0-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| twf_cli-0.12.0-py3-none-manylinux2014_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
| twf_cli-0.12.0-py3-none-manylinux2014_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details |
| twf_cli-0.12.0-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
| twf_cli-0.12.0-py3-none-macosx_10_15_x86_64.whl | Python 3 | none | macOS 10.15+ x86-64 | Details |
Total release size: 39.7 MB
Release files / twf_cli-0.12.0-py3-none-win_amd64.whl
| Download URL | twf_cli-0.12.0-py3-none-win_amd64.whl |
|---|---|
| Size | 8.2 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
b3b04a0cefecd4bb1aa63fc0ec925386482bf1f93d0ed85f4d61d821193bb374
|
|
BLAKE2b-256 checksum How to use checksums |
63968a4e20a7aba209aff21d7125e37c39f33419eb4ddebd63f10d4b016b4044
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / twf_cli-0.12.0-py3-none-manylinux2014_x86_64.whl
| Download URL | twf_cli-0.12.0-py3-none-manylinux2014_x86_64.whl |
|---|---|
| Size | 8.1 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
b1bf3a58d6c590ba4cfabd751b4e84213e6686bf3e8f09c9342ce43bdd1d30a7
|
|
BLAKE2b-256 checksum How to use checksums |
a922224c6fc36ddddffdd22cac13d5fc8522b2c2dbb362a6fe69c32f345ca025
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / twf_cli-0.12.0-py3-none-manylinux2014_aarch64.whl
| Download URL | twf_cli-0.12.0-py3-none-manylinux2014_aarch64.whl |
|---|---|
| Size | 7.4 MB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
d546ac62e9e656e087df854f5b456c9f130ac60aad866594dfa42bddbaf306c2
|
|
BLAKE2b-256 checksum How to use checksums |
2df7a03964beb3ec2c549e074e65a632351230e03ff944cfa04a8984abc6c16e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / twf_cli-0.12.0-py3-none-macosx_11_0_arm64.whl
| Download URL | twf_cli-0.12.0-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 7.8 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
b30e4d80f94a94892ca07787b5df03e2ca3c13963925ff552625ec99cade06de
|
|
BLAKE2b-256 checksum How to use checksums |
9e64e73f78cfd49dc10992b0d33fc632747168be529ff7d930088daadac21b2f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / twf_cli-0.12.0-py3-none-macosx_10_15_x86_64.whl
| Download URL | twf_cli-0.12.0-py3-none-macosx_10_15_x86_64.whl |
|---|---|
| Size | 8.3 MB |
| Tags | Python 3 macOS 10.15+ x86-64 |
|
SHA-256 checksum How to use checksums |
4e4df224db8497c183c2daef4c86db3722ff3954d4e1e5336603e99633ff1c09
|
|
BLAKE2b-256 checksum How to use checksums |
650a4edd453ecf633e1563ad4f9c9a7ac698d4ffe9ad3451d3300de460e77d1e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|