Skip to main content
The Noēsis CLI is installed with the package. Run via noesis or uv run noesis.
The CLI surface is intentionally small in this release. A more robust CLI is in active development, with better scripting ergonomics, richer subcommands, and stronger JSON-first workflows. When in doubt, treat noesis <command> --help as the source of truth.

Home screen and help

Running noesis with no arguments shows a curated home screen instead of raw argparse output. It highlights a concise Quick Start, commonly used commands, and a next-step hint. When Rich is available and allowed, the home screen uses a premium, panel-based layout with a clear welcome header (similar to the demo look you shared). The CLI also ships an explicit noesis help command that prints the same grouped help view as -h/--help (Run / Inspect / Integrity / Maintenance), and can target a specific subcommand:
noesis help
noesis help view
Home/help output respects --json, --quiet, NO_COLOR, and TTY detection. Use --force-rich or NOESIS_FORCE_RICH=1 to enable Rich output in non-TTY contexts. Home screen mockup (ASCII)
╭──────────────────────────────────────────────────────────────────────╮
│  * Welcome to Noēsis                                                  │
│  Cognitive episodes with observability and governance.                │
╰──────────────────────────────────────────────────────────────────────╯
  Quick Start
    $ noesis run "Summarize this repo"
    $ noesis solve react "Weekly plan"
    $ noesis view <episode_id>

  Most Used
    $ noesis ps
    $ noesis events <episode_id>
    $ noesis artifacts verify <episode_id>

  Next
    → noesis help
    → noesis <command> -h

Installation

Install from source while the PyPI release is pending:
git clone https://github.com/saraeloop/noesis.git
cd noesis
uv tool install .
# or: pipx install .
When PyPI is live, use uv add noesis or pip install noesis.

Commands

Available commands (in noesis --help order): run, solve, list, show, events, insight, version, new, validate-ports, diagnostics, migrate, view, artifacts, ps, processes, help.

noesis run

Run a baseline episode (no adapter).
noesis run "task description" [options]
# or read from stdin
echo "Summarize the README" | noesis run --stdin
Arguments:
ArgumentDescription
taskTask prompt (optional if --stdin or - is used)
Options:
OptionDescriptionDefault
-s, --seed INTSeed for reproducibility0
-P, --policy SPECPolicy alias or module:Class (on/off accepted)on
--no-intuitionDisable intuition entirelyFalse
--tags JSONJSON object of tags to attachNone
--dir-min FLOATOverride direction_min_confidenceNone
--stdinRead task prompt from STDIN (or pass - as task)False
-y, --yesAssume yes for interactive promptsFalse
--workspace PATHWorkspace root for verification snapshotsNone
--verify-file PATHJSON file with verification specsNone
--verify-file-exists PATHRequire a file to exist (repeatable)None
--verify-file-contains PATHRequire a file to contain text (repeatable; pair with --text)None
--text TEXTText for --verify-file-contains (repeatable; order matters)None
--verify-only-modified PATHAllow modifications only within the given path (repeatable)None
--verify-no-modificationsRequire no workspace modificationsFalse
-j, --jsonEmit JSON {episode_id}False
-q, --quietPrint only the episode idFalse
Examples:
# Simple run
noesis run "Draft release notes"

# Policy alias or module:Class
noesis run "Check database" --policy mymodule:SafetyPolicy

# JSON tags object
noesis run "Deploy to staging" --tags '{"env":"staging","team":"platform"}'

# Quiet / JSON forms
noesis run "Test task" -q
noesis run "Test task" -j | jq -r '.episode_id'

# Verification with a workspace
noesis run "Update config" --workspace . --verify-file verify.json
Verification inputs: Use --verify-file for a stable, portable contract. The file is JSON and contains a list of verification specs.
[
  {"name": "file_exists", "path": "config.yaml"},
  {"name": "file_contains", "path": "config.yaml", "text": "enabled: true"},
  {"name": "only_modified", "paths": ["config.yaml"]},
  {"name": "no_modifications"}
]
Shortcut flags compile into the same list of specs:
noesis run "Update config" \
  --workspace . \
  --verify-file-exists config.yaml \
  --verify-file-contains config.yaml --text "enabled: true" \
  --verify-only-modified config.yaml
