Docs
TAZM documentation
Run a TAZM project from the command line and read the evidence behind every result.
On this page
Overview
- Quick StartSign in, connect a provider, create a project and start a mission.
- Install the CLIOne file, one command. Needs only Python 3.
- Build your first projectFrom an idea to an approved plan and a running mission.
- CLI referenceEvery
tazmcommand, flag, JSON shape and exit code. - API referenceStatus of the public developer API.
- Understand evidenceReceipts, evidence items and how to verify what you downloaded.
What TAZM does
TAZM takes a software project from an approved plan to a verified result. You describe the application or bring an existing codebase, review and approve the plan TAZM writes, and start a mission. TAZM moves the work through its stages and reports the outcome (COMPLETE, REFUSED or BLOCKED) with the evidence behind it.
| Stage | Status |
|---|---|
| Plan | Live |
| Build | Live |
| Debug | In development |
| Test | In development |
| Product Quality | In development |
| Evidence | Live |
| Verified Complete | Live |
Two ways in
- Web. Sign in at tazm.app and use the project screens.
- Command line. Install the
tazmCLI. Every command can print one machine-readable JSON object, so it can be scripted and run in CI.
Note
These docs describe TAZM as it works today. Anything not yet available is marked In development or Not available, and is not documented as if it were.
CLI command reference
Every tazm command with its syntax, arguments, flags, JSON output and exit codes, generated from the CLI's own help.
This reference covers tazm 0.5.0. Syntax, arguments and flags on this page are generated from the CLI's own --help output, so they match the release exactly.
Global flags
Every command accepts:
| Flag | Description |
|---|---|
--server SERVER | TAZM server URL. Needed on the first tazm login (or set TAZM_SERVER); later commands use the server of your session. |
--json | Print exactly one JSON object {"ok", "type", "body"} on standard output and nothing else. |
-h, --help | Show help for the command and exit. |
--version | (top level) Print the version and exit. |
JSON output
With --json, every command prints one object and nothing else on standard output:
{"ok": true, "type": "mission_status", "body": {"mission_id": "…", "mission": {…}, "status": "COMPLETE", "outcome": "COMPLETE", "verdicts": […]}}okistrueon success andfalseon any failure.typenames the result. On failure it is one ofusage,refused,not_available,unreachableorerror, matching the exit code below.bodyis the command's result; each command lists its body fields.
Without --json, results go to standard output and diagnostics to standard error.
Exit codes
| Code | Type | Meaning |
|---|---|---|
0 | — | Success. For mission status, also a mission that ended COMPLETE. |
2 | usage | Invalid arguments or input. Nothing was sent to the server. |
3 | refused | The server refused the request (for example, wrong credentials or a request it does not allow), you declined a confirmation, or a mission ended REFUSED or BLOCKED. |
4 | not_available | The command is not available in this release, or the server you are connected to does not provide it. |
5 | unreachable | The server could not be reached, or a stream went idle for longer than --idle-timeout. |
6 | error | Any other failure, including a server error or a --wait that reached --timeout. |
Important
Outcomes are reported exactly as the server sends them. The CLI never infers COMPLETE, REFUSED or BLOCKED on its own, and only those exact values change the exit code.
Confirmations
Commands that start or change work (project analyze, plan approve, mission start, mission cancel) ask for confirmation on a terminal. Pass --yes to skip the prompt. Without a terminal and without --yes they exit 2 and send nothing; declining exits 3.
tazm login
Sign in to a TAZM server and save the session for later commands.
Syntax
tazm login [-h] [--server SERVER] [--json] [--user USER] [--password-stdin] [--password-file PATH] [--code-stdin] [--code-file PATH]Flags
| Flag | Description |
|---|---|
--server SERVER | Enterprise base URL (or TAZM_SERVER) |
--json | print exactly one {ok,type,body} JSON object |
--user USER, -u USER | user name |
--password-stdin | read the password from stdin |
--password-file PATH | read the password from a 0600 file |
--code-stdin | read the 2FA code from stdin |
--code-file PATH | read the 2FA code from a 0600 file |
Behavior
Asks for the user name (unless --user is given), the password and, when the account uses two-factor authentication, the code. Secrets come from a terminal prompt, standard input (--password-stdin, --code-stdin, one line each, in that order) or a file with mode 0600 -- never from arguments or environment variables.
On success the session (cookie and CSRF token) is saved to session.json with mode 0600; see Install the CLI. Without a terminal, a missing password or two-factor code is a usage error.
Examples
tazm login --server https://tazm.apptazm login -u [email protected] --password-file ~/.tazm/pwJSON output
With --json the command prints one object {"ok", "type", "body"}; on success type is login and body is {server, user, two_factor, …}.
Exit codes
| Code | When |
|---|---|
0 | Signed in. |
2 | Missing server, or no terminal for a required prompt. |
3 | The server refused the credentials or code. |
5 | The server could not be reached. |
tazm logout
End the session on the server and remove the local session file.
Syntax
tazm logout [-h] [--server SERVER] [--json]Flags
| Flag | Description |
|---|---|
--server SERVER | Enterprise base URL (or TAZM_SERVER) |
--json | print exactly one {ok,type,body} JSON object |
Behavior
The local session is always removed. If the server could not confirm the logout, the command says so: the server session may still be valid until it expires.
Examples
tazm logoutJSON output
With --json the command prints one object {"ok", "type", "body"}; on success type is logout and body is {was_logged_in, server_logout}.
Exit codes
| Code | When |
|---|---|
0 | Logged out, or no session existed. |
5 | The server could not be reached (the local session is still removed). |
tazm provider connect
Connect an AI provider account to your TAZM account.
Syntax
tazm provider connect [-h] [--server SERVER] [--json] [--key-stdin] [--key-file PATH] [--model MODEL] [--no-probe] providerArguments
| Argument | Description |
|---|---|
provider | provider id as listed by the server, e.g. claude |
Flags
| Flag | Description |
|---|---|
--server SERVER | Enterprise base URL (or TAZM_SERVER) |
--json | print exactly one {ok,type,body} JSON object |
--key-stdin | read the API key from stdin |
--key-file PATH | read the API key from a 0600 file |
--model MODEL | model to use with this provider |
--no-probe | do not probe the provider after connecting |
Behavior
The provider id must be one the server offers; otherwise the command exits 2 and lists the offered ids. When the provider needs a key, it is read from a prompt, --key-stdin or a 0600 --key-file, and is never printed, logged or stored by the CLI. Any echo of the key from the server is shown as [redacted].
After connecting, the provider is probed (skip with --no-probe) and its connection status is shown exactly as the server reports it. A failed probe exits 3; the connection stays in place.
Examples
tazm provider connect claudetazm provider connect openai --key-file ~/.tazm/openai-keyJSON output
With --json the command prints one object {"ok", "type", "body"}; on success type is provider_connect.
Exit codes
| Code | When |
|---|---|
0 | Connected. |
2 | Unknown provider, or a key given to a provider that takes none. |
3 | The server refused the key or the probe failed. |
tazm project create
Create a project, optionally uploading files and a description.
Syntax
tazm project create [-h] [--server SERVER] [--json] [--description DESCRIPTION] [--file PATH] nameArguments
| Argument | Description |
|---|---|
name | project name |
Flags
| Flag | Description |
|---|---|
--server SERVER | Enterprise base URL (or TAZM_SERVER) |
--json | print exactly one {ok,type,body} JSON object |
--description DESCRIPTION | project description (saved as project details) |
--file PATH | file to upload (repeatable) |
Behavior
Local inputs are checked first: each --file must be a readable regular file, base names must be unique and the name must not be empty. Nothing is sent if a local check fails.
If a step after creation fails, the error names the project that was created (body.project_id). The project is not deleted.
Examples
tazm project create "Booking app" --description "Online booking for a small clinic"tazm project create crm --file spec.md --file roadmap.mdJSON output
With --json the command prints one object {"ok", "type", "body"}; on success type is project_create.
Exit codes
| Code | When |
|---|---|
0 | Created. |
2 | Invalid local input; nothing was sent. |
3 | The server refused the request. |
tazm project analyze
Estimate, start or read the analysis of a project.
Syntax
tazm project analyze [-h] [--server SERVER] [--json] [--estimate-only] [--yes] [--result] [--wait] [--interval SECONDS] [--timeout SECONDS] projectArguments
| Argument | Description |
|---|---|
project | project id |
Flags
| Flag | Description |
|---|---|
--server SERVER | Enterprise base URL (or TAZM_SERVER) |
--json | print exactly one {ok,type,body} JSON object |
--estimate-only | only show the analysis estimate |
--yes, -y | start without the confirmation prompt |
--result | only read the current analysis (start nothing) |
--wait | poll until the analysis is no longer in progress |
--interval SECONDS | poll interval (default 2) |
--timeout SECONDS | wait limit (default 1800) |
Behavior
Shows the analysis estimate first; --estimate-only stops there. Starting needs --yes or a confirmation that shows the estimate. --result only reads the current analysis.
With --wait, the command polls every --interval seconds while the analysis is queued, pending, running or analyzing. When --timeout runs out it exits 6; the analysis keeps running and --result reads it later. Only an exact REFUSED or BLOCKED status is a refusal.
Examples
tazm project analyze prj_123 --estimate-onlytazm project analyze prj_123 --yes --waitJSON output
With --json the command prints one object {"ok", "type", "body"}; on success type is project_analyze.
Exit codes
| Code | When |
|---|---|
0 | Estimate shown, analysis started, or result read. |
2 | No terminal and no --yes. |
3 | Declined, or the analysis is REFUSED or BLOCKED. |
6 | --wait timed out. |
tazm project status
List your projects, or show one project's activity, spend and usage.
Syntax
tazm project status [-h] [--server SERVER] [--json] [project]Arguments
| Argument | Description |
|---|---|
project | project id or exact name (omit to list all projects) |
Flags
| Flag | Description |
|---|---|
--server SERVER | Enterprise base URL (or TAZM_SERVER) |
--json | print exactly one {ok,type,body} JSON object |
Behavior
Without an argument, lists projects and your usage. With a project id or exact name, shows that project; an id match wins, a name that matches several projects exits 2 listing their ids, and no match exits 3. Values are shown exactly as the server reports them; spend is an estimate.
Examples
tazm project statustazm project status prj_123JSON output
With --json the command prints one object {"ok", "type", "body"}; on success type is project_status.
Exit codes
| Code | When |
|---|---|
0 | Shown. |
2 | Ambiguous project name. |
3 | No such project. |
tazm plan show
Show a project's plan, coverage, approval state and findings.
Syntax
tazm plan show [-h] [--server SERVER] [--json] projectArguments
| Argument | Description |
|---|---|
project | project id |
Flags
| Flag | Description |
|---|---|
--server SERVER | Enterprise base URL (or TAZM_SERVER) |
--json | print exactly one {ok,type,body} JSON object |
Behavior
Only reads, so it exits 0 whatever the approval state is, including BLOCKED or REFUSED, and reports that state verbatim. In human mode it prints the plan, coverage, approval status and one line per finding (id, severity, status, title), then the next command to run.
Examples
tazm plan show prj_123tazm plan show prj_123 --jsonJSON output
With --json the command prints one object {"ok", "type", "body"}; on success type is plan_show and body is {project_id, plan, coverage, approval, approval_status, findings}.
Exit codes
| Code | When |
|---|---|
0 | Shown. |
3 | The server refused the request. |
tazm plan approve
Decide open findings and approve a project's plan.
Syntax
tazm plan approve [-h] [--server SERVER] [--json] [--decide FINDING_ID=DECISION] [--yes] projectArguments
| Argument | Description |
|---|---|
project | project id |
Flags
| Flag | Description |
|---|---|
--server SERVER | Enterprise base URL (or TAZM_SERVER) |
--json | print exactly one {ok,type,body} JSON object |
--decide FINDING_ID=DECISION | decide an open finding before approving (repeatable; ids from tazm plan show) |
--yes, -y | approve without the confirmation prompt |
Behavior
Each --decide must be FINDING_ID=DECISION (ids from tazm plan show); a malformed or repeated decision exits 2 and sends nothing. Decisions are sent in the order given, then the approval.
The CLI never picks decisions for you, and the server alone decides whether the plan can be approved. If a step fails, the error names the findings already decided. Only an exact REFUSED or BLOCKED approval status is a refusal.
Examples
tazm plan approve prj_123 --decide F-2=accept --decide F-5=defer --yesJSON output
With --json the command prints one object {"ok", "type", "body"}; on success type is plan_approve and body is {project_id, decisions, approval, status}.
Exit codes
| Code | When |
|---|---|
0 | Approved (or the server's status is shown as-is). |
2 | Invalid --decide, or no terminal and no --yes. |
3 | Declined, the server refused (for example, open findings remain), or the status is REFUSED or BLOCKED. |
tazm mission start
Create and start a mission for a project with an approved plan.
Syntax
tazm mission start [-h] [--server SERVER] [--json] [--mission MISSION_ID] [--yes] [project]Arguments
| Argument | Description |
|---|---|
project | id of the project (with an approved plan) to run |
Flags
| Flag | Description |
|---|---|
--server SERVER | Enterprise base URL (or TAZM_SERVER) |
--json | print exactly one {ok,type,body} JSON object |
--mission MISSION_ID | start an already created mission instead |
--yes, -y | start without the confirmation prompt |
Behavior
Give either a project id or --mission MISSION_ID, not both. With a project id, the mission is created and then started; with --mission, an already created mission is started.
If the start fails after the mission was created, the error names the mission (body.mission_id, created: true, started: false) and gives the retry command tazm mission start --mission ID. Nothing is deleted.
Examples
tazm mission start prj_123 --yestazm mission start --mission msn_456 --yesJSON output
With --json the command prints one object {"ok", "type", "body"}; on success type is mission_start and body is {project_id, mission_id, mission, created, start, status}.
Exit codes
| Code | When |
|---|---|
0 | Started. |
2 | Both or neither of project and --mission; or no terminal and no --yes. |
3 | Declined, or the server refused to create or start the mission. |
tazm mission status
Show a mission's status and verdicts, optionally waiting for it to finish.
Syntax
tazm mission status [-h] [--server SERVER] [--json] [--wait] [--interval SECONDS] [--timeout SECONDS] missionArguments
| Argument | Description |
|---|---|
mission | mission id |
Flags
| Flag | Description |
|---|---|
--server SERVER | Enterprise base URL (or TAZM_SERVER) |
--json | print exactly one {ok,type,body} JSON object |
--wait | poll until the mission is no longer in progress |
--interval SECONDS | poll interval (default 2) |
--timeout SECONDS | wait limit (default 3600) |
Behavior
With --wait, polls every --interval seconds while the mission is queued, pending, starting, running or stopping; any other state ends the wait and is shown verbatim. When --timeout runs out the command exits 6 and the mission continues on the server.
outcome is set only when the status is exactly COMPLETE, REFUSED or BLOCKED; otherwise it is null.
Examples
tazm mission status msn_456tazm mission status msn_456 --wait --jsonJSON output
With --json the command prints one object {"ok", "type", "body"}; on success type is mission_status and body is {mission_id, mission, status, outcome, verdicts}.
Exit codes
| Code | When |
|---|---|
0 | Shown, or the mission ended COMPLETE. |
3 | The mission ended REFUSED or BLOCKED. |
6 | --wait timed out. |
tazm mission logs
Print a mission's timeline, optionally following the live stream.
Syntax
tazm mission logs [-h] [--server SERVER] [--json] [--follow] [--idle-timeout SECONDS] missionArguments
| Argument | Description |
|---|---|
mission | mission id |
Flags
| Flag | Description |
|---|---|
--server SERVER | Enterprise base URL (or TAZM_SERVER) |
--json | print exactly one {ok,type,body} JSON object |
--follow, -f | then follow the live stream until it ends |
--idle-timeout SECONDS | with --follow: give up after this long without stream data (default 300) |
Behavior
Prints the timeline. With --follow it then reads the live event stream and prints each event as it arrives, until the server closes the stream. --idle-timeout (default 300 seconds) limits how long it waits without data. With --json, one object is printed at the end.
Examples
tazm mission logs msn_456tazm mission logs msn_456 --followJSON output
With --json the command prints one object {"ok", "type", "body"}; on success type is mission_logs and body is {mission_id, timeline, followed, stream}.
Exit codes
| Code | When |
|---|---|
0 | Printed. |
5 | The stream went idle for longer than --idle-timeout. |
6 | The server did not return an event stream. |
tazm mission evidence
Show a mission's receipt and download its evidence items.
Syntax
tazm mission evidence [-h] [--server SERVER] [--json] [--ref REF] [--all] missionArguments
| Argument | Description |
|---|---|
mission | mission id |
Flags
| Flag | Description |
|---|---|
--server SERVER | Enterprise base URL (or TAZM_SERVER) |
--json | print exactly one {ok,type,body} JSON object |
--ref REF | fetch this evidence item (repeatable) |
--all | fetch every evidence item the receipt lists |
Behavior
Shows the mission's receipt, which lists its evidence items by reference. --ref REF (repeatable) downloads the named items in the order given; --all downloads every item the receipt lists. --ref and --all cannot be combined.
Each downloaded item is reported as {ref, content_type, bytes, sha256}. The SHA-256 is computed by the CLI from the bytes it received. See Evidence.
Examples
tazm mission evidence msn_456tazm mission evidence msn_456 --all --jsonJSON output
With --json the command prints one object {"ok", "type", "body"}; on success type is mission_evidence and body is {mission_id, receipt, status, refs, evidence}.
Exit codes
| Code | When |
|---|---|
0 | Shown (whatever the mission's status). |
2 | --ref with --all, or a repeated ref. |
6 | --all on a receipt that lists no evidence. |
tazm mission cancel
Ask the server to stop a mission.
Syntax
tazm mission cancel [-h] [--server SERVER] [--json] [--yes] missionArguments
| Argument | Description |
|---|---|
mission | mission id |
Flags
| Flag | Description |
|---|---|
--server SERVER | Enterprise base URL (or TAZM_SERVER) |
--json | print exactly one {ok,type,body} JSON object |
--yes, -y | stop without the confirmation prompt |
Behavior
Sends the stop request after confirmation (or --yes). The CLI does not decide that the mission has stopped: run tazm mission status ID --wait to see what the server reports.
Examples
tazm mission cancel msn_456 --yestazm mission status msn_456 --waitJSON output
With --json the command prints one object {"ok", "type", "body"}; on success type is mission_cancel and body is {mission_id, result, status}.
Exit codes
| Code | When |
|---|---|
0 | Stop requested. |
2 | No terminal and no --yes. |
3 | Declined, or the server refused. |
Evidence Live
What TAZM records to back a result, how to retrieve it, and how to check that what you downloaded is what the server holds.
Why evidence
A builder saying "done" is not accepted as proof. In TAZM, every requirement carries the evidence behind it, and a claim that has no evidence is shown as exactly that. A mission's result is backed by records you can retrieve and check, not by a summary you have to trust.
Mission outcomes
The CLI recognises three outcomes, reported exactly as the server records them. Any other status is shown as-is and is not treated as an outcome.
| Outcome | Meaning | CLI exit code |
|---|---|---|
COMPLETE | The mission ended complete. | 0 |
REFUSED | The mission ended refused. The server's reason is shown. | 3 |
BLOCKED | The mission ended blocked. The server's reason is shown. | 3 |
The CLI never infers an outcome: outcome is set only when the server's status is exactly one of these three values. See tazm mission status.
The receipt
Each mission has a receipt. It records the mission's status and lists its evidence items by reference (ref). Retrieve it with:
tazm mission evidence msn_456Reading the receipt changes nothing, so the command succeeds whatever the mission's status is, and shows that status verbatim.
Evidence items
Download one or more items by reference, or every item the receipt lists:
tazm mission evidence msn_456 --ref ev-teststazm mission evidence msn_456 --all --jsonEach downloaded item is reported as:
| Field | Description |
|---|---|
ref | The item's reference, as listed in the receipt. |
content_type | The media type the server returned. |
bytes | Size of the item in bytes. |
sha256 | SHA-256 of the exact bytes received, computed by the CLI. |
content | The parsed object, for application/json items. |
text | The UTF-8 text for text items; null for binary items, which report only their size and hash. |
Verifying what you downloaded
Because sha256 is computed by the CLI over the bytes it received, you can record it and compare it later with a fresh download. Matching hashes mean you are looking at the same evidence.
tazm mission evidence msn_456 --all --json > evidence-1.jsontazm mission evidence msn_456 --all --json > evidence-2.jsonCompare the sha256 values of each ref in the two files: an item whose hash differs is not the same item.
Verdicts
tazm mission status returns the mission's verdicts together with its status. They are shown exactly as the server records them.
Warning
Not yet documented: awaiting engineering confirmation. The field-by-field schema of the receipt and of verdicts, the meaning of requirement states (PASS, FAIL, UNPROVEN), and the source-identity fields (revision, acceptance, snapshot and source digests, verified source tree, final commit) will be documented once engineering confirms their exact behavior. Until then, rely only on what this page states.
API Not available
Status of the public TAZM developer API.
Important
The public developer API is not available yet. TAZM currently authenticates through the product session model and does not yet expose a supported public developer API-key surface.
What this means
- There are no developer API keys or access tokens to issue today.
- The HTTP endpoints the TAZM web app and CLI use internally are not a public API. They are not documented here, they can change without notice, and they are not supported for direct use.
Automate with the CLI instead
Everything the API would be used for today (creating projects, approving plans, starting missions, reading status, logs and evidence) is available through the tazm CLI. With --json, every command prints exactly one machine-readable object and exits with a documented code, so it can be used from scripts and CI.
tazm mission status msn_456 --wait --jsonSee the command reference for the JSON shape and exit codes.
When the API ships
This section will document authentication, projects, plans, missions, evidence, errors, idempotency, rate limits and response objects for the public API. Until then, it lists nothing that is not available.