devos.ing is a multi-project orchestration hub that turns eligible tasks into a copyable PIV workflow: plan, implement, and review.
packages/cli/src/features/config/owns runtime config resolution from env vars, home-scoped onboarding state, and server-owned project metadata.packages/cli/src/features/workflow/owns the Workflow Orchestrator role: loading workflow scripts, selecting tasks, running phases, updating run state, handling retries, and pausing for human review.- Integration modules stay isolated under
packages/cli/src/integrations/, while agent runtime adapters live inpackages/agent-adapters/:packages/cli/src/integrations/linear/linear.tspackages/cli/src/integrations/github/github.tspackages/agent-adapters/src/codex/index.tspackages/agent-adapters/src/claude/index.tspackages/cli/src/integrations/notifications/notifications.ts
- Server-owned cron runtime and scheduling live under
packages/server/src/cron/(entrypoint:packages/server/src/cron/run-cron.ts). packages/cli/src/features/workflow/state.tsowns run-state paths and legacy fallback behavior.packages/cli/src/args.tsandpackages/cli/src/index.tsown CLI parsing and command dispatch with command handlers inpackages/cli/src/commands/.
The default workflow has three phases:
plan: one planning agent turns task context into an implementation goal.implement: one implementation agent applies the plan and prepares PR context.review: two review agents validate the result:testingchecks commands, test output, and executable evidence.qachecks product fit, acceptance criteria, regressions, and handoff quality.
The Workflow Orchestrator owns phase order and retries; task source adapters, PR providers, agent adapters, MCP tools, connector integrations, state storage, and notifications own their respective side effects. Review output must preserve the parsing contract:
RESULT: PASS|FAILSUMMARY: ...BUGS_JSON: [...]
flowchart TD
trigger[Trigger<br/>Operator / Poller / Cron / API] --> config[Config Resolver<br/>project + runtime settings]
config --> script[Workflow Script<br/>.mjs phases, skills, MCPs, connectors]
script --> orchestrator[Workflow Orchestrator<br/>interpret script and run phases]
orchestrator <--> taskSource[Task Source Adapter<br/>manual task / board / API / scheduled job]
orchestrator <--> state[Run State Manager<br/>phase, lease, retries, sessions, logs]
orchestrator --> plan[Plan Phase<br/>Planning Agent]
plan --> planDecision{Ready?}
planDecision -->|Needs info| humanReview[Human Review<br/>clarification or approval]
planDecision -->|Split task| childTasks[Create child tasks<br/>finish parent task]
planDecision -->|Ready| implement[Implement Phase<br/>Implementation Agent]
implement --> prProvider[PR Provider<br/>branch, draft PR, PR updates]
prProvider --> testing
prProvider --> qa
subgraph reviewPhase [Review Phase]
testing[Testing Agent]
qa[QA Agent]
end
testing --> reviewDecision{Review passed?}
qa --> reviewDecision
reviewDecision -->|No, retryable| implement
reviewDecision -->|No, blocked| humanReview
reviewDecision -->|Yes| done[Mark run done<br/>PR ready or merged]
orchestrator --> notify[Notification Integration<br/>human review and outcome messages]
plan --> agentAdapter[Agent Adapter<br/>Codex / Claude / other]
implement --> agentAdapter
testing --> agentAdapter
qa --> agentAdapter
script --> capabilities[Capability Bindings<br/>skills / MCPs / connectors]
state --> runFiles[.devos/projects/<project-id>/runs/*.json]
state --> chatLogs[.devos/projects/<project-id>/chat-logs/*.json]
Workflow definitions should be copyable .mjs modules. The orchestrator reads the script to learn the phases, which agents run in each phase, and which skills, MCP tools, and connectors are available.
export default {
id: "piv-default",
phases: [
{
id: "plan",
agents: [{ id: "planner", skill: "skills/plan.md" }],
connectors: ["task-source"],
},
{
id: "implement",
agents: [{ id: "implementer", skill: "skills/implement.md" }],
mcps: ["github", "filesystem"],
connectors: ["pr-provider"],
},
{
id: "review",
agents: [
{ id: "testing", skill: "skills/testing.md" },
{ id: "qa", skill: "skills/qa.md" },
],
mcps: ["github", "filesystem"],
gates: ["RESULT: PASS|FAIL", "SUMMARY", "BUGS_JSON"],
},
],
};- Every run resolves to one or more
project.idvalues. - Run state is persisted under
.devos/projects/<project-id>/runs. - Status reads require an explicit project id.
- Default invocation without project flags targets the first configured project.
--all-projects --issue <KEY>must resolve to one unique project mapping.
- Task source adapters provide eligible tasks and route them by project config.
- The Workflow Orchestrator loads the
.mjsworkflow script and resolves phase capabilities. - The plan phase builds the task goal from task context, skills, and optional connector data.
- The implement phase applies code changes and creates or updates PR context.
- The review phase runs testing and QA agents, then emits structured pass/fail output and bug payload.
- Failed verification feeds back into implementation until pass or blocked.