Contributing
Where features go
Architectural table for placing new functionality in the Cori codebase, and coding conventions.
Feature placement table
| Feature area | Where it lives |
|---|---|
| New CLI verb or flag | crates/cori-cli/src/commands/ |
| Manifest schema change | crates/cori-core/src/manifest.rs + packages/sdk/ for TS types |
| New activity kind | crates/cori-core/ (kind enum) + crates/cori-broker/ (executor) + packages/sdk/ (constructor) |
| Temporal connection logic | crates/cori-temporal/ |
| Step compilation | crates/cori-compiler/ |
| Step-to-queue assignment | crates/cori-planner/ |
| Activity execution (all side effects) | crates/cori-broker/ — the trust boundary |
| Run trace shape | crates/cori-cli/src/commands/run.rs |
| Worker registration | crates/cori-worker/ |
| Agent skill authoring procedure | packages/skill/ |
| Docs | docs/content/docs/ |
The largest known gap
The builtin activity kind (map, for_each, branch, parallel, wait) is accepted by the compiler but not executed by the v1 runtime. This is the biggest missing piece for complex workflow patterns.
Adding builtin execution requires:
- Defining the execution semantics in
crates/cori-core/ - Implementing the executor in
crates/cori-broker/ - Updating the planner in
crates/cori-planner/for fan-out - Updating
packages/sdk/with the constructor implementations - Adding integration tests
Coding conventions
- Edition 2024 Rust. Use modern Rust idioms.
- No
unwrap()in library code. Use?and proper error types.unwrap()is acceptable in tests. - Broker is the only place with side effects. If new code makes a network call, touches the filesystem, or executes a subprocess, it belongs in
cori-brokeror in a crate thatcori-brokercalls. - TypeScript-only step files. No other language runtimes for step execution.
AGENTS.mdis the source of truth for architectural decisions. When in doubt, read it.
Refer to AGENTS.md in the repository for the full, authoritative conventions and locked decisions.