Skip to content

The .octo File Format

The .octo file is a DSL for orchestration intent. It expresses what you want coordinated — which arms, what kind of surface, what tone to close with — not how to coordinate it. Arms and surfaces look different every run. The .octo file stays the same.

The same philosophy as .reach: you write the intent. Claude compiles the implementation.


Basic Structure

# morning.octo

name    morning-brief
arms
  - outlook.inbox     since yesterday     analyze urgent
  - teams.planner     status overdue
  - teams.transcript  latest              summarize
  - git.commits       since yesterday     analyze cadence

surface
  title   "Good morning. Here's what needs you."
  show    urgent-items
  actions
    draft-reply   →  reach outlook.draft from selected
    send-summary  →  reach outlook.draft to team summarize all
    snooze        →  reach teams.planner snooze selected
    show-all      →  expand full output

close
  tone  warm
  joke  true

Eight lines of intent. Claude compiles each arm to typed C#, runs them, reads the combined signal, generates the surface, captures input, acts, closes with personality.


Arms Block

Each arm is a REACH — declared with source, qualifier, and intent:

arms
  - source          qualifier         intent
  - outlook.inbox   since yesterday   analyze urgent
  - teams.planner   status overdue
  - git.commits     since yesterday

Arm types:

TypeBehavior
Read armReaches into a source, returns findings. No side effects, runs freely.
Act armChanges state after human approval. Always gated by surface confirmation.
Signal armWrites a signal for another arm or process.

Arms run in parallel where possible. Results held in OCTO context until the surface is generated. Arms don't know what the other arms found — OCTO holds the combined signal.


Surface Block

The surface is generated from findings, not pre-built. Claude reads what the arms found and authors the right surface for this moment.

surface.brief

Compact. Three items max. Fast acknowledgement. Morning brief, deployment check, quick status.

surface
  type    brief
  title   auto
  items   3
  actions approve | snooze | expand

surface.review

Detailed. Full findings visible. Multiple action paths. Sprint review, incident response, timesheet approval.

surface
  type    review
  title   auto
  show    all-findings
  actions
    approve   →  act arm
    edit      →  return to draft
    delegate  →  reach outlook.draft forward
    archive   →  reach file.write to archive

surface.draft

Email or message preview before sending. Full content visible. Edit inline. Send or save.

surface
  type    draft
  show    email-preview
  actions send | edit | save-draft | discard

surface.acknowledge

Simplest gate. Information delivered. One action to continue.

surface
  type    acknowledge
  show    summary
  actions ok | snooze | escalate

The Close Block

Every OCTO session ends with a close. Not a system message. Not a log entry. A human moment — warm, brief, occasionally funny.

close
  tone    warm      # warm | neutral | minimal
  joke    true      # true | false
  summary true      # recap what was done

Claude authors the close based on what actually happened. The tone instruction shapes it. The joke flag adds levity. Neither is mandatory — tone minimal produces a clean exit.

Example closes:

# After morning brief with reply sent:
"Sarah will appreciate that.
 One less thing before your first meeting."

# After sprint review — all red:
"Ten weeks at redline. The data doesn't lie.
 Take the valley week. You've earned it."

# After timesheet posted:
"Logged. [TIMESHEET] has been fed.
 It was hungry."

# After deployment verified — all green:
"Green across the board.
 Rare. Enjoy it."

The close is not optional. Personality is what separates a tool from something you want to use again tomorrow.


Workflow Examples

deploy.octo

name    deploy-verify
arms
  - browser.page    "https://staging.internal/health"  extract status
  - db.query        env staging  sql "SELECT COUNT(*) FROM DeployLog WHERE Date = TODAY()"
  - git.commits     since yesterday  analyze summary
  - teams.transcript latest  summarize deployment-mentions

surface
  type    brief
  title   "Deployment status — {date}"
  actions
    all-clear     →  reach outlook.draft to team subject "Deploy verified ✓"
    flag-issue    →  reach outlook.draft to lead subject "Deploy issue flagged"
    investigate   →  expand full findings

close
  tone    neutral
  joke    false

review.octo

name    sprint-cadence-review
arms
  - outlook.inbox     since 10-weeks-ago  analyze cadence where subject contains project
  - outlook.calendar  since 10-weeks-ago  analyze density
  - git.commits       since 10-weeks-ago  analyze after-hours benchmark 15%

surface
  type    review
  title   "Sprint health — 10 week read"
  show    rpm-verdict after-hours-benchmark cadence-by-month
  actions
    share-findings  →  reach outlook.draft to manager summarize
    save-report     →  reach file.write sprint-review-{date}.reach-artifact
    plan-recovery   →  prompt.input "When does your valley week start?"

close
  tone    warm
  joke    true
  summary true

timesheet.octo

name    daily-timesheet
arms
  - git.commits       since today    analyze summary map-to-requests
  - outlook.calendar  since today    analyze meetings
  - outlook.inbox     since today    analyze threads

surface
  type    review
  title   "Today's timesheet — review before posting"
  show    drafted-entries
  actions
    post      →  reach timesystem.timesheet post entries
    edit      →  return to entries
    save      →  reach file.write timesheet-{date}-draft.json

close
  tone    warm
  joke    false
  summary true

Design Principles

Arms are independent — each arm reaches without knowing what the others found. OCTO holds the combined signal. Arms don't talk to each other.

The surface is always generated — never pre-built, never a fixed form. Claude reads the findings and authors the right surface for this moment.

Read arms run freely. Act arms need approval. — Same principle as REACH. The surface is the gate. Nothing changes state without human confirmation.

The close has personality — every session ends with a human moment. A tool you use once. Something with personality you use daily.

.octo files are the sharing unit — share a .octo file. Someone runs it against their data. The arms adapt. Same pattern, different context.