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:
- A CLI runner (
ash) that discovers installed agents, executes numbered task files in order, and passes output between steps. - A scripting language (
.ashfiles) 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
.ashscripts 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.