symphony-cli 0.1.0

Orchestration engine for coding agents — polls issue trackers, creates workspaces, and runs AI coding sessions
---
tags:
  - symphony
  - contributing
type: reference
status: active
area: community
aliases:
  - Contributing
created: 2026-03-06
---

# Contributing to Symphony

Thanks for your interest in contributing! Symphony is an open-source orchestration engine for coding agents, and we welcome contributions of all kinds.

## Quick Start

```bash
# Clone and build
git clone https://github.com/broomva/symphony.git
cd symphony
make smoke    # compile + lint + test (~2 min)
```

Requires Rust 1.85+ (edition 2024).

## Development Commands

```bash
make smoke    # Full gate: compile + clippy + test
make check    # Compile + clippy only
make test     # Run all tests
make build    # Release build
```

## What to Contribute

### Tracker Plugins

Symphony currently supports Linear. Adding GitHub Issues, Jira, GitLab, etc. is the highest-impact contribution.

To add a tracker:

1. Create a new file in `crates/symphony-tracker/src/` (e.g., `github.rs`)
2. Implement the `TrackerClient` trait (3 methods: `fetch_candidate_issues`, `fetch_issues_by_states`, `fetch_issue_states_by_ids`)
3. Add the new `kind` to config validation in `crates/symphony-config/src/loader.rs`
4. Add tests in the same file under `#[cfg(test)] mod tests`
5. Add an example workflow in `examples/`

### Agent Runner Compatibility

The agent runner works with any CLI that:
- Accepts input on stdin (JSON-RPC) or as CLI arguments
- Outputs line-delimited JSON on stdout
- Uses stderr for diagnostics (not parsed)

If you get Symphony working with a new agent, add an example workflow.

### Bug Fixes and Improvements

- Check the [spec reference]/Users/broomva/Downloads/Symphony%20SPEC.md for behavioral requirements
- Add tests for any new logic (tests live in `#[cfg(test)] mod tests` at the bottom of each file)
- Run `make smoke` before submitting

## Code Style

- `thiserror` for library errors, `anyhow` for application errors
- `tracing` for structured logging (never `println!` or `log`)
- `tokio` for async runtime
- `serde` for all serialization
- State normalization: `trim().to_lowercase()` for state comparisons
- Workspace keys: only `[A-Za-z0-9._-]`, replace others with `_`

## Pull Request Process

1. Fork and create a branch from `master`
2. Make your changes with tests
3. Run `make smoke` — it must pass
4. Open a PR with a clear description of what and why
5. Link to any relevant spec sections (e.g., "Implements S11.2")

## Architecture

See [[AGENTS]] for crate layout and design decisions.
See [[PLANS]] for the implementation roadmap.
See [[docs/operations/Control Harness|Control Harness]] for the build gate details.

## License

By contributing, you agree that your contributions will be licensed under the Apache License 2.0.

## Code of Conduct

This project follows the [Contributor Covenant](CODE_OF_CONDUCT.md). Please be respectful and constructive.

## See Also

- [[EXTENDING]] — plugin architecture: adding trackers and agent runners
- [[docs/architecture/Crate Map|Crate Map]] — all crates with spec coverage
- [[CONTROL]] — quality setpoints your code must satisfy
- [[docs/operations/Configuration Reference|Configuration Reference]] — WORKFLOW.md format
- [[SPEC]] — behavioral requirements