Notes:
  • --verify-no-modifications is mutually exclusive with --verify-only-modified.

noesis solve

Run an episode through a specific adapter/flow.
noesis solve ADAPTER "task description" [options]
Arguments:
ArgumentDescription
adapterAdapter name or import path (required)
taskTask prompt (optional if --stdin or - is used)
Options:
OptionDescriptionDefault
-s, --seed INTSeed for reproducibility0
-P, --policy SPECPolicy alias or module:Class (on/off accepted)on
--no-intuitionDisable intuition entirelyFalse
--tags JSONJSON object of tags to attachNone
--dir-min FLOATOverride direction_min_confidenceNone
--stdinRead task prompt from STDIN (or pass - as task)False
--workspace PATHWorkspace root for verification snapshotsNone
--verify-file PATHJSON file with verification specsNone
--verify-file-exists PATHRequire a file to exist (repeatable)None
--verify-file-contains PATHRequire a file to contain text (repeatable; pair with --text)None
--text TEXTText for --verify-file-contains (repeatable; order matters)None
--verify-only-modified PATHAllow modifications only within the given path (repeatable)None
--verify-no-modificationsRequire no workspace modificationsFalse
-j, --jsonEmit JSON {episode_id}False
-q, --quietPrint only the episode idFalse
Examples:
# With registered adapter
noesis solve my-adapter "Process data"

# With module path
noesis solve mymodule:analyzer "Analyze logs"

# Policy + tags
noesis solve deploy-adapter "Deploy" --policy SafetyPolicy --tags '{"env":"prod"}'

noesis list

List recent episodes.
noesis list [options]
Options:
OptionDescriptionDefault
--limit INTMaximum episodes to show20
--strict-manifestRe-hash manifests and warn on driftFalse
-j, --jsonOutput as JSONFalse
-q, --quietPrint episode ids onlyFalse
Examples:
# Table output
noesis list --limit 10

# JSON output for scripting
noesis list -j | jq '.[0].episode_id'
Output columns:
ColumnDescription
STARTED_ATStart timestamp (ISO-ish string, truncated)
EPISODE_IDEpisode identifier (ep_<ULID>)
TASKTruncated task description (may include a manifest drift note)
When --strict-manifest is used and drift is detected, Noēsis appends a suffix like [manifest:mismatch] to the task line. Example output:
STARTED_AT                  EPISODE_ID                     TASK
2024-12-27T10:15:32  ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C  Draft release notes
2024-12-27T09:45:11  ep_01JH6Z1S9WZJ2K1ZB2R7C2JX0T  Analyze logs
Example output:
Started              ID                      Task
2024-12-27 10:15:32  ep_2024_abc123_s0       Draft release notes
2024-12-27 09:45:11  ep_2024_def456_s0       Analyze logs

noesis ps

List recent episodes (runs/evidence bundles). Episode answers “can I trust this attempt?”
noesis ps [options]
Options:
OptionDescriptionDefault
--limit INTMaximum episodes to show20
--process TEXTFilter by process id or nameNone
-j, --jsonOutput as JSON envelope (cli/1.1)False
-q, --quietPrint episode ids onlyFalse
JSON envelope: PsResult contains episodes, each derived from list_runs():
{
  "cli": {"schema_version": "cli/1.1", "compat_min": "cli/1.0", "compat_max": "cli/1.x"},
  "episodes": [
    {
      "episode_id": "ep_01...",
      "task": "Draft release notes",
      "started_at": "2024-12-27T10:15:32Z",
      "outcome": "success_unverified",
      "status": "completed",
      "process": {"id": "proc_...", "name": "alpha"}
    }
  ],
  "total_count": 1,
  "limit": 20,
  "offset": 0
}

noesis processes

