dynobox docs

CI Integration

CI support is usable today, but the final Dynobox CI experience is still evolving. Dynobox does not ship a packaged GitHub Action yet. Until then, dynobox/skills provides a temporary working pattern you can inspect and adapt.

The skills repo is intentionally a first look, not the final CI contract. It shows how to run real skill dynos in GitHub Actions, publish a readable summary, and preserve the original Dynobox exit status after reporting artifacts are created.

Reference Implementation

See these files in dynobox/skills:

Pattern

The current example uses one GitHub Actions job and lets Dynobox expand the matrix defined by the dyno files:

npx dynobox run .agents/skills --reporter json > dynobox.ndjson

This shape is useful for skill repositories because each skill can own its tests under .agents/skills/<skill-name>/dyno, while CI only needs to point Dynobox at .agents/skills.

The workflow in dynobox/skills does the following:

  • Checks out the repository with persisted Git credentials disabled.
  • Installs Node.js dependencies and the local agent harness CLIs.
  • Verifies ANTHROPIC_API_KEY and OPENAI_API_KEY are available.
  • Logs Codex in with codex login --with-api-key.
  • Runs dynobox run .agents/skills --reporter json once.
  • Writes the NDJSON report to dynobox.ndjson.
  • Converts the final summary record and failed job diagnostics into dynobox.md.
  • Appends that Markdown to the GitHub step summary.
  • Optionally upserts a PR comment for same-repository pull requests.
  • Uploads dynobox.ndjson and dynobox.md as workflow artifacts.
  • Fails the job with Dynobox's original exit status after reporting finishes.

Harness Matrix

The GitHub Actions workflow does not duplicate the harness matrix. The dyno file owns it instead:

const harnesses = [
  {
    id: 'claude-code',
    model: 'sonnet',
  },
  {
    id: 'codex',
    model: 'gpt-5.4-mini',
    permissionMode: 'dangerous',
  },
];

export default defineDyno({
  name: 'commit-skill-smoke-test',
  harnesses,
  scenarios: [
    // ...
  ],
});

This keeps local and CI runs aligned. The same dynobox run .agents/skills command discovers every skill dyno and executes the configured scenario/harness pairs.

Required Secrets

The current example expects these repository secrets:

  • ANTHROPIC_API_KEY for Claude Code runs.
  • OPENAI_API_KEY for Codex runs.

If your dynos only use one harness, adjust the setup and secret checks to match the harnesses you actually run.

Status

This pattern is a practical starting point for teams that want Dynobox in CI today. Future Dynobox releases may provide a smaller packaged action or a different hosted reporting path, so treat the skills repo workflow as an example rather than a stable final interface.