Table of Contents

Global Options

These flags are accepted by every hence command. They can appear before or after the subcommand. Values set via flags take precedence over environment variables.

Flag Description
--agent AGENT Agent name to act as. Overrides the HENCE_AGENT environment variable.
-f, --file FILE Path to a local .spl plan file, a hence://PASSPHRASE P2P URL, or a https://hence.run/p/TOKEN hosted URL. Overrides the HENCE_PLAN environment variable.
-h, --help Print help text for the command and exit.
-V, --version Print the installed hence version and exit.

Environment Variables

Environment variables provide defaults that apply across your shell session. They are convenient for interactive use and in CI pipelines where specifying flags on every command would be repetitive.

Variable Description
HENCE_AGENT Default agent name used by all commands that accept --agent. Set this in your shell profile to avoid repeating --agent on every invocation.
HENCE_PLAN Default plan file (local path, hence://PASSPHRASE P2P URL, or https://hence.run/p/TOKEN hosted URL) used by all commands that accept a plan argument. Useful when you are working in a single plan for an extended session.
NO_COLOR Disable colored output when set to any non-empty value. Follows the no-color.org convention. Equivalent to --no-color.
HENCE_DEBUG Enable verbose debug logging to stderr when set to 1.
# Set once, omit from every command
export HENCE_AGENT=alice
export HENCE_PLAN=plan.spl

hence task next          # equivalent to: hence task next plan.spl --agent alice
hence plan board         # equivalent to: hence plan board plan.spl

Setup

Commands for creating and validating plan files before any agents start working.

hence plan init <file.spl>

Create a new plan file from a template. The generated .spl file contains a skeleton with all mandatory sections filled in with placeholder values: a (meta plan ...) block, an (agents ...) block, a sample task with readiness rules, and default assignment rules. Open the file and replace the placeholders to describe your actual project.

Synopsis

hence plan init <file.spl>

Arguments

ArgumentDescription
<file.spl> Path where the new plan file will be written. If the file already exists, it will be overwritten.

Examples

hence plan init project.spl
hence plan init ~/work/my-feature/plan.spl
Tip
After running plan init, open the file and replace the placeholder agent names, task IDs, and task descriptions before sharing it with your team.

hence plan validate <file> [--strict] [--json]

Parse and type-check a plan file, reporting all errors and warnings. The validator checks for syntax errors, undefined task references in dependency edges, duplicate IDs, unreachable tasks, and other structural problems. Use this command in CI before merging changes to a plan.

Synopsis

hence plan validate <file> [--strict] [--json]

Arguments & Flags

FlagDescription
<file> Path to the .spl plan file to validate.
--strict Treat warnings as errors. The command exits with a non-zero code if any warning is found, making it safe for use as a CI gate.
--json Emit results as a JSON array of diagnostic objects instead of human-readable text.

Examples

# Basic validation — shows errors and warnings
hence plan validate plan.spl

# Fail on any warning (good for CI)
hence plan validate plan.spl --strict

# Machine-readable output for tooling
hence plan validate plan.spl --strict --json

Plan Views

Read-only commands that render different projections of a plan's current state. None of these commands modify the plan file.

hence plan board <file> [OPTIONS]

Render a Kanban-style task board in the terminal. Tasks are organised into five columns: BACKLOG (not yet ready), READY (assignable), IN PROGRESS (claimed), BLOCKED, and DONE. This is the primary day-to-day view for humans monitoring a running plan.

Synopsis

hence plan board <file> [--agent NAME] [-v] [--tree] [--dag] [--format NAME] [--json]

Flags

FlagDescription
--agent NAME Filter the board to show only tasks assigned to or claimable by NAME.
-v Verbose mode. Includes task descriptions and dependency annotations beneath each task card.
--tree Render the board as an indented dependency tree rather than columns.
--dag Render the board as a directed acyclic graph (DAG) representation of task dependencies.
--format NAME Use an external formatter plugin (hence-board-{NAME}) for custom board output.
--json Emit the board state as structured JSON, suitable for piping into other tools.

Examples

# Default Kanban board
hence plan board plan.spl

# Verbose board with descriptions
hence plan board plan.spl -v

# Show only alice's tasks
hence plan board plan.spl --agent alice

# Dependency tree view
hence plan board plan.spl --tree

# DAG view
hence plan board plan.spl --dag

# Machine-readable JSON for scripting
hence plan board plan.spl --agent alice --json

hence plan status <file> [OPTIONS]

Display every fact and rule conclusion currently provable by the defeasible reasoner. This is the authoritative low-level view of what the reasoner "knows" about a plan at a given moment. Useful for debugging unexpected board states — if a task is not appearing as READY, plan status will show you exactly which conclusions are present and which are absent.

Synopsis

hence plan status <file> [--json] [--trust] [--at TIME] [--policy FILE]

Flags

FlagDescription
--json Emit all conclusions as a JSON array.
--trust Show trust weights alongside each conclusion.
--at TIME Reason as-of a specific point in time (ISO 8601, e.g. 2026-01-15T10:00:00Z). Useful for auditing historical plan states.
--policy FILE Path to a trust policy file to apply when evaluating conclusions.

Examples

# List all derived conclusions
hence plan status plan.spl

# Machine-readable output
hence plan status plan.spl --json

# Show trust weights
hence plan status plan.spl --trust

# Reason as-of a historical point in time
hence plan status plan.spl --at 2026-01-15T10:00:00Z

hence plan summary <file> [--json]

Print a compact progress overview for the plan. Shows total task count, a breakdown of tasks by state (BACKLOG / READY / IN PROGRESS / BLOCKED / DONE), and an overall completion percentage. Intended for quick status checks and dashboard integrations.

Synopsis

hence plan summary <file> [--json]

Flags

FlagDescription
--json Emit the summary as a JSON object.

Examples

hence plan summary plan.spl

# Machine-readable summary
hence plan summary plan.spl --json

Example output:

Plan: My Feature
Status: active
Created: 2026-01-15

Progress: 2/8 tasks done (25%)
  Backlog: 2 | Ready: 3 | In Progress: 1 | Blocked: 0 | Done: 2

Agents:
  alice: 2 done

hence plan info <file> [--json]

Show the plan's metadata as declared in its (meta plan ...) block. Displays the plan's id, title, version, status, description, and author fields. Use this to quickly confirm which plan version you are working with, or to extract metadata programmatically.

Synopsis

hence plan info <file> [--json]

Flags

FlagDescription
--json Emit the metadata as a JSON object.

Examples

# Human-readable metadata
hence plan info plan.spl

# JSON for scripting
hence plan info plan.spl --json

Example output:

Plan:
  Title: User Authentication
  Status: active
  Created: 2026-02-14

Task Lifecycle

Commands that advance tasks through their states: from READY through IN PROGRESS to DONE (or BLOCKED). All write commands append a timestamped (claims ...) block to the plan file — they never edit existing lines, preserving a full audit trail.

hence task next <file> [--agent NAME] [--json]

Show the next available actions for the current agent. Queries the reasoner for all tasks that are READY and assigned to the agent, then prints them with copy-pasteable hence task claim commands so you can proceed immediately. This is the recommended starting point at the beginning of each work session.

Synopsis

hence task next <file> [--agent NAME] [--json]

Flags

FlagDescription
--agent NAME Show next tasks for NAME rather than the agent set by HENCE_AGENT.
--json Emit available tasks as a JSON array.

Examples

# Set your agent identity once
export HENCE_AGENT=alice

# See what to work on next
hence task next plan.spl

# Check tasks for a different agent
hence task next plan.spl --agent bob

# JSON output for automation
hence task next plan.spl --json

hence task assign [file] [--json]

Display all agent-to-task assignment conclusions currently derived by the reasoner. Lists every assign-to-TASK-AGENT fact that is currently provable.

Synopsis

hence task assign [file] [--json]

Flags

FlagDescription
--json Emit assignments as JSON.

Examples

# All current assignments
hence task assign plan.spl

# Assignments as JSON
hence task assign plan.spl --json

hence task claim <task> [file] [--agent NAME] [--force]

Claim a task, marking it as IN PROGRESS. Appends a timestamped (claims ...) block to the plan file containing a (given claimed-TASK) assertion, signed with the agent's identity. A task must be in the READY state before it can be claimed. Claiming is idempotent — claiming an already-claimed task by the same agent is a no-op.

Synopsis

hence task claim <task> [file] [--agent NAME] [--force]

Arguments & Flags

Argument / FlagDescription
<task> The task ID to claim (as declared in the plan).
[file] Plan file to update. Defaults to HENCE_PLAN if set.
--agent NAME Claim the task on behalf of NAME. Defaults to HENCE_AGENT.
--force Force claim even if the task is not ready.

Examples

# Claim the "setup" task (agent from HENCE_AGENT)
hence task claim setup plan.spl

# Claim on behalf of a specific agent
hence task claim setup plan.spl --agent alice

# Force claim a task that is not yet ready
hence task claim setup plan.spl --force

hence task unclaim <task> [file]

Release a previously claimed task, reverting it to the READY state. Useful when an agent needs to hand off work or when a claim was made in error. Appends a (retracts claimed-TASK) statement to the plan file. The agent identity is always resolved from the HENCE_AGENT environment variable.

Synopsis

hence task unclaim <task> [file]

Arguments & Flags

Argument / FlagDescription
<task> The task ID to release.
[file] Plan file to update.

Examples

# Release the "setup" task so another agent can claim it
hence task unclaim setup plan.spl

hence task complete <task> [file]

Mark a task as DONE. Appends (given completed-TASK) to the plan inside a signed (claims ...) block. Completing a task unlocks any downstream tasks whose readiness rules depend on this task being done — they will transition to READY on the next board refresh. The agent identity is always resolved from the HENCE_AGENT environment variable.

Synopsis

hence task complete <task> [file]

Arguments & Flags

Argument / FlagDescription
<task> The task ID to mark complete.
[file] Plan file to update.

Examples

# Mark "setup" as done
hence task complete setup plan.spl

hence task block <task> <reason> [file]

Block a task with a human-readable reason string. The task will appear as BLOCKED on the board until explicitly unblocked. Blocking is recorded as a timestamped claim so the reason and who blocked it are part of the audit trail. Use this to signal that external action is required before the task can proceed. The agent identity is always resolved from the HENCE_AGENT environment variable.

Synopsis

hence task block <task> <reason> [file]

Arguments & Flags

Argument / FlagDescription
<task> The task ID to block.
<reason> A human-readable string explaining why the task is blocked. Enclose in quotes if it contains spaces.
[file] Plan file to update.

Examples

# Block "deploy" pending security sign-off
hence task block deploy "waiting for security sign-off" plan.spl

# Block "integrate" with a multi-word reason
hence task block integrate "third-party API returning 503" plan.spl

hence task unblock <task> [file]

Remove a block from a previously blocked task, returning it to its natural state as determined by the reasoner (typically READY if prerequisites are met). Appends a retraction of the blocking claim to the plan file. The agent identity is always resolved from the HENCE_AGENT environment variable.

Synopsis

hence task unblock <task> [file]

Arguments & Flags

Argument / FlagDescription
<task> The task ID to unblock.
[file] Plan file to update.

Examples

# Clear the block on "deploy"
hence task unblock deploy plan.spl

hence task assert <spl> [file] [--agent NAME] [--task TASK]

Assert arbitrary SPL facts or rules into a plan. The expression is appended inside a signed (claims ...) block. This is the general-purpose escape hatch for recording findings, intermediate results, or new defeasible rules that were not anticipated at plan-authoring time. Use --task to tag the assertion with the task you are currently working on, so the provenance is clear in the audit trail.

Synopsis

hence task assert <spl> [file] [--agent NAME] [--task TASK]

Arguments & Flags

Argument / FlagDescription
<spl> A valid SPL expression (fact or rule) to assert. Wrap in single quotes to protect special characters from the shell.
[file] Plan file to update.
--agent NAME Sign the assertion as NAME. Defaults to HENCE_AGENT.
--task TASK Tag the assertion with the task ID you are working on, for provenance tracking.

Examples

# Assert a simple fact
hence task assert '(given tests-passing)' plan.spl

# Assert a fact tagged to the current task
hence task assert '(given integration-approved)' plan.spl --task review

# Assert a new defeasible assignment rule
hence task assert '(normally r-new (and ready-x agent-y-available) assign-to-x-y)' plan.spl
Note
Assertions are appended — they never modify existing lines. The full history of assertions is always visible in the plan file and is used when computing provenance via hence query explain.

Query & Explanation

Commands for introspecting the reasoner's conclusions — both what is provable and why, and what is not provable and why not. These commands are read-only.

hence query explain <literal> <file> [--json]

Show the derivation tree for a given conclusion. Explains step-by-step why the reasoner considers a literal to be true, tracing back through each rule and supporting fact. Output includes the contributing sources (which agents asserted the relevant facts) and a derivation tree showing which rule fired and which premises it depended on.

Synopsis

hence query explain <literal> <file> [--json]

Arguments & Flags

Argument / FlagDescription
<literal> The conclusion to explain (e.g. ready-auth, assign-to-auth-coder).
<file> The plan file to reason over.
--json Emit the proof tree as JSON.

Output format

Output includes a Contributing Sources section listing which agents provided the supporting facts, and a Derivation Tree showing the rule chain. Each node shows the literal, the rule that derived it (via RULE), and the agent source (from AGENT). The hence query why-not command provides the complementary diagnostic for literals that are not provable.

Examples

# Why is "ready-auth" true?
hence query explain ready-auth plan.spl

# Explain an assignment conclusion
hence query explain assign-to-auth-coder plan.spl

# JSON proof tree for tooling
hence query explain assign-to-auth-coder plan.spl --json

hence query why-not <literal> <file> [--json]

Debug why a conclusion is not provable. Shows which preconditions are missing or which defeating rules are active. This is the primary diagnostic tool when a task is stuck in BACKLOG or an expected assignment is not appearing.

Synopsis

hence query why-not <literal> <file> [--json]

Arguments & Flags

Argument / FlagDescription
<literal> The conclusion you expect to hold but does not.
<file> The plan file to reason over.
--json Emit the diagnosis as JSON.

Examples

# Why isn't "ready-deploy" provable yet?
hence query why-not ready-deploy plan.spl

# Debug a missing completion fact
hence query why-not completed-auth plan.spl --json

hence query require <literal> [file] [-v] [--assume FACTS]

Abductive reasoning: given a goal literal, compute the minimal sets of additional facts that, if asserted, would make the literal provable. This is useful for planning — it tells you exactly what needs to happen before a task can become READY or before an assignment can be made.

Synopsis

hence query require <literal> [file] [-v] [--assume FACTS]

Arguments & Flags

Argument / FlagDescription
<literal> The goal literal to derive requirements for.
[file] The plan file to reason over. Defaults to HENCE_PLAN if set.
-v Verbose output — shows additional explanation of each requirement.
--assume FACTS Comma-separated list of facts to treat as already true when computing requirements. Useful for exploring "what else do I still need?"

Examples

# What's needed to make "ready-deploy" provable?
hence query require ready-deploy plan.spl

# Same, assuming ops availability is already guaranteed
hence query require assign-to-deploy-ops plan.spl --assume 'agent-ops-available'

# Verbose output with explanations
hence query require ready-deploy plan.spl -v

hence query what-if <file> <facts...> [--json]

Hypothetical reasoning: given a set of additional facts, compute which conclusions would change compared to the current plan state. Shows new conclusions that would become provable and existing conclusions that would be retracted. Useful for reasoning about the effect of completing tasks or asserting findings before actually committing those changes to the file.

Synopsis

hence query what-if <file> <facts...> [--json]

Arguments & Flags

Argument / FlagDescription
<file> The plan file to reason over.
<facts...> One or more SPL fact expressions to add hypothetically. Each must be a valid SPL literal.
--json Emit the diff of changed conclusions as JSON.

Examples

# What happens if tests pass and review is approved?
hence query what-if plan.spl '(given tests-passing)' '(given review-approved)'

# Hypothetical agent availability
hence query what-if plan.spl '(given agent-ops-available)' --json

hence query describe <file> <labels...> [--json]

Show the definition and metadata for one or more labeled elements in the plan — tasks, rules, agents, or other named constructs. Useful for quickly looking up what a rule does or what a task's description says without opening the raw plan file.

Synopsis

hence query describe <file> <labels...> [--json]

Arguments & Flags

Argument / FlagDescription
<file> The plan file to inspect.
<labels...> One or more labels to describe. You can pass multiple labels separated by spaces.
--json Emit descriptions as JSON.

Examples

# Describe a task
hence query describe plan.spl task-auth

# Describe a rule
hence query describe plan.spl r-assign-security --json

# Describe multiple elements at once
hence query describe plan.spl task-auth task-deploy r-ready-deploy

hence query trace <file>

Emit a full reasoning trace showing every rule that was evaluated during the reasoning pass: which rules fired (produced a conclusion), which were considered but did not fire (preconditions not met), and which were defeated by a higher-priority rule. Intended for deep debugging of complex defeasible reasoning scenarios.

Synopsis

hence query trace <file>

Examples

# Full reasoning trace
hence query trace plan.spl

# Pipe through a pager for large plans
hence query trace plan.spl | less
Warning
Trace output can be very large for plans with many rules. Pipe to less or redirect to a file when working with complex plans.

Agent Management

Commands for managing agent identity and running automated agents against plan tasks.

hence agent whoami [--json]

Display the current agent's identity information. Prints the Ed25519 public key and the libp2p PeerId for this installation. The public key is embedded in every (claims ...) block written to plan files.

Synopsis

hence agent whoami [--json]

Flags

FlagDescription
--json Emit identity information as a JSON object with fields: peerId and publicKey.

Example output

supervisor:ed25519:xfRAzZFG
agent:ed25519:xfRAzZFG
evaluator:ed25519:3jB3fzQT
PeerId: 12D3KooWP96WBe...

Examples

# Print identity to terminal
hence agent whoami

# Machine-readable identity (includes publicKey field)
hence agent whoami --json

hence agent spawn [file] [OPTIONS]

Spawn an automated agent to execute a plan task. spawn runs a full supervisor loop that: selects a task (or uses --task), assembles context from the plan, launches the agent provider (e.g. Claude), manages the lease and liveness heartbeat, evaluates the result, and optionally merges the output and reports completion back to the plan. This is the core command for automated multi-agent execution.

Synopsis

hence agent spawn [file] [--task TASK] [--agent NAME] [OPTIONS]

Flags

FlagDescription
--task TASK Execute a specific task. If omitted, spawn auto-selects the next available task assigned to this agent.
--agent NAME Agent provider to use (e.g. claude, codex). Determines which LLM backend is invoked.
--cleanup Remove the agent's worktree after the task completes. Keeps the working directory clean in long-running pipelines.
--no-merge Skip the merge step and result reporting after the agent finishes. The agent runs but its output is not automatically integrated.
--show-prompt Print the assembled prompt to stderr before launching the agent. Useful for reviewing context assembly without committing to a full run.
--dry-run Assemble the context and print the prompt but skip launching the agent entirely. Combine with --show-prompt for inspection.
--token-budget N Maximum token budget for context assembly. The assembler will trim plan context to stay within this limit.
--trust-plan-checks Trust evaluate-checks directives from the plan's (meta ...) block when evaluating task completion.
--lease-ttl DURATION Lease TTL as ISO 8601 duration (e.g. PT30M, PT1H). Overridden by plan metadata.
--idle-timeout DURATION Idle timeout as ISO 8601 duration (e.g. PT5M, PT10M). Overridden by plan metadata.
--timeout DURATION Wall-clock timeout as ISO 8601 duration (e.g. PT60M, PT2H). Overridden by plan metadata.
--events FILE Emit structured NDJSON events to FILE, or - for stdout. Events cover lifecycle transitions: start, lease renewal, completion, failure.
--session NAME Session name attached to all emitted events. Useful for correlating events from multiple concurrent spawns.
--json Emit the final spawn result as a JSON object on stdout.

Examples

# Auto-select and execute the next available task
hence agent spawn plan.spl

# Execute a specific task with a specific provider
hence agent spawn plan.spl --task auth --agent claude

# Spawn with cleanup and JSON result
hence agent spawn plan.spl --cleanup --json

# Stream events to stdout for monitoring
hence agent spawn plan.spl --events - --session my-run

# Inspect the assembled prompt without running the agent
hence agent spawn plan.spl --dry-run --show-prompt
Note
agent spawn requires the agent provider to be installed and accessible on your PATH or configured via the hence agent registry. See the LLM Integration guide for setup instructions.

hence agent watch [file] [OPTIONS]

Watch a plan file for state changes. Polls the plan and emits events whenever a task transitions state, an assignment changes, or a new claim is appended. Can optionally auto-spawn agents when tasks become READY via --spawn. Useful as a long-running daemon in CI or as a lightweight orchestrator.

Synopsis

hence agent watch [file] [OPTIONS]

Flags

FlagDescription
--spawn Auto-spawn agents for ready tasks.
--cleanup Clean up worktrees after task completion.
--max-tasks N Maximum number of tasks to auto-spawn before exiting.
--delay SECS Delay in seconds between task checks (default: 5).
--pool Enable worktree pool pre-allocation.
--dry-run Pass --dry-run to spawned agents (requires --spawn).
--events FILE Emit NDJSON events to FILE, or - for stdout.
--session NAME Session name to tag emitted events (requires --events).
--json Output state changes as JSON.

Examples

# Watch for changes and print to terminal
hence agent watch plan.spl

# Watch and log events to a file
hence agent watch plan.spl --events events.jsonl

# Auto-spawn agents for ready tasks
hence agent watch plan.spl --spawn

# Auto-spawn with cleanup and a limit of 5 tasks
hence agent watch plan.spl --spawn --cleanup --max-tasks 5

# Watch with JSON output and tagged session events
hence agent watch plan.spl --json --events - --session my-run-2026

Remote Plans (hence.run)

Commands for publishing plans to hence.run and synchronising between local, peer-to-peer, and hosted remote replicas. Hosted plans on hence.run are identified by https://hence.run/p/TOKEN URLs. P2P plans are identified by hence://PASSPHRASE addresses using BIP-39 passphrases (4 words, hyphen-separated).

hence remote new [file]

Publish a local plan file to hence.run. Creates a new hosted replica and returns the https://hence.run/p/TOKEN URL for that plan. Once published, any agent with the URL can sync the plan and append claims. The file argument is optional; if omitted, HENCE_PLAN is used.

Synopsis

hence remote new [file]

Arguments

ArgumentDescription
[file] Local .spl plan file to publish. Defaults to HENCE_PLAN if set.

Examples

# Publish plan.spl to hence.run
hence remote new plan.spl
# → https://hence.run/p/a1b2c3d4

hence remote cp <src> [dst] [--p2p]

Copy a plan between any combination of local file paths, P2P passphrases, and hence.run-hosted URLs. Use this to push a local plan to a remote, pull a remote plan to disk, or replicate between two remotes. The destination is optional. Use --p2p to create a new P2P plan with a randomly generated BIP-39 passphrase.

Synopsis

hence remote cp <src> [dst] [--p2p]

Arguments & Flags

Argument / FlagDescription
<src> Source: a local file path, a hence://PASSPHRASE P2P address, or a https://hence.run/p/TOKEN URL.
[dst] Destination: a local file path, a P2P passphrase, or a hosted URL. Optional.
--p2p Create a new P2P plan (generates a random BIP-39 passphrase as the destination).

Examples

# Push local plan to a hosted remote
hence remote cp plan.spl https://hence.run/p/a1b2c3d4

# Pull a hosted plan to a local file
hence remote cp https://hence.run/p/a1b2c3d4 local.spl

# Create a new P2P plan from a local file (passphrase generated)
hence remote cp plan.spl --p2p

# Copy to a specific P2P passphrase
hence remote cp plan.spl hence://abandon-ability-able-about

hence remote ls [-v] [--json]

List all plans known to this installation: locally tracked plans, P2P replicas, and registered hence.run-hosted plans. Displays the plan identifier, local path (if any), and sync status for each.

Synopsis

hence remote ls [-v] [--json]

Flags

FlagDescription
-v, --verbose Show additional details for each plan (timestamps, peer counts, etc.).
--json Emit the list as a JSON array.

Examples

# List all registered plans
hence remote ls

# Verbose listing
hence remote ls --verbose

# Machine-readable output
hence remote ls --json

hence remote rm <plan> [--dry-run]

Archive a remote plan on hence.run. The plan is no longer served or synchronised, but its history is retained for audit purposes. This does not delete local files.

Synopsis

hence remote rm <plan> [--dry-run]

Arguments & Flags

Argument / FlagDescription
<plan> The https://hence.run/p/TOKEN URL of the remote plan to archive.
--dry-run Print what would happen without actually performing the operation.

Examples

# Archive a remote plan
hence remote rm https://hence.run/p/a1b2c3d4

# Preview what would be removed
hence remote rm https://hence.run/p/a1b2c3d4 --dry-run

hence remote serve [--listen ADDR]

Start a persistent P2P sync daemon for all registered plans. The daemon listens for incoming sync requests and keeps all local replicas up to date with remote changes. Run this in the background on an always-on machine to enable real-time collaboration without relying on hence.run polling.

Synopsis

hence remote serve [--listen ADDR]

Flags

FlagDescription
--listen ADDR Listen address in multiaddr format (default: /ip4/0.0.0.0/tcp/4001).

Examples

# Start sync daemon in the foreground
hence remote serve

# Listen on a custom port
hence remote serve --listen /ip4/0.0.0.0/tcp/9000

# Run as a background process
hence remote serve &

hence remote forget [passphrase] [--dry-run]

Remove a P2P plan from this installation, identified by its BIP-39 passphrase (4 words, hyphen-separated). Deletes the local replica and clears cached credentials. Other peers still retain their copies. The passphrase argument is optional — if omitted, it is read from stdin.

Synopsis

hence remote forget [passphrase] [--dry-run]

Arguments & Flags

Argument / FlagDescription
[passphrase] The BIP-39 passphrase (4 words, hyphen-separated, e.g. abandon-ability-able-about) identifying the P2P plan. If omitted, reads from stdin.
--dry-run Print what would happen without actually performing the operation.

Examples

# Forget a P2P plan by passphrase
hence remote forget abandon-ability-able-about

# Read passphrase from stdin (e.g. piped from a secrets manager)
hence remote forget

# Preview what would be forgotten
hence remote forget abandon-ability-able-about --dry-run

Utility

Miscellaneous commands for LLM integration, translation, interactive exploration, and shell setup.

hence llm [spl|dfl]

Print the LLM reference documentation for the SPL (Structured Plan Language) or DFL (Defeasible Logic) format to stdout. Pipe this into an LLM's context window so the model understands how to read and write .spl files. This is the recommended way to inject format knowledge into an agent before asking it to author or modify a plan.

Synopsis

hence llm [spl|dfl]

Arguments

ArgumentDescription
spl Output the SPL format reference (syntax, block types, examples).
dfl Output the defeasible logic reference (rule forms, provability semantics).

Examples

# Print SPL reference to terminal
hence llm spl

# Save to a file for use in a prompt
hence llm spl > /tmp/spl-ref.txt

# Pipe directly into an LLM call
hence llm spl | llm "Given the following SPL spec, write a plan for..."

hence plan translate <spec> [-o FILE] [--agent NAME] [--context TEXT]

Translate a markdown specification file into a complete .spl plan using a headless agent. The agent reads the specification, infers tasks, dependencies, agents, and readiness/assignment rules, and writes a plan skeleton to --output (or stdout if omitted). Review the generated plan before use — machine-generated plans may need manual refinement.

Synopsis

hence plan translate <spec> [-o FILE] [--agent NAME] [--context TEXT]

Arguments & Flags

Argument / FlagDescription
<spec> Path to the markdown requirements or specification file.
-o, --output FILE Path where the generated .spl plan will be written. If omitted, the plan is printed to stdout.
--agent NAME Agent provider to use for translation (e.g. claude).
--context TEXT Additional context to include in the translation prompt.

Examples

# Translate a requirements file into a plan (output to stdout)
hence plan translate requirements.md

# Translate and save to a file
hence plan translate requirements.md --output plan.spl

# Translate using a specific agent provider
hence plan translate requirements.md --output plan.spl --agent claude

# Translate and immediately validate
hence plan translate requirements.md --output plan.spl && hence plan validate plan.spl

hence plan decompose <task> [file] [--agent NAME | --prompt-only | --stdin] [-o FILE] [--merge] [--context TEXT] [--json] [--max-subtasks N]

Decompose an existing task into finer-grained subtasks using abduction-guided LLM expansion. The command loads the parent plan, runs abductive analysis (require completed-{TASK}) to discover what the task needs, then validates the generated subplan against the parent plan before output.

Unlike translate (which creates a plan from scratch), decompose expands a single task within an existing plan while preserving the parent plan's structure and ensuring the new subtasks integrate correctly.

Exactly one of --agent, --prompt-only, or --stdin must be provided. These three modes control how the LLM generation step is handled:

  • --agent — spawns an agent process to generate the subplan (original mode)
  • --prompt-only — emits the assembled prompt to stdout and exits (no agent, no validation)
  • --stdin — reads SPL from stdin and runs the full validation pipeline (no agent spawning)

Synopsis

# Spawn an agent to generate and validate
hence plan decompose <task> [file] --agent NAME [--merge] [-o FILE] [--context TEXT] [--json] [--max-subtasks N]

# Emit the assembled prompt (for agents that want to generate SPL themselves)
hence plan decompose <task> [file] --prompt-only [--json] [--context TEXT] [--max-subtasks N]

# Read SPL from stdin and validate (for agents feeding back their own output)
echo "$SPL" | hence plan decompose <task> [file] --stdin [--merge] [-o FILE] [--json]

Arguments & Flags

Argument / FlagDescription
<task> Task name to decompose (without task- prefix, e.g. auth not task-auth).
[file] Path to the parent .spl plan file. Falls back to --file / HENCE_PLAN.
--agent NAME Agent provider for decomposition (e.g. claude, codex). Falls back to HENCE_AGENT. Mutually exclusive with --prompt-only and --stdin.
--prompt-only Emit the assembled decomposition prompt to stdout and exit. Performs plan loading, abductive analysis, and prompt assembly but skips agent invocation and validation. Mutually exclusive with --agent, --stdin, --merge, and -o.
--stdin Read the LLM's SPL response from stdin instead of invoking an agent. Runs the full validation pipeline (parse, sanity checks, interface checks) on the received SPL. No internal retry loop — retry is the caller's responsibility. Mutually exclusive with --agent and --prompt-only.
-o, --output FILE Write the generated subplan to a file. Mutually exclusive with --merge. If omitted (and no --merge), the subplan is printed to stdout.
--merge Merge the generated subtasks directly into the parent plan file. Uses file locking and a content hash for safe concurrent writes. Mutually exclusive with -o.
--context TEXT Additional context appended to the decomposition prompt (e.g. framework details, design constraints). Used with --agent and --prompt-only.
--json Emit structured JSON output. With --prompt-only, outputs the prompt components as JSON. With --stdin, outputs per-check validation details on failure. With --agent, includes subtask list, validation results, generated SPL, and merge status.
--max-subtasks N Upper bound on subtasks generated (default: 8). Reflected in the assembled prompt.

Validation

The generated subplan is automatically validated against the parent plan (with --agent or --stdin):

  • Terminal check — the subplan must conclude completed-{TASK}
  • Input check — all dependencies must be provable from the parent plan
  • Namespace check — subtask identifiers must be prefixed with {TASK}-
  • No-conflict check — no rule labels duplicate those in the parent plan

With --agent, validation failures trigger automatic retries (up to 3 attempts) with error context. With --stdin, validation failures exit with code 2 — the caller is responsible for retrying.

Exit Codes (--stdin mode)

CodeMeaning
0Validation passed, subplan output/merged successfully
2Validation failed (parse error, sanity check, interface check, or empty stdin)

Examples

# ── Agent mode (spawns an agent process) ──────────────────────
# Print subplan to stdout for review
hence plan decompose auth plan.spl --agent claude

# Merge subtasks directly into the parent plan
hence plan decompose auth plan.spl --agent claude --merge

# JSON output for programmatic use
hence plan decompose auth plan.spl --agent claude --json

# ── Prompt-only mode (for LLM agents) ────────────────────────
# Get the assembled prompt (agent processes it internally)
hence plan decompose auth plan.spl --prompt-only

# Get prompt as structured JSON
hence plan decompose auth plan.spl --prompt-only --json

# ── Stdin mode (validate externally-generated SPL) ────────────
# Validate and print
echo "$SPL" | hence plan decompose auth plan.spl --stdin

# Validate and merge into parent plan
echo "$SPL" | hence plan decompose auth plan.spl --stdin --merge

# Validate with JSON error output
echo "$SPL" | hence plan decompose auth plan.spl --stdin --json

# ── Full agent-reentrant round-trip ───────────────────────────
# Step 1: Get the prompt
PROMPT=$(hence plan decompose auth plan.spl --prompt-only)
# Step 2: Agent processes $PROMPT and generates SPL...
# Step 3: Feed back for validation + merge
echo "$SPL" | hence plan decompose auth plan.spl --stdin --merge

# ── Other options ─────────────────────────────────────────────
# Provide additional context to guide the LLM
hence plan decompose auth plan.spl --agent claude --merge \
  --context "Rust/Axum project, PostgreSQL, JWT auth"

# Limit subtask count
hence plan decompose auth plan.spl --agent claude --merge --max-subtasks 5

hence plan review <file> [--agent NAME] [--context TEXT] [--json]

Use a headless agent to review a plan for logical issues, ambiguities, missing dependencies, and potential improvements. The agent outputs a structured review report highlighting concerns ranked by severity. Does not modify the plan file.

Synopsis

hence plan review <file> [--agent NAME] [--context TEXT] [--json]

Arguments & Flags

Argument / FlagDescription
<file> The .spl plan file to review.
--agent NAME Agent provider to use for review (e.g. claude).
--context TEXT Additional context to include in the review prompt.
--json Emit the review report as a JSON object.

Examples

# Review a plan with the default agent
hence plan review plan.spl

# Review using a specific agent provider
hence plan review plan.spl --agent claude

# Machine-readable review output
hence plan review plan.spl --json

hence repl [file]

Start an interactive REPL (Read-Eval-Print Loop) for querying a plan. In the REPL you can run query commands, inspect conclusions, and explore hypothetical states interactively without constructing full shell commands. If no file is provided, the REPL starts without a plan loaded and you can open one with :load <file> inside the session.

Synopsis

hence repl [file]

Arguments

ArgumentDescription
[file] Optional plan file to load at startup.

Examples

# Start REPL with a plan pre-loaded
hence repl plan.spl

# Start REPL with no plan (load later with :load)
hence repl

hence session <name> [--json]

Show details for a session by name: its plan path, status, task states, and progress. The argument is a session name string, not a file path.

Synopsis

hence session <name> [--json]

Arguments & Flags

Argument / FlagDescription
<name> The session name to look up.
--json Emit session details as a JSON object.

Examples

# Show details for a named session
hence session my-run-2026-01-15

# Machine-readable output
hence session my-run-2026-01-15 --json

hence sessions [--json]

List all active and recent sessions managed by this hence installation. Displays session name, associated plan path, current status, and timestamps for the most recent activity. Useful for monitoring long-running agent pipelines from a control terminal.

Synopsis

hence sessions [--json]

Flags

FlagDescription
--json Emit the sessions list as a JSON array.

Examples

# List all sessions
hence sessions

# Machine-readable output
hence sessions --json

hence completions <shell>

Generate shell completion scripts for hence. Completions enable tab-completion for subcommands, flags, and plan file paths in your shell. Supported shells include bash, zsh, fish, and others. Append the output to your shell's startup file to enable completions permanently.

Synopsis

hence completions <shell>

Arguments

ArgumentDescription
<shell> Target shell. Common values: bash, zsh, fish.

Examples

# Enable bash completions permanently
hence completions bash >> ~/.bashrc

# Enable zsh completions permanently
hence completions zsh >> ~/.zshrc

# Enable fish completions
hence completions fish > ~/.config/fish/completions/hence.fish

hence skill install

Install the Claude Code skill for hence. This registers hence-specific instructions and tool definitions with the Claude Code environment so that Claude can natively read plans, claim tasks, assert findings, and call other hence commands during a coding session. Run this once per machine after installing hence and Claude Code.

Synopsis

hence skill install

Examples

hence skill install
Tip
After running hence skill install, restart Claude Code or open a new session for the skill to take effect.

Process Mining

Commands for learning plan patterns from execution history. Process mining extracts event logs from completed plans and discovers rules that explain observed behavior. All mutation commands automatically add timestamps, so completed plans are ready for analysis.

hence learn extract-log <files...> [--format FORMAT]

Extract a structured event log from one or more completed plan files. Events are derived from timestamped claims in the plan. Use this to feed plan history into external analysis tools or to prepare input for hence learn rules.

Synopsis

hence learn extract-log <files...> [--format FORMAT]

Arguments & Flags

Argument / FlagDescription
<files...> One or more .spl plan files to extract events from.
--format FORMAT Output format: json (default) or summary.

Examples

# Extract events as JSON
hence learn extract-log plans/*.spl --format json > events.json

# View human-readable summary
hence learn extract-log plans/*.spl --format summary

hence learn rules <files...> [--format FORMAT]

Mine defeasible rules from plan execution traces. The miner identifies ordering patterns and generates rules with support and confidence scores.

Synopsis

hence learn rules <files...> [--format FORMAT] [--min-support N] [--min-confidence N]

Arguments & Flags

Argument / FlagDescription
<files...> Trace files to mine rules from.
--format FORMAT Output format: dfl (default), json, or summary.
--min-support N Minimum support threshold (default: 1).
--min-confidence N Minimum confidence threshold (default: 0.5).

Examples

# Output learned rules as DFL
hence learn rules plans/*.spl --format dfl

# View mining summary
hence learn rules plans/*.spl --format summary

# Only high-confidence rules
hence learn rules plans/*.spl --min-confidence 0.9

hence learn validate-rules <traces...> --against <file>

Compare learned patterns against an existing plan template. Identifies new patterns observed in practice but missing from the template, conflicts between learned and existing rules, and low-confidence patterns that may need defeaters.

Synopsis

hence learn validate-rules <traces...> --against <file> [--format FORMAT]

Arguments & Flags

Argument / FlagDescription
<traces...> Completed plan files to learn from.
--against FILE Existing rules file to compare against.
--format FORMAT Output format: summary (default) or json.

Examples

# Compare learned rules against a template
hence learn validate-rules plans/*.spl --against template.spl

# JSON output for tooling
hence learn validate-rules plans/*.spl --against template.spl --format json

All commands accept -h, --help for inline help. Run hence --version to confirm your installed version.