List processes (identity + liveness). Process answers “what’s running?” This is mutable registry state, not immutable evidence.
noesis processes [options]
Options:
OptionDescriptionDefault
--limit INTMaximum processes to show20
--process TEXTFilter by process id or nameNone
-j, --jsonOutput as JSON envelope (cli/1.1)False
-q, --quietPrint process ids onlyFalse
Process liveness: status is one of running, idle, stale, error. Registry fields: Process records include last_heartbeat_at (RFC 3339 UTC with Z) for staleness checks and next_run_index for monotonic run allocation. JSON envelope: ProcessesResult contains processes:
{
  "cli": {"schema_version": "cli/1.1", "compat_min": "cli/1.0", "compat_max": "cli/1.x"},
  "processes": [
    {
      "process_id": "eebfff3bbbb5",
      "process_name": "alpha",
      "kind": "oneshot",
      "status": "idle",
      "last_seen_at": "2024-12-27T10:20:05Z",
      "last_heartbeat_at": "2024-12-27T10:20:05Z",
      "active_run_id": null,
      "last_run_outcome": "success_unverified",
      "next_run_index": 3
    }
  ],
  "total_count": 1,
  "limit": 20,
  "offset": 0
}

noesis show

Display episode summary.
noesis show EPISODE_ID [options]
Arguments:
ArgumentDescription
episode_idEpisode ID to display (required)
Options:
OptionDescriptionDefault
-j, --jsonOutput raw JSONFalse
-q, --quietPrint episode id onlyFalse
Examples:
# Friendly output
noesis show ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C

# Raw JSON
noesis show ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C -j
Example output:
Episode
  id      : ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C
  task    : Draft release notes
  started : 2024-12-27T10:15:32Z
  duration: 1.23s
Example output:
Episode: ep_2024_abc123_s0
Task: Draft release notes
Status: success
Started: 2024-12-27T10:15:32Z
Duration: 1.23s

noesis view

Inspect an episode timeline, metrics, and governance decisions in one view.
noesis view TARGET [options]
Arguments:
ArgumentDescription
targetEpisode ID or run directory
Options:
OptionDescriptionDefault
--prettyRender formatted tablesTrue
-j, --jsonEmit JSON viewFalse
--eventsStream raw events.jsonlFalse
--grep SUBSTRFilter timeline rows by substringNone
--schema VERSIONSummary schema to validate againstauto
--fail-on-invalidExit 1 if validation errors are detectedFalse
--openPrint artifact pathsFalse
Output highlights:
  • Execution Map row: observe → act → verify → outcome with color-coded status.
  • Verification section: adapter result, outcome, pass/fail, workspace diff summary, and first failing assertion.
Examples:
# Pretty viewer
noesis view ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C

# JSON
noesis view ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C -j | jq '.summary.metrics.success'

# Show artifact paths
noesis view ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C --open
Example output (with --open):
=== artifacts ===
dir: .noesis/episodes/ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C
summary: .noesis/episodes/ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C/summary.json
events: .noesis/episodes/ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C/events.jsonl

=== timeline ===
[start] 2024-12-27T10:15:32.000Z
[observe] input captured
[plan] 3 steps planned
[act] executed
[reflect] success

noesis events

Print events for an episode.
noesis events EPISODE_ID [options]
Arguments:
ArgumentDescription
episode_idEpisode ID to read (required)
Options:
OptionDescriptionDefault
--phase PHASEFilter by phaseNone
-j, --jsonEmit JSON (one object per event)False
-q, --quietSuppress bannerFalse
Examples:
# All events
noesis events ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C

# Filter by phase
noesis events ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C --phase act

# JSON for piping (Noēsis prints one JSON object per event; use `jq -c` for compact one-line output)
noesis events ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C -j | jq -c '.phase'

# Latest episode
noesis events $(noesis list -j | jq -r '.[0].episode_id')
noesis list returns episodes newest first, so index 0 is the latest run. Phase values:
PhaseDescription
startEpisode start
observeInput capture
interpretSignal extraction
planAction planning
directionPolicy directives
intuitionPolicy intuition
insightInsight metrics
reasonReasoning traces
actTool execution
reflectOutcome evaluation
learnLearning signals
terminateEnd state
errorError events
Governance events may appear in events.jsonl (phase governance) when governance is enabled, even though noesis events --help does not list governance in its phase hint.
Example output:
Episode: ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C
[2024-12-27T10:15:32.000Z] start
[2024-12-27T10:15:32.001Z] observe
[2024-12-27T10:15:32.002Z] plan
[2024-12-27T10:15:32.003Z] act        status=ok
[2024-12-27T10:15:32.004Z] reflect    status=success
[2024-12-27T10:15:32.005Z] terminate  status=success

noesis insight

