vibe-action 0.2.0

Command router — execute shell commands and LLM prompts via simple YAML actions.
# Configuration

Vibe Action uses a single YAML config file at `~/.vibe-action/config.yaml`. It is created automatically on first run.

## Action

Runtime settings for all flows.

```yaml
action:
  system: |
    You are Vibe Action — a CLI tool, not a chatbot.
    Work fast. Don't think too much. Just do the task.
    Output ONLY the requested result.
  retries: 2
```

| Field     | Type    | Description                                      |
| --------- | ------- | ------------------------------------------------ |
| `system`  | string  | Global system prompt for all LLM requests        |
| `retries` | integer | Number of retries for failed LLM steps (0 = off) |

## Cluster

Define one or more LLM providers. The engine sends prompts to all nodes in parallel.
Use `role` to assign models to specific complexity levels.

```yaml
cluster:
  - provider: ollama
    host: http://localhost:11434
    model: qwen2.5-coder:14b-instruct
    role: medium
    timeout_secs: 60
    temperature: 0.1
    seed: 42
    num_ctx: 4096
    num_predict: 2048
    parallel: 1
```

### Cluster Node Fields

| Field          | Type    | Description                                   |
| -------------- | ------- | --------------------------------------------- |
| `provider`     | string  | `ollama`, `deepseek`, `qwen`, `kimi`, `zhipu` |
| `host`         | string  | API endpoint URL                              |
| `model`        | string  | Model name                                    |
| `role`         | string  | `tiny`, `small`, `medium`, `large`, `vision`  |
| `timeout_secs` | integer | Request timeout in seconds                    |
| `temperature`  | float   | 0.0-2.0, lower = more deterministic           |
| `seed`         | integer | Random seed for reproducibility               |
| `num_ctx`      | integer | Context window size in tokens                 |
| `num_predict`  | integer | Max tokens to generate                        |
| `api_key`      | string  | API key for cloud providers (optional)        |
| `parallel`     | integer | Concurrent connections (default: 1)           |

### Multi-Node Cluster with Roles

```yaml
cluster:
  - provider: ollama
    host: http://localhost:11434
    model: qwen2.5-coder:3b-instruct
    role: tiny
    timeout_secs: 30
    temperature: 0.0
    seed: 42
    num_ctx: 4096
    num_predict: 512
    parallel: 2

  - provider: zhipu
    host: https://open.bigmodel.cn/api/paas/v4
    model: glm-4-flash
    role: small
    timeout_secs: 60
    temperature: 0.1
    seed: 42
    num_ctx: 8192
    num_predict: 2048
    api_key: sk-...
    parallel: 2

  - provider: ollama
    host: http://192.168.1.10:11434
    model: qwen2.5-coder:14b-instruct
    role: medium
    timeout_secs: 60
    temperature: 0.1
    seed: 42
    num_ctx: 8192
    num_predict: 2048
    parallel: 1

  - provider: deepseek
    host: https://api.deepseek.com/v1
    model: deepseek-v4-flash
    role: large
    timeout_secs: 120
    temperature: 0.1
    seed: 42
    num_ctx: 16384
    num_predict: 8192
    api_key: sk-...
    parallel: 2

  - provider: kimi
    host: https://api.moonshot.cn/v1
    model: moonshot-v1-8k
    role: large
    timeout_secs: 120
    temperature: 0.1
    seed: 42
    num_ctx: 8192
    num_predict: 2048
    api_key: sk-...
    parallel: 1

  - provider: ollama
    host: http://localhost:11434
    model: qwen2.5vl:7b
    role: vision
    timeout_secs: 120
    temperature: 0.1
    seed: 42
    num_ctx: 4096
    num_predict: 2048
    parallel: 1
```

Nodes with `role: tiny` are used for `run: tiny`, `role: small` for `run: small`, `role: medium` for `run: medium`, `role: large` for `run: large`, `role: vision` for `run: vision`.
Nodes without a `role` respond to all requests.

## Actions Directory

Actions are stored in `~/.vibe-action/actions/`. The directory is created on first run with default actions. Override with `VIBE_ACTION_PATH`.

```
~/.vibe-action/
├── config.yaml
└── actions/
    ├── comment.yaml
    ├── commit.yaml
    ├── describe.yaml
    ├── explain.yaml
    ├── ...
```

Add your own `.yaml` files here — they will be loaded automatically.