dyno-createlisted
Install: claude install-skill dynobox/dynobox
# Dyno Authoring
Dynobox is a local test runner for agent and skill workflows. A dyno sends a
prompt to one or more harnesses, then asserts on observable behavior: tool calls,
files in the scratch workdir, HTTP traffic, transcripts, and final messages.
Assume the user is authoring for the public `dynobox` CLI unless they explicitly
say they are working against a local Dynobox build.
YAML and JS/TS dynos share one schema. YAML uses plain `type`-discriminated
objects instead of SDK helpers like `tool.called(...)` or `artifact.exists(...)`.
Use YAML for simple standalone dynos. Use JS/TS when the dyno benefits from
SDK helpers, colocated fixtures, path helpers, shared scenario fragments, or a
skill smoke-test layout.
## File Naming
For a new YAML dyno, default to:
```text
dynobox/<descriptive-slug>.dyno.yaml
```
For a skill smoke test in this repository, prefer the colocated JS convention:
```text
.agents/skills/<skill-name>/dyno/<skill-name>.dyno.mjs
.agents/skills/<skill-name>/dyno/fixtures/
```
`dynobox run` recursively discovers:
```text
*.dyno.{yaml,yml,mjs,js,ts,mts}
```
Explicit paths can use other names if the content is valid:
```bash
dynobox run path/to/dynobox.config.yaml
```
## JS/TS Dynos
Use SDK helpers for JS/TS dynos:
```js
import {defineDyno, dyno, finalMessage, skill, tool} from '@dynobox/sdk';
const here = dyno.here(import.meta.url);
export default defineDyno({
name: 'skill-smoke-test',
scenarios: [
{
name: 'skill reads fixture