Show computed insight events (alias for events --phase insight).
noesis insight EPISODE_ID [options]
Arguments:
ArgumentDescription
episode_idEpisode ID to analyze (required)
Options:
OptionDescriptionDefault
-j, --jsonEmit JSON (one object per event)False
-q, --quietSuppress bannerFalse
Examples:
# Get metrics
noesis insight ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C

# Parse with jq
noesis insight ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C -j | jq -c '.payload.success'

noesis artifacts

Verify artifact manifests.
noesis artifacts verify TARGET [options]
Arguments:
ArgumentDescription
targetEpisode ID, run directory, or manifest path
Options:
OptionDescriptionDefault
--strictFail when unexpected files are presentFalse
--jsonEmit JSON reportFalse
-q, --quietSuppress human-readable outputFalse
Unlike most commands, artifacts verify uses --json without a -j short form.
Exit codes:
CodeMeaning
0Verified (including warnings)
2Verification error
3Missing manifest/files
4Signature error
Example:
noesis artifacts verify ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C --strict
Example output:
Artifact verification
manifest : .noesis/episodes/ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C/manifest.json
status   : ok
files    : 4
duration : 12.34 ms
issues   : none
files detail:
  - summary.json: ok
  - events.jsonl: ok
  - state.json: ok
  - manifest.json: ok
Example output:
=== Artifact verification ===
manifest : .noesis/episodes/ep_2024_abc123_s0/manifest.json
status   : ok
files    : 4
duration : 12.34 ms
issues   : none
files detail:
  - summary.json: ok
  - events.jsonl: ok
  - state.json: ok
  - manifest.json: ok

noesis diagnostics

Run stability diagnostics (default) or compare two runs for drift.
# Default checks
noesis diagnostics [options]

# Replay comparison
noesis diagnostics replay RUN_A RUN_B [options]
Options (default mode):
OptionDescriptionDefault
--checks a,b,cComma-separated subset of checksall
--strictExit non-zero on warningsFalse
-j, --jsonEmit JSON payloadFalse
-q, --quietSuppress human-readable outputFalse
Available checks:
Check nameWhat it validates
runs_dirDirectory exists, is writable, has free space
learn_homeDirectory exists and is valid
direction_min_confidenceValue within [0, 1]
learn_auto_apply_min_confidenceValue within [0, 1]
learn_auto_apply_min_successesValue >= 1
portsRegistered ports have valid API version format
config_snapshotRuntime config matches current snapshot
latest_summaryMost recent summary schema version is current
artifact_manifestMost recent manifest passes verification
Replay mode options:
OptionDescriptionDefault
run_a run_bEpisode directories to compare (required)
-j, --jsonEmit JSON payloadFalse
-q, --quietSuppress human-readable outputFalse
Examples:
# Default diagnostics
noesis diagnostics --strict

# Run specific checks only
noesis diagnostics --checks runs_dir,ports,artifact_manifest

# Drift compare two runs
noesis diagnostics replay .noesis/episodes/ep_a .noesis/episodes/ep_b
Replay exits 1 on drift, 0 otherwise. Default mode exits 1 on errors (or warnings when --strict). Example output (default mode):
=== Noēsis diagnostics ===
timestamp             : 1735312532
version               : v1.0.0
summary_schema_version: 1.1.0
state_version         : 1 (schema 1.0)
selected_checks       : all
checks:
  [ok] runs_dir - ./.noesis/episodes
  [ok] learn_home - ~/.noesis/state
  [ok] direction_min_confidence - 0.50
  [ok] learn_auto_apply_min_confidence - 0.75
  [ok] learn_auto_apply_min_successes - 3
  [ok] ports - config=config/1.0-rc1
  [ok] config_snapshot - in sync
  [ok] latest_summary - .noesis/episodes/ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C/summary.json
  [ok] artifact_manifest - .noesis/episodes/ep_01JH6Z2V9Q2K6Y6N0QZ7K2QW8C/manifest.json
overall status        : ok

noesis version

Show CLI/core version and available adapters.
noesis version [-j]
Options:
OptionDescriptionDefault
-j, --jsonEmit JSON payloadFalse
Example output:
Noesis v1.0.0 (core v1.0.0, adapters: langgraph@on, crewai@missing, assistants@missing)

noesis validate-ports

