Conduct

CLI Commands

Overview

Conduct v0.2 CLI provides commands for managing specifications, plans, and runs. All commands work with a configured backend server and require proper authentication.

Global Options

Available on all commands:

--help          Show help
--version       Show version number

Getting Started

Before using any commands, initialize your project:

conduct init

This will:

  1. Set up or select a credential profile
  2. Connect to your backend
  3. Create or select a project
  4. Generate conduct.config.json
  5. Inject agent instructions

init

Initialize a Conduct project in the current directory.

conduct init

What it does:

  1. Profile Setup: Creates or selects a credential profile in ~/.conduct/credentials
  2. Backend Connection: Tests connection to the backend server
  3. Project Setup: Creates or selects a project
  4. Configuration: Generates conduct.config.json with profile and project ID
  5. Agent Instructions: Injects Conduct instructions into CLAUDE.md, WARP.md, etc.
  6. Gitignore: Updates .gitignore to exclude .conduct/ folder

Example:

$ conduct init
 
No credentials found. Let's create a profile.
 
Profile name (default): production
Backend URL: https://api.conduct.example.com
API Key: ck_abc123...
 
✓ Profile created
 
Fetching projects...
No projects found. Let's create one.
 
Project name: my-app
Git repository URL: https://github.com/user/my-app
 
 Project created: proj_abc123
 
 Configuration saved to conduct.config.json
 Agent instructions updated
 .gitignore updated
 
🎉 Project initialized successfully!
 
Next steps:
  - Create a spec: conduct spec save --json <json>
  - List specs: conduct spec list

config

Manage credential profiles stored in ~/.conduct/credentials.

config list

List all configured profiles:

conduct config list

Output:

Profiles:

  default
    Backend: https://api.conduct.example.com
    API Key: ck_abc123...

  local
    Backend: http://localhost:3000
    API Key: ck_local456...

config add

Add a new profile interactively:

conduct config add [name]

Example:

$ conduct config add staging
 
Backend URL: https://staging.conduct.example.com
API Key: ck_staging789...
 
 Profile 'staging' added

config remove

Remove a profile:

conduct config remove <name>

config set

Update a profile field:

conduct config set <name> <field> <value>

Fields: backend, key

Example:

conduct config set default backend https://new-api.example.com

config switch

Switch the current project to use a different profile:

conduct config switch <name>

spec

Manage specifications (requirements and design documents).

spec save

Create a new specification with requirements:

conduct spec save --json <json>
conduct spec save --file <path>

Required fields:

  • mdJson: Markdown AST (JSON format)
  • intent: Original user request
  • effort: simple | medium | complex | epic
  • requirements: Array of requirements with title and mdJson

Example with JSON string:

conduct spec save --json '{
  "mdJson": {
    "type": "root",
    "children": [
      {"type": "heading", "depth": 1, "children": [{"type": "text", "value": "Dark Mode"}]}
    ]
  },
  "intent": "Add dark mode toggle",
  "effort": "simple",
  "requirements": [
    {
      "title": "Toggle visible on settings page",
      "mdJson": {"type": "root", "children": [...]}
    }
  ]
}'

Example with file:

conduct spec save --file .conduct/spec.json

Output:

✓ Spec created successfully

  ID: spec_abc123
  Title: Dark Mode
  Effort: simple
  Created: 2025-12-16T10:00:00Z

Next steps:
  - View spec: conduct spec get spec_abc123
  - Create plan: conduct plan save spec_abc123 --json <plan>

spec get

Get a specification by ID:

conduct spec get <spec-id>

Output includes the spec metadata, full content (mdJson), and all requirements.

spec list

List all specifications:

conduct spec list [options]
 
Options:
  --status <status>   Filter by status
  --limit <n>         Limit results
  --offset <n>        Skip results
  --json              JSON output

Example:

conduct spec list --status draft --limit 10

spec get

Get spec details:

conduct spec get <spec-id> [options]
 
Options:
  --json              JSON output

Example:

conduct spec get AUTH-001

spec update

Update spec:

conduct spec update <spec-id> [options]
 
Options:
  --title <title>     Update title
  --status <status>   Update status
  --content <file>    Update content from file
  --dry-run           Preview changes
  --json              JSON output

Example:

conduct spec update AUTH-001 --status completed

spec delete

Delete a spec:

conduct spec delete <spec-id> [options]
 
Options:
  --force             Skip confirmation
  --json              JSON output

Example:

conduct spec delete AUTH-001 --force

Run Commands

run create

Create a new run:

conduct run create <file> [options]
 
Options:
  --run-id <id>       Custom run ID
  --spec-id <id>      Link to spec (required)
  --status <status>   Initial status
  --dry-run           Preview without creating
  --json              JSON output

Example:

conduct run create auth-run.md --spec-id AUTH-001

run list

List all runs:

conduct run list [options]
 
Options:
  --spec-id <id>      Filter by spec
  --status <status>   Filter by status
  --limit <n>         Limit results
  --offset <n>        Skip results
  --json              JSON output

Example:

conduct run list --spec-id AUTH-001

run get

Get run details:

conduct run get <run-id> [options]
 
Options:
  --json              JSON output

Example:

conduct run get RUN-001

run update

Update run:

conduct run update <run-id> [options]
 
Options:
  --status <status>   Update status
  --content <file>    Update content
  --dry-run           Preview changes
  --json              JSON output

Example:

conduct run update RUN-001 --status completed

Link features to run:

conduct run link <run-id> <feature-ids...> [options]
 
Options:
  --dry-run           Preview changes
  --json              JSON output

Example:

conduct run link RUN-001 FEAT-42 FEAT-43 FEAT-44

run delete

Delete a run:

conduct run delete <run-id> [options]
 
Options:
  --force             Skip confirmation
  --json              JSON output

Check Commands

check create

Create a new check:

conduct check create <file> [options]
 
Options:
  --check-id <id>     Custom check ID
  --run-id <id>       Link to run (required)
  --result <result>   Check result (pass/fail/warn)
  --dry-run           Preview without creating
  --json              JSON output

Example:

conduct check create auth-check.md \
  --run-id RUN-001 \
  --result pass

check list

List all checks:

conduct check list [options]
 
Options:
  --run-id <id>       Filter by run
  --result <result>   Filter by result
  --limit <n>         Limit results
  --json              JSON output

Example:

conduct check list --run-id RUN-001

check get

Get check details:

conduct check get <check-id> [options]
 
Options:
  --json              JSON output

check update

Update check:

conduct check update <check-id> [options]
 
Options:
  --result <result>   Update result
  --content <file>    Update content
  --dry-run           Preview changes
  --json              JSON output

check delete

Delete a check:

conduct check delete <check-id> [options]
 
Options:
  --force             Skip confirmation
  --json              JSON output

Feature Commands

feature list

List discovered features:

conduct feature list [options]
 
Options:
  --limit <n>         Limit results
  --json              JSON output

feature get

Get feature details:

conduct feature get <feature-id> [options]
 
Options:
  --json              JSON output

feature runs

Get runs that modified feature:

conduct feature runs <feature-id> [options]
 
Options:
  --limit <n>         Limit results
  --json              JSON output

Project Commands

init

Initialize Conduct in project:

conduct init [options]
 
Options:
  --agent <name>      Agent type (claude, cursor, etc)
  --force             Overwrite existing

list

List all memory:

conduct list [options]
 
Options:
  --specs             Show only specs
  --runs              Show only runs
  --checks            Show only checks
  --features          Show only features
  --status <status>   Filter by status
  --limit <n>         Limit results
  --json              JSON output

Example:

# Show everything
conduct list
 
# Show only specs
conduct list --specs
 
# Filter completed runs
conduct list --runs --status completed

Dry Run Mode

Preview changes before executing with --dry-run:

# Preview spec creation
conduct spec create spec.md --dry-run
 
# Preview run creation
conduct run create run.md --spec-id SPEC-001 --dry-run
 
# Preview update
conduct spec update SPEC-001 --status completed --dry-run

Dry run shows:

  • What will be created/updated
  • Validation errors
  • File content
  • No actual changes made

JSON Output

Get machine-readable output with --json:

conduct spec list --json
conduct spec get SPEC-001 --json
conduct list --json

Useful for:

  • Scripting
  • Integration with other tools
  • Parsing with jq

Example with jq:

conduct spec list --json | jq '.specs[] | select(.status=="draft")'

Status Values

Valid status values:

Specs

  • pending - Not started
  • draft - In progress
  • in_progress - Being implemented
  • completed - Finished
  • cancelled - Abandoned

Runs

  • pending - Not started
  • in_progress - Running
  • completed - Finished
  • failed - Failed

Checks

  • pass - All criteria met
  • fail - Some criteria not met
  • warn - Partial success

Next Steps