System Structure
This page is for developers, contributors, and agents who need the project shape quickly.
Repository shape
Section titled “Repository shape”The Rust workspace is split by broad responsibility:
crates/track-apiLocal HTTP API and static asset serving.crates/track-cliThe CLI entrypoint and human-facing command surface.crates/track-captureLocal task parsing and model resolution.crates/track-configLocal configuration path handling.crates/track-dalSQLite persistence for backend-owned state.crates/track-projectsProject registration and metadata.crates/track-remote-agentRemote task and PR review orchestration.crates/track-typesShared domain types used across crates.
The non-Rust top-level directories are:
frontend/The Vue WebUI.docs/The Starlight documentation book.
Runtime state today
Section titled “Runtime state today”The current system is centered on backend state, not on hand-edited task files.
- The CLI keeps its own config in
~/.config/track/cli.json. - The backend keeps live state in SQLite.
- Remote-agent SSH material is managed under backend state.
Task capture flow
Section titled “Task capture flow”- The CLI loads local configuration.
- The CLI fetches registered projects from the backend.
- The local parser turns rough prose into structured task input.
- The backend validates and stores the task.
Task dispatch flow
Section titled “Task dispatch flow”- The WebUI asks the backend to dispatch a task.
- The backend loads runner settings and project metadata.
- The backend prepares or reuses remote workspace state.
- The backend launches Codex or Claude on the remote machine.
- The backend stores run history for the WebUI.
PR review flow
Section titled “PR review flow”- The WebUI creates a review request from a GitHub PR URL.
- The backend prepares remote review context.
- The remote runner submits the review on GitHub.
- The backend stores the review record and each review run.
Deployment shape
Section titled “Deployment shape”The shipped Docker image serves both:
/api/*from the Rust backend- the built frontend assets
That is why the everyday user flow only needs one local container stack and one browser port.