List registered runtime ports from the active session.
noesis validate-ports [-j|-q]
Options:
OptionDescriptionDefault
-j, --jsonEmit JSON payloadFalse
-q, --quietSuppress human outputFalse

noesis migrate

Codemod deprecated Noēsis shims to the modern API.
noesis migrate [paths...] [--dry-run] [-j]
Options:
OptionDescriptionDefault
paths...Files or directories (defaults to .).
--dry-runPreview changes without modifying filesFalse
-j, --jsonEmit JSON reportFalse
Exit codes:
CodeMeaning
0No issues
1Errors encountered
2TODOs or skipped items remain

noesis new

Experimental scaffolder placeholder.
noesis new [flow|policy] NAME [-j|-q]
Returns a TODO message today.

Global options

These options work with all commands:
OptionDescription
--compactCompact output (summary only)
--verboseVerbose output (detailed reasoning)
--debugDebug mode (implies verbose)
--port NAME=SPECRegister a runtime port (repeatable)
--homeShow the Noēsis home screen (even with a subcommand)
--force-richForce Rich output even when stdout is not a TTY
--helpShow help message

Environment variables

VariableDescription
NOESIS_COMPACTCompact output (true/false, CLI output control)
NOESIS_VERBOSEVerbose output (true/false, CLI output control)
NOESIS_DEBUGDebug output (true/false, implies verbose; CLI output control)
NO_COLORDisable rich formatting when set (standard)
NOESIS_FORCE_RICHForce Rich output in non-TTY contexts
NOESIS_HOMEShow the home screen (true/false)
NOESIS_RUNS_DIRDefault runs directory
NOESIS_PLANNERDefault planner mode (meta/minimal)
NOESIS_DIRECTION_MIN_CONFIDENCEDefault direction_min_confidence
NOESIS_GOVERNANCE_MODEGovernance mode (off/audit/enforce)
NOESIS_GOVERNANCE_FAILURE_POLICYFailure policy (fail_open/fail_closed)
NOESIS_GOVERNANCE_TIMEOUT_MSGovernance timeout in milliseconds
NOESIS_INTUITION_MODEDefault intuition mode
NOESIS_TIMEOUT_SECDefault timeout
NOESIS_LEARN_HOMEDefault learn directory
NOESIS_LEARN_MODEDefault learn mode
NOESIS_LEARN_AUTO_APPLY_MIN_SUCCESSESMinimum successes before auto-apply
NOESIS_LEARN_AUTO_APPLY_MIN_CONFIDENCEConfidence threshold for auto-apply
NOESIS_PROMPT_PROVENANCE_ENABLEDEnable prompt provenance (true/false)
NOESIS_PROMPT_PROVENANCE_MODEProvenance mode
NOESIS_AGENTSReserved/unused in v1.0.0 (parsed into config)
NOESIS_TASKSReserved/unused in v1.0.0 (parsed into config)
Example:
# Set planner mode via environment
NOESIS_PLANNER=minimal noesis run "Quick test"

# Set runs directory
NOESIS_RUNS_DIR=./my-runs noesis list

Scripting patterns

Get latest episode ID

LATEST=$(noesis list -j | jq -r '.[0].episode_id')
noesis show $LATEST

Check success rate

noesis list -j --limit 100 | jq '[.[] | select(.success != null) | .success] | (add / length)'

Export metrics to CSV

noesis list -j | jq -r '.[] | [.episode_id, .success, .started_at] | @csv' > episodes.csv

Filter by manifest drift

noesis list -j --strict-manifest | jq '[.[] | select(.manifest_status != null and .manifest_status != "ok")]'

Tail direction events

noesis events $(noesis list -j | jq -r '.[0].episode_id') --phase direction

Batch process episodes

for ep in $(noesis list -j | jq -r '.[].episode_id'); do
  echo "Processing $ep"
  noesis insight $ep > "insights/$ep.json"
done

Exit codes

Core CLI exit codes (noesis/cli/errors.py):
CodeMeaning
0Success
1General error (EXIT_ERROR)
2Invalid usage / argument errors (EXIT_USAGE)
3Episode vetoed by governance (EXIT_VETO)
Some subcommands add their own codes. For example, noesis artifacts verify uses dedicated codes for verification results (missing files, signature failures, etc.). Check noesis <command> --help if you need exact codes in CI.

Next steps