Skip to content
Smasher

Smasher

Rust pipeline runner that turns DOT directed graphs into multi-step AI workflows with streaming, a web dashboard, and human-in-the-loop gates.

GitHub ← All Products

Smasher is a Rust reimplementation of strongDM’s attractor — you define AI workflows as DOT directed graphs, and smasher executes them node by node. Five crates handle everything from raw LLM calls up through a web dashboard where you can watch pipelines run and answer human gate questions in the browser.

Install

git clone https://github.com/2389-ai/smasher.git
cd smasher
cargo build --release

Set at least one provider key:

export ANTHROPIC_API_KEY=sk-ant-...
# or OPENAI_API_KEY, or GEMINI_API_KEY

What it does

DOT-graph pipeline engine. Nine node types cover the common workflow patterns: box for LLM agent tasks, diamond for conditionals, oval for human interviews, house for approval gates, parallelogram for fan-out, hexagon for tools, and component for nested sub-pipelines. Edges are transitions. Attributes configure behavior. Standard Graphviz DOT — nothing proprietary.

Multi-provider LLM client. smasher-llm talks to OpenAI (Responses API), Anthropic (Messages API), and Gemini through one unified interface. Streaming, retries, and provider-specific quirks are handled at this layer so nothing above it has to care.

Agent loop with tools. smasher-agent runs a coding agent with six built-in tools — read, write, edit, shell, grep, glob. Steering rules constrain agent behavior per node. Subagents let you delegate within a pipeline step.

Web dashboard. smasher serve starts an HTMX frontend on port 21541. Live SSE event stream, graph visualization with status overlays, and a Q&A interface for human-in-the-loop gates. Submit pipelines from the browser or the CLI.

CLI for everything else. smasher complete for one-shot prompts, smasher chat for an interactive REPL with all six tools, smasher run for headless pipeline execution, plus resume, render, ingest, archive, and lint.

How it works

Five crates, each depending only on the layers below:

LayerCrateRole
1smasher-llmLLM client, provider catalog, request/response types
2smasher-agentAgent loop, tool dispatch, steering, event system
3smasher-attractorDOT parser (winnow), graph engine, node handlers
4smasher-cliCLI binary (clap)
5smasher-webWeb dashboard (axum + askama + HTMX)

The DOT parser uses winnow to read standard Graphviz digraphs. Node shapes map to handler types. The graph engine walks the DAG, dispatching each node to its handler, broadcasting events over tokio::broadcast for the web dashboard’s SSE stream.

Requirements

  • Rust 1.85+
  • At least one API key: Anthropic, OpenAI, or Gemini
27 products · 11 skills · 13 tools · 3 platforms · 5 building · hugo 0.148.2 · 9f6d849 · built Mar 9 22:16
2389 Radio
2389 RADIO Select a station