# Makima CLI Reference

Makima is a unified CLI for server, daemon, and task management. It provides commands for running the Makima server, connecting daemon workers, and orchestrating contracts and tasks.

## Table of Contents

- [Installation](#installation)
- [Commands Overview](#commands-overview)
- [Command Reference](#command-reference)
  - [makima server](#makima-server)
  - [makima daemon](#makima-daemon)
  - [makima supervisor](#makima-supervisor)
  - [makima contract](#makima-contract)
- [Configuration](#configuration)
  - [Configuration File](#configuration-file)
  - [Environment Variables](#environment-variables)
- [Usage Examples](#usage-examples)
  - [Starting the Server](#starting-the-server)
  - [Running a Daemon Worker](#running-a-daemon-worker)
  - [Contract Orchestration Workflow](#contract-orchestration-workflow)
  - [Task-Contract Interaction](#task-contract-interaction)

---

## Installation

Build and install the Makima CLI from source:

```bash
cd makima
cargo build --release
cargo install --path .
```

Or install directly:

```bash
cargo install --path makima
```

The `makima` binary will be available in your PATH after installation.

---

## Commands Overview

| Command | Description |
|---------|-------------|
| `makima server` | Run the HTTP/WebSocket server |
| `makima daemon` | Connect to server and manage tasks |
| `makima supervisor` | Contract orchestration commands |
| `makima contract` | Task-contract interaction commands |

---

## Command Reference

### makima server

Run the Makima HTTP/WebSocket server that coordinates daemons and manages contracts.

```bash
makima server [OPTIONS]
```

#### Options

| Option | Environment Variable | Default | Description |
|--------|---------------------|---------|-------------|
| `--port <PORT>` | `PORT` | `8080` | Server port |
| `--parakeet-model-dir <PATH>` | `PARAKEET_MODEL_DIR` | `models/parakeet-tdt-0.6b-v3` | Path to Parakeet model directory |
| `--parakeet-eou-dir <PATH>` | `PARAKEET_EOU_DIR` | `models/realtime_eou_120m-v1-onnx` | Path to Parakeet EOU model directory |
| `--sortformer-model-path <PATH>` | `SORTFORMER_MODEL_PATH` | `models/diarization/diar_streaming_sortformer_4spk-v2.1.onnx` | Path to Sortformer model |
| `--database-url <URL>` | `POSTGRES_CONNECTION_URI` | - | PostgreSQL connection URI |
| `-l, --log-level <LEVEL>` | - | `info` | Log level (trace, debug, info, warn, error) |

#### Examples

```bash
# Start server on default port
makima server

# Start server on custom port with database
makima server --port 3000 --database-url "postgresql://user:pass@localhost/makima"

# Start server with custom model paths
makima server --parakeet-model-dir /path/to/models/parakeet
```

---

### makima daemon

Run the daemon worker that connects to the Makima server and executes tasks.

```bash
makima daemon [OPTIONS]
```

#### Options

| Option | Environment Variable | Default | Description |
|--------|---------------------|---------|-------------|
| `-c, --config <PATH>` | - | - | Path to custom config file |
| `--repos-dir <PATH>` | `MAKIMA_DAEMON_REPOS_DIR` | `~/.makima/repos` | Directory where repositories are cloned |
| `--worktrees-dir <PATH>` | `MAKIMA_DAEMON_WORKTREES_DIR` | `~/.makima/worktrees` | Directory where worktrees are created |
| `--server-url <URL>` | `MAKIMA_DAEMON_SERVER_URL` | `wss://api.makima.jp` | WebSocket server URL |
| `--api-key <KEY>` | `MAKIMA_DAEMON_SERVER_APIKEY` | - | API key for server authentication |
| `--max-tasks <N>` | - | `4` | Maximum number of concurrent tasks |
| `-l, --log-level <LEVEL>` | - | `info` | Log level (trace, debug, info, warn, error) |

#### Examples

```bash
# Start daemon with CLI arguments
makima daemon --server-url ws://localhost:8080 --api-key your-api-key

# Start daemon with custom config file
makima daemon --config /path/to/config.toml

# Start daemon with environment variables
export MAKIMA_DAEMON_SERVER_URL=ws://localhost:8080
export MAKIMA_API_KEY=your-api-key
makima daemon
```

---

### makima supervisor

Supervisor commands for contract orchestration. These commands are used by orchestrators to manage tasks, branches, and pull requests.

```bash
makima supervisor <SUBCOMMAND> [OPTIONS]
```

#### Common Options

All supervisor subcommands accept these common options:

| Option | Environment Variable | Default | Description |
|--------|---------------------|---------|-------------|
| `--api-url <URL>` | `MAKIMA_API_URL` | `https://api.makima.jp` | API URL |
| `--api-key <KEY>` | `MAKIMA_API_KEY` | - | API key for authentication |
| `--contract-id <UUID>` | `MAKIMA_CONTRACT_ID` | - | Contract ID |
| `--task-id <UUID>` | `MAKIMA_TASK_ID` | - | Current task ID (optional) |

#### Subcommands

##### tasks

List all tasks in the contract.

```bash
makima supervisor tasks [OPTIONS]
```

##### tree

Get the task tree structure showing parent-child relationships.

```bash
makima supervisor tree [OPTIONS]
```

##### spawn

Create and start a new task.

```bash
makima supervisor spawn <NAME> <PLAN> [OPTIONS]
```

| Argument/Option | Description |
|-----------------|-------------|
| `<NAME>` | Name of the task |
| `<PLAN>` | Plan/description for the task |
| `--parent <UUID>` | Parent task ID to branch from |
| `--checkpoint <SHA>` | Checkpoint SHA to start from |
| `--repo <URL>` | Repository URL (local path or remote) |

##### wait

Wait for a task to complete.

```bash
makima supervisor wait <TASK_ID> [TIMEOUT]
```

| Argument | Default | Description |
|----------|---------|-------------|
| `<TASK_ID>` | - | Task ID to wait for |
| `<TIMEOUT>` | `300` | Timeout in seconds |

##### read-file

Read a file from a task's worktree.

```bash
makima supervisor read-file <TASK_ID> <FILE_PATH>
```

##### branch

Create a git branch.

```bash
makima supervisor branch <NAME> [OPTIONS]
```

| Argument/Option | Description |
|-----------------|-------------|
| `<NAME>` | Branch name to create |
| `--from <REF>` | Reference (task ID or SHA) to branch from |

##### merge

Merge a task's changes to a branch.

```bash
makima supervisor merge <TASK_ID> [OPTIONS]
```

| Option | Description |
|--------|-------------|
| `--to <BRANCH>` | Target branch to merge into |
| `--squash` | Squash commits on merge |

##### pr

Create a pull request from a task's changes.

```bash
makima supervisor pr <TASK_ID> [OPTIONS]
```

| Option | Default | Description |
|--------|---------|-------------|
| `--title <TITLE>` | - | PR title (required) |
| `--body <BODY>` | - | PR body/description |
| `--base <BRANCH>` | `main` | Base branch |

##### diff

View a task's diff.

```bash
makima supervisor diff <TASK_ID>
```

##### checkpoint

Create a checkpoint (save point) for the current task.

```bash
makima supervisor checkpoint <MESSAGE>
```

##### checkpoints

List all checkpoints for the current task.

```bash
makima supervisor checkpoints
```

##### status

Get contract status including current phase.

```bash
makima supervisor status
```

##### advance-phase

Advance the contract to the next phase.

```bash
makima supervisor advance-phase <PHASE>
```

| Argument | Description |
|----------|-------------|
| `<PHASE>` | Phase to advance to (specify, plan, execute, review) |

##### ask

Ask a question and wait for user feedback.

```bash
makima supervisor ask <QUESTION> [OPTIONS]
```

| Option | Default | Description |
|--------|---------|-------------|
| `--choices <CHOICES>` | - | Comma-separated list of choices |
| `--context <CONTEXT>` | - | Context about what this relates to |
| `--timeout <SECONDS>` | `3600` | Timeout in seconds (default: 1 hour) |

---

### makima contract

Contract commands for task-contract interaction. These commands are used by tasks to interact with their parent contract.

```bash
makima contract <SUBCOMMAND> [OPTIONS]
```

#### Common Options

All contract subcommands accept these common options:

| Option | Environment Variable | Default | Description |
|--------|---------------------|---------|-------------|
| `--api-url <URL>` | `MAKIMA_API_URL` | `https://api.makima.jp` | API URL |
| `--api-key <KEY>` | `MAKIMA_API_KEY` | - | API key for authentication |
| `--contract-id <UUID>` | `MAKIMA_CONTRACT_ID` | - | Contract ID |
| `--task-id <UUID>` | `MAKIMA_TASK_ID` | - | Current task ID (optional) |

#### Subcommands

##### status

Get the contract status.

```bash
makima contract status
```

Returns JSON with contract name, description, current phase, and status.

##### checklist

Get the phase checklist with deliverables.

```bash
makima contract checklist
```

Returns JSON with completion percentage, file deliverables, and suggestions.

##### goals

Get the contract goals.

```bash
makima contract goals
```

##### files

List all contract files.

```bash
makima contract files
```

##### file

Get a specific file's content.

```bash
makima contract file <FILE_ID>
```

##### report

Report progress on the contract.

```bash
makima contract report <MESSAGE>
```

##### suggest-action

Get a suggested next action based on contract state.

```bash
makima contract suggest-action
```

##### completion-action

Get a completion recommendation with metrics.

```bash
makima contract completion-action [OPTIONS]
```

| Option | Default | Description |
|--------|---------|-------------|
| `--files <FILES>` | - | Comma-separated list of modified files |
| `--lines-added <N>` | `0` | Number of lines added |
| `--lines-removed <N>` | `0` | Number of lines removed |
| `--code` | - | Flag indicating code changes |

##### update-file

Update an existing contract file (reads content from stdin).

```bash
cat content.md | makima contract update-file <FILE_ID>
```

##### create-file

Create a new contract file (reads content from stdin).

```bash
cat content.md | makima contract create-file <NAME>
```

---

## Configuration

### Configuration File

The daemon loads configuration from multiple sources in order of precedence (highest first):

1. CLI arguments
2. Environment variables
3. Custom config file (if `--config` specified)
4. `./makima-daemon.toml` (current directory)
5. `~/.config/makima-daemon/config.toml` (user config)
6. `/etc/makima-daemon/config.toml` (system config, Linux only)
7. Default values

#### Example Configuration File

Create `makima-daemon.toml`:

```toml
# Server connection settings
[server]
url = "ws://localhost:8080"
api_key = "your-api-key"
heartbeat_interval_secs = 30
reconnect_interval_secs = 5
max_reconnect_attempts = 0  # 0 = infinite

# Worktree settings for task isolation
[worktree]
base_dir = "~/.makima/worktrees"
repos_dir = "~/.makima/repos"
branch_prefix = "makima/task-"
cleanup_on_start = false

# Process settings for Claude Code execution
[process]
claude_command = "claude"
claude_args = []
claude_pre_args = []
enable_permissions = false
disable_verbose = false
max_concurrent_tasks = 4
default_timeout_secs = 0  # 0 = no timeout

# Additional environment variables for Claude Code
[process.env_vars]
ANTHROPIC_API_KEY = "your-anthropic-key"

# Local database settings
[local_db]
path = "~/.makima/daemon.db"

# Logging settings
[logging]
level = "info"  # trace, debug, info, warn, error
format = "pretty"  # pretty or json

# Repository auto-clone settings
[repos]
home_dir = "~/.makima/home"

# Auto-clone repositories on daemon startup
[[repos.auto_clone]]
url = "https://github.com/user/repo.git"
branch = "main"
shallow = true

# Shorthand format also supported
[[repos.auto_clone]]
url = "github:user/another-repo"
name = "custom-name"
```

### Environment Variables

#### Daemon Environment Variables

| Variable | Description |
|----------|-------------|
| `MAKIMA_API_KEY` | API key for authentication (preferred) |
| `MAKIMA_DAEMON_SERVER_URL` | WebSocket server URL |
| `MAKIMA_DAEMON_SERVER_APIKEY` | API key (alternative) |
| `MAKIMA_DAEMON_REPOS_DIR` | Repository directory |
| `MAKIMA_DAEMON_WORKTREES_DIR` | Worktrees directory |
| `MAKIMA_DAEMON_PROCESS_MAXCONCURRENTTASKS` | Max concurrent tasks |

#### Server Environment Variables

| Variable | Description |
|----------|-------------|
| `PORT` | Server port |
| `POSTGRES_CONNECTION_URI` | PostgreSQL connection URI |
| `PARAKEET_MODEL_DIR` | Parakeet model directory |
| `PARAKEET_EOU_DIR` | Parakeet EOU model directory |
| `SORTFORMER_MODEL_PATH` | Sortformer model path |

#### Supervisor/Contract Environment Variables

| Variable | Description |
|----------|-------------|
| `MAKIMA_API_URL` | API URL for commands |
| `MAKIMA_API_KEY` | API key for authentication |
| `MAKIMA_CONTRACT_ID` | Current contract ID |
| `MAKIMA_TASK_ID` | Current task ID |

---

## Usage Examples

### Starting the Server

```bash
# Start with defaults
makima server

# Start with database
makima server --database-url "postgresql://localhost/makima" --port 8080

# Production setup
makima server \
  --port 8080 \
  --database-url "$DATABASE_URL" \
  --log-level info
```

### Running a Daemon Worker

```bash
# Quick start with CLI args
makima daemon \
  --server-url ws://localhost:8080 \
  --api-key your-api-key \
  --max-tasks 4

# Using environment variables
export MAKIMA_DAEMON_SERVER_URL=ws://localhost:8080
export MAKIMA_API_KEY=your-api-key
makima daemon

# Using a config file
makima daemon --config /etc/makima/daemon.toml
```

### Contract Orchestration Workflow

```bash
# Set up environment
export MAKIMA_API_URL=http://localhost:8080
export MAKIMA_API_KEY=your-api-key
export MAKIMA_CONTRACT_ID=your-contract-uuid

# Check contract status
makima supervisor status

# List existing tasks
makima supervisor tasks

# View task tree
makima supervisor tree

# Spawn a new task
makima supervisor spawn "Implement feature X" "Add the new feature with tests"

# Wait for task completion
makima supervisor wait <task-id> 600

# View task diff
makima supervisor diff <task-id>

# Create a PR
makima supervisor pr <task-id> \
  --title "Add feature X" \
  --body "Implements feature X with full test coverage" \
  --base main

# Or merge directly
makima supervisor merge <task-id> --to main --squash

# Ask user a question
makima supervisor ask "Which approach should we use?" \
  --choices "Option A,Option B,Option C" \
  --timeout 3600
```

### Task-Contract Interaction

When running inside a task, use contract commands to interact with the parent contract:

```bash
# Get contract context
makima contract status

# Check phase requirements
makima contract checklist

# List contract files
makima contract files

# Read a specific file
makima contract file <file-id>

# Report progress
makima contract report "Completed initial implementation"

# Get suggested next action
makima contract suggest-action

# Create a new documentation file
echo "# Architecture\n\nSystem design..." | makima contract create-file "Architecture"

# Update an existing file
cat updated_doc.md | makima contract update-file <file-id>

# Report completion with metrics
makima contract completion-action \
  --files "src/main.rs,src/lib.rs" \
  --lines-added 150 \
  --lines-removed 30 \
  --code
```

---

## Output Format

All commands output JSON to stdout for easy parsing and integration:

```bash
# Parse with jq
makima supervisor tasks | jq '.tasks[].name'

# Get specific fields
makima contract status | jq '{name: .name, phase: .phase}'

# Check completion
makima contract checklist | jq '.completion_percentage'
```

---

## Exit Codes

| Code | Description |
|------|-------------|
| `0` | Success |
| `1` | General error (authentication failed, invalid arguments, etc.) |

---

## See Also

- [Makima README](../README.md) - Project overview
- [Task Branching Plan](./PLAN-task-branching.md) - Task isolation architecture
