vibe-action 0.2.0

Command router โ€” execute shell commands and LLM prompts via simple YAML actions.
# Introduction

Vibe Action is a command router that executes shell commands and LLM prompts via simple YAML pipelines.

## Why Vibe Action

- โšก **One command = complex pipeline** โ€” chain shell scripts and LLM calls into a single action
- ๐Ÿ”— **Tag system** โ€” connect steps via `{tag}` references with automatic dependency graph
- ๐Ÿ”ง **Modifiers** โ€” 20+ inline value transformations with arguments
- ๐Ÿ”€ **When/Then** โ€” conditional execution in YAML without shell scripts
- ๐ŸŒณ **AST parsing** โ€” `{tag|ast}` auto-detects language from file, `{tag|ast:rs}` for explicit
- ๐Ÿ–ฅ๏ธ **System tags** โ€” 13 built-in tags: `{system_dir_pwd}`, `{system_os}`, `{system_user}` and more
- ๐Ÿ“ฅ **Unified Input** โ€” `{query}` tag seamlessly handles text, files, images, and interactive prompts from CLI or IDE
- ๐Ÿ‘๏ธ **Vision support** โ€” screenshot description, person identification, image from URL or clipboard
- ๐ŸŒ **Fetch** โ€” load and summarize web pages, PDFs, images via `load` and `text` modifiers
- ๐Ÿ“ฆ **Scan** โ€” scan codebase and export AST as structured JSON
- ๐Ÿงช **Benchmarks** โ€” automatic testing of all actions with timing and output validation
- โšก **Action cache** โ€” instant startup via snapshot-based validation
- ๐Ÿค– **Batch LLM** โ€” parallel execution across cluster nodes with role-based routing (tiny, small, medium, large, vision)
- โœ… **Type-safe** โ€” validate outputs with `expect: string | list` and regex `check`
- ๐Ÿ”” **Notifications** โ€” optional desktop notifications on completion
- ๐Ÿ” **Confirmations** โ€” ask before executing dangerous commands
- ๐Ÿ’ฌ **Self-documenting** โ€” built-in `faq` command answers questions about Vibe Action itself
- ๐ŸŽฏ **CLI-first** โ€” no browser, no context switching. Everything in the terminal
- ๐Ÿ”Œ **IDE Integration** โ€” built-in `api` block for seamless VS Code and IntelliJ plugin support
- โฑ๏ธ **Process Guard** โ€” new runs automatically supersede previous ones, keeping state predictable
- ๐Ÿ”’ **Open & Flexible** โ€” open source. Use local models via Ollama or cloud APIs (DeepSeek, Qwen, Kimi, Zhipu)
- ๐Ÿฆ€ **Fast** โ€” built in Rust

## Key Concepts

### YAML Pipelines

Describe your workflow in YAML, not code:

```yaml
name: extract
about: Extract matching lines from text and logs
args:
  - name: file
    short: f
    input: string
    help: Path to the log or text file
api:
  output: replace
  input: query|prompt
actions:
  - tag: tag_lines
    run: cmd
    expect: list
    action: cat {file}
  - tag: tag_content
    run: small
    expect: string
    action: |
      [Task]
      If the line matches the query โ€” output the EXACT line unchanged.
      If it does not match โ€” output only a single dash: "-"
      Do NOT skip lines. Process every line.

      [Query]
      {query|prompt}

      [Line]
      {tag_lines}
  - tag: tag_clean
    run: value
    expect: string
    action: '{tag_content|trim:-}'
  - tag: tag_extract
    run: value
    expect: string
    action: '{tag_clean|uniq|join}'
```

### When/Then Conditions

Use `when/then` for conditional logic without shell scripts:

```yaml
- tag: tag_result
  run: cmd
  expect: string
  action:
    - when: '{tag_check|contains:DIRTY}'
      then: echo "{tag_content}"
    - when: '{tag_check|contains:CLEAR}'
      then: echo "No errors found."
```

### System Tags

Access environment context anywhere in your pipelines:

```yaml
- tag: tag_info
  run: value
  expect: string
  action: |
    User: {system_user}
    OS: {system_os}
    PWD: {system_dir_pwd}
    Date: {system_date}
```

## How It Works

1. **You write a YAML file** describing your workflow โ€” steps, types, dependencies
2. **The engine parses it** and builds a dependency graph from `{tag}` references
3. **Steps execute in order** โ€” shell commands run locally, LLM prompts go to your cluster
4. **Results are validated** against expected types and optional regex patterns
5. **Final output** is displayed on screen, copied to clipboard, or sent as notification