literate-commands Skill
description: Create guided, multi-step workflows that walk users through complex tasks with variable collection, conditional logic, and automated script execution. Extends regular opencode commands.
Want an agent-native computer in the browser? Try HappyCapy.
Cloud sandbox for AI agents · No setup · Run autonomous workflows from your browser
Affiliate link — we may earn a commission at no extra cost to you.
Why use this skill
literate-commands is most useful when you want an agent workflow that is more structured than an ad-hoc prompt. Instead of restating the same expectations every time, a dedicated SKILL.md file gives the assistant a repeatable brief. In this case, the core value is clarity: the repo already frames the workflow around backend skills tasks, and the skill source gives you a portable starting point you can evaluate, adapt, and reuse. The inferred platform for this skill is Generic Skills, which helps you judge whether it is likely to feel native in your current agent ecosystem or whether it is better treated as a general reference.
That matters because AI assistants are better when the operating context is explicit. A good skill turns hidden team expectations into visible instructions. It can name preferred tools, describe failure modes, define what “done” looks like, and reduce the amount of corrective prompting you need after the first draft. For developers exploring the wider SKILL.md ecosystem, this page helps answer the practical question: is this skill specific and maintained enough to be worth trying?
How to evaluate and use it
Start with the source repo and the preview below. The preview tells you whether the instructions are actionable or just aspirational. Strong skills usually describe triggers, recommended tools, steps, and known pitfalls. Weak skills tend to stay generic. This one lives in apiad/opencode-core, which gives you a concrete repo context, update history, and direct ownership trail.
Once you confirm the scope looks right, test it on a small task before making it part of a larger workflow. If it improves consistency, keep it. If it is too broad, outdated, or conflicts with your own process, treat it as a reference rather than a drop-in rule. That is the healthiest way to use directory-discovered skills: not as magic plugins, but as reusable operational knowledge that still deserves judgment.
SKILL.md preview
Previewing the source is one of the fastest ways to judge whether a skill is truly useful. This snippet comes from the public file in the linked repository.
---
name: literate-commands
description: Create guided, multi-step workflows that walk users through complex tasks with variable collection, conditional logic, and automated script execution. Extends regular opencode commands.
---
# Literate Commands Skill
Use this skill when you need to create **guided, multi-step workflows** that walk users through complex tasks with variable collection, conditional logic, and automated script execution.
## When to Use Literate Commands
Use literate commands when you want to:
- **Guide users through multi-step processes** (setup wizards, onboarding flows)
- **Collect structured data** from users before executing commands
- **Create reusable command templates** with customizable parameters
- **Build conditional workflows** that branch based on user input
- **Automate script execution** with variable interpolation
**Don't use them for:** Simple one-off commands that just run a single script or tool.
## Creating a Literate Command
1. Create a markdown file in `.opencode/commands/`
2. Add `literate: true` in the frontmatter
3. Define steps separated by `---`
```markdown
---
description: My guided workflow
literate: true
---
First step content...
---
Second step content...
```
## Step Configuration
Each step can have a YAML config block to control behavior:
```yaml {config}
step: unique-step-name
parse:
variable: type
next:
"condition": target-step
stop: true
```
### Config Options
| Option | Type | Description |
|--------|------|-------------|
| `step` | string | Unique name for routing (use `kebab-case`) |
| `parse` | ob
...