Gabriel Koerich Orch

All runtime configuration lives in ~/.orch/config.yml (ORCH_HOME), unless overridden via the ORCH_HOME environment variable.

Config Reference

SectionKeyDescriptionDefault
top-levelproject_dirOverride project directory (auto-detected from CWD)""
top-levelrequired_toolsTools that must exist on PATH before launching an agent[]
enginetick_intervalMain engine tick interval in seconds10
enginesync_intervalSync tick interval in seconds (GitHub ingest, cleanup)45
enginemax_parallelMax tasks dispatched concurrently4
enginestuck_timeoutTimeout (seconds) for detecting stuck in_progress tasks1800
engineno_session_stuck_timeoutTimeout (seconds) for in_progress tasks with no tmux session600
enginewebhook_health_check_intervalHealth check frequency for the local webhook server60
enginesilence_grace_periodSeconds of agent silence before warning(see config.example.yml)
enginesilence_cooldownSeconds of agent silence before marking model unavailable(see config.example.yml)
enginegraceful_shutdown_timeoutSeconds to wait for in-flight tasks on SIGTERM600
engineauto_upgradeAutomatically run brew upgrade orch on a scheduletrue
engineupgrade_check_intervalHow often to check for new orch versions (seconds)3600
workflowauto_closeAuto-close GitHub issues when tasks are donetrue
workflowenable_review_agentRun a review agent after task completionfalse
workflowmax_attemptsMax attempts before marking task as blocked10
workflowmax_review_cyclesMax PR review cycles before escalating to human2
workflowmax_reroute_attemptsMax times a task may be re-routed automatically3
workflowtimeout_secondsTask execution timeout (0 disables timeout)1800
workflowtimeout_by_complexityPer-complexity overrides (e.g. complex: 7200){}
workflowrequired_skillsSkills always injected into agent prompts[]
workflowallowed_toolsTool patterns the agent may use (allowlist)[]
workflowdisallowed_toolsTool patterns blocked via --disallowedTools["Bash(rm *)","Bash(rm -*)"]
workflowpermissions.modeAgent permission mode (autonomous / supervised)autonomous
workflowpermissions.sandboxSandbox level for Codex (workspace-write / full-access)workspace-write
workflowworktree_janitor_ttl_hoursJanitor TTL before pruning orphaned worktrees(see config.example.yml)
workflowauto_create_followup_on_changesAuto-create follow-up task when review requests changesfalse
routermodellm, round_robin, or local (Ollama)llm
routeragentDefault router executorclaude
routermodelRouter model namehaiku
routertimeout_secondsRouter timeout (0 disables timeout)60
routermax_route_attemptsLLM failures before falling back to round-robin3
routermax_tasks_per_tickMax routing decisions per engine tick (concurrency cap)1
routerfallback_executorFallback executor when router failscodex
routerallowed_toolsDefault tool allowlist used in routing prompts[yq, jq, bash, ...]
routerweighted_round_robinUse degraded-weight-aware round robinfalse
routerpoolAgents and models the router may pick from(see config.example.yml)
webhookenabledStart the local webhook receiver (HTTP)false
webhookportWebhook listener port8080
webhooksecretHMAC secret for verifying GitHub webhook payloads""
ghrepoDefault repo (owner/repo)"owner/repo"
ghproject_idGitHub Project v2 ID""
ghproject_status_field_idStatus field ID in Project v2""
ghproject_status_mapMapping for backlog/in_progress/review/done option IDs{}
gh.backoffbase_secondsInitial backoff duration in seconds30
gh.backoffmax_secondsMax backoff duration in seconds900
ghallow_gh_fallbackAllow gh auth token CLI fallback when no token is settrue
ghauth.tokenExplicit Personal Access Token""
githubtoken_modeToken resolution mode: env or github_app"env"
githubapp_idGitHub App ID (for token_mode: github_app)""
githubprivate_key_pathPath to GitHub App private key (.pem)""
channels.discordbot_tokenDiscord bot token""
channels.telegrambot_token / chat_idTelegram bot credentials""
notificationslevelMinimum notification level (info / warn / error)info
agents(list of strings)Agent CLIs to discover in $PATH (e.g. [claude, codex, opencode])[]
model_mapsimple/medium/complex/reviewPer-complexity model name per agent{}

Authoritative reference: config.example.yml in the orch repo. Run orch config <key> to read the live value for any dotted key (e.g. orch config engine.tick_interval).

Per-Project Config

Drop a .orch.yml (legacy .orchestrator.yml is still supported) in your project root to override global config (project-level keys take precedence over global).

# ~/projects/my-app/.orch.yml
required_tools: ["bun"]
gh:
  repo: "myorg/my-app"
  project_id: "PVT_..."
workflow:
  enable_review_agent: true
  required_skills: []
router:
  fallback_executor: "claude"
  • Project config is deep-merged with global config (project wins)
  • The server restarts automatically when .orch.yml changes
  • Use orch project board sync to (re-)discover project / status / estimate field IDs and persist them into the project's .orch.yml

Skills

Skills extend agent capabilities with specialized knowledge. Skill repositories are cloned into ~/.orch/skills/ by the engine on its sync tick — there is no dedicated orch skills subcommand.

# ~/.orch/skills.yml
repositories:
  - name: gabrielkoerich
    url: https://github.com/gabrielkoerich/skills
    description: Personal skill catalog
    pin: f9a2062d2a184f9625746262a6b7656d3b630973  # Optional: pin to a specific commit
  - name: anthropics
    url: https://github.com/anthropics/skills
    description: Anthropic official skills
    pin: 1ed29a03dc852d30fa6ef2ca53a67dc2c2c2c563
skills: []   # Reserved for inline skill definitions (rarely used)

Skills listed in workflow.required_skills are always injected into agent prompts. Other skills are selected per-task by the router.

GitHub Authentication

Orch resolves GitHub tokens in this order — the first match wins:

  1. GH_TOKEN environment variable
  2. GITHUB_TOKEN environment variable
  3. gh.auth.token config value
  4. gh auth token CLI (enabled by default via gh.allow_gh_fallback: true)

The simplest setup is just gh auth login. No extra config needed.

Environment Variables

export GH_TOKEN="ghp_xxxxxxxxxxxxxxxxxxxx"

Explicit token in config

# ~/.orch/config.yml
gh:
  auth:
    token: "ghp_xxxxxxxxxxxxxxxxxxxx"

GitHub App Authentication

For GitHub App authentication, configure the App ID and private key path:

# ~/.orch/config.yml
github:
  token_mode: github_app
  app_id: "123456"
  private_key_path: "/path/to/app.pem"

The resolver automatically generates a JWT from the private key (valid for 9 minutes) and caches it until expiration.

Disable gh CLI fallback

The gh auth token fallback is enabled by default. To enforce explicit token configuration:

# ~/.orch/config.yml
gh:
  allow_gh_fallback: false

Agent Session Tokens

When spawning agents in tmux sessions, tokens are injected via the tmux session environment (tmux set-environment) rather than being embedded in runner scripts. This prevents token leakage to disk and enables centralized token rotation without restarting agents.