Ash 0.1.0: A Language for Agent Workflows

By Ash Team ·

Ash 0.1.0: A Language for Agent Workflows

We are excited to announce the first public release of Ash — a task orchestration language built for the multi-agent era.

The Problem

Coding assistants have exploded in the last year. opencode, claude-code, aider, codex, gemini-cli, kimi — each with different strengths, different CLI flags, different output formats. Developers who want to use more than one end up writing fragile shell scripts or manually copying output between tools.

Ash was built to make this trivial.

What Ash Is

Ash is two things:

  1. A CLI runner (ash) that discovers installed agents, executes numbered task files in order, and passes output between steps.
  2. A scripting language (.ash files) for loops, retries, conditionals, shell commands, and agent calls — all in one file.

The language is deliberately small. You can learn the entire syntax in under ten minutes. But it composes: variables, functions, includes, and shared state let you build complex pipelines from simple pieces.

What is in 0.1.0

Multi-agent support out of the box

ash --agent opencode ./tasks/    # use opencode for all steps
ash --agent claude-code ./tasks/ # or claude-code

Set per-task agents with YAML frontmatter or .ash shebangs. Mix agents in a single workflow — research with one, implement with another, review with a third.

Markdown tasks with agent directives

---
agent: opencode
model: sonnet
---

Research the best approach for adding WebSocket support to a Go server.

The frontmatter is optional. Without it, Ash uses the agent specified by --agent.

Ash scripting language

The .ash format kicks in when a single prompt is not enough:

#!opencode:1.0

FILES = ["auth.go", "api.go", "db.go"]

for FILE in FILES {
  do "Add structured error handling to ${FILE}"
  if $? != 0 {
    print "Failed on ${FILE}: ${stderr}"
    exit 1
  }
}

exec go test ./...

You get variables, lists, for loops, if/else, try/fail/upto retry blocks, fn functions, include for shared helpers, and exec for shell commands.

Agent discovery

Run ash discover once, and Ash finds every coding agent on your system, figures out their CLIs, and writes sensible default configs. No YAML wrangling required.

State passing

Every task output (stdout, stderr, exit code) flows into the next step. Reference previous results with stdout, stderr, and $?. Chain steps without glue code.

What is next

We are shipping fast. On the roadmap for upcoming releases:

  • Parallel task execution — fan out multiple agent calls within a single step
  • WebAssembly runtime — run .ash scripts directly in the browser playground
  • VS Code extension — syntax highlighting, autocomplete, and inline agent results
  • Plugin system — custom agents, custom runtimes, custom state backends

Try It

npm install -g ash-lang
ash discover
ash --agent opencode ./tasks/

Check the docs to get started, try the playground in your browser, or drop by GitHub to star the repo, report bugs, or contribute.

We built Ash because we wanted it to exist. We hope you find it useful.