Business Ops
Turn one business signal into a replayable operations graph.
business-ops routes one signal into one selected bounded lane without giving
the agent ambient authority. The default route runner returns that typed
lane immediately; it does not require event-store configuration or run
unrelated docs, release, work, outreach, spend, and audit branches. Select
route_and_append only when a chain needs a durable event plus projection
readback, and select main only when the full planning fan-out is the
requested artifact.
This is not a provider integration and not an operator dashboard. It is the
small core shape that teams copy when they want one objective to fan out into a
chain of skills, then replay that chain with receipts.
The explicit route_and_append runner takes the same selected lane, appends
its packet through data-store, reads back the projection, and returns one
route_persistence result that distinguishes a new commit from an idempotent
replay while preserving the selected lane_packet. The same graph
can use local JSON, SQLite, Postgres, D1, Redis, or a product adapter by changing
the data_source_ref binding. Its aggregate id, expected version, and
idempotency key stay explicit because guessing them would corrupt durable
workflow state.
Composes
data-store#append_event
data-store#read_projection
What this skill does
- Routes one business signal into one selected typed lane by default.
- Can explicitly fan the signal through representative lanes: docs, release,
issue/PR, outreach planning, spend quoting, and proof audit.
- Produces structured lane packets with authority, gate, handoff, evidence, and
readback fields.
- Demonstrates the runx split between proposal work and consequential action:
drafts and plans can be produced, but sends, spend, merges, publishes, and
deploys require a separate approval and execution lane.
- Gives downstream agents a clear handoff target instead of vague prose.
- Optionally persists the classified route for replay through
data-store.
What this skill deliberately does not do
- It does not call private providers, mutate a repo, post to GitHub, send email,
schedule campaigns, move money, publish releases, or deploy services.
- It does not duplicate
ops-desk, product operator skills, send-as,
vendor-specific provider skills, release, issue-to-pr, spend, or
receipt-audit skills.
- It does not turn "outbound marketing" into a hidden side effect. Outreach is
a plan lane here; real delivery routes to
send-as and then a provider
adapter. Branded provider skills are concrete adapters, not branches in this
core graph.
- It does not treat the graph receipt as proof that an external provider action
happened. Provider actions need provider evidence and their own receipt.
When to use this skill
- To show how runx chains skills into replayable business operations.
- To prototype a team-specific ops graph before wiring private provider tools.
- To route a product signal without giving the agent blanket repo, email,
wallet, or deployment access.
- To explain why a governed workflow is more useful than a one-shot prompt:
the route, stops, handoffs, and readbacks are explicit and replayable.
- To smoke-test graph execution and child receipts with no external account.
When not to use this skill
- To run a production launch, incident, release, campaign, support reply,
payout, or spend flow as-is. Replace fixture lanes with real skills first.
- To approve a live send, spend, merge, publish, deploy, or customer-visible
action.
- To hide project policy, customer lists, credentials, wallet keys, provider
dumps, or private review context in the signal.
- To claim external work completed when only this fixture graph ran.
Mental model
standalone: signal -> one typed lane -> downstream handoff
durable: signal -> one typed lane -> append -> projection readback
fanout: signal -> all planning lanes -> approval stops -> governed handoffs -> proof
The useful part is the reusable route. A direct call returns one packet instead
of forcing the operator through the whole operating system. A chain may persist
that packet or request the complete fan-out, where some lanes are read-only,
some draft-only, some blocked until approval, and one proof lane states how
later execution should be verified.
How this maps to real runx work
- Docs and public proof route to a docs skill such as
sourcey or a
product-owned documentation lane.
- Release preparation routes to
release, with publish held behind a
release approval.
- Code work routes to
issue-to-pr or a project-owned implementation lane,
with merge held behind review.
- Outreach and customer communication route first to
send-as, then to a
provider adapter that implements the send lane. Branded provider skills are
the right place for vendor-specific compose, test, review, schedule, or send
details. Broad outbound marketing should be its own skill or product broadcast
skill, not extra logic hidden in this graph.
- Spend and payments route to quote or payout skills with caps, recipient,
rail, and settlement proof separated from the planning lane.
- Proof routes to receipt/history/audit skills and provider readbacks.
The fixture ops-lane step simply returns these packets without performing the
handoff. In a real project, replace each fixture lane with the named governed
skill runner or provider tool.
Procedure
- Receive one concise
signal and optional operator_context.
- Route the selected
lane, which defaults to classify.
- Mark the lane as read-only, draft-only, approval-required, or proof-only and
name its exact downstream owner.
- Return the typed lane packet and seal the graph receipt.
- If durable state is actually required, select
route_and_append, supply the
data source, aggregate, expected version, and idempotency key, then read back
the projection.
- If the complete planning artifact is actually required, select
main to
fan out docs, release, issue, outreach, spend, and proof packets.
Edge cases and stop conditions
- Missing signal: return
needs_input. There is no safe route.
- Vague objective: return a narrow classify packet and ask for the missing
product, audience, repo, release, amount, or provider context.
- Live send without principal, audience, consent, digest, and approval: stop
at the outreach lane and route to
send-as.
- Spend without amount, cap, recipient, rail, and approval: stop at the
spend lane and route to a quote or payment skill.
- Merge, publish, deploy, or destructive mutation without approval: stop at
the relevant lane and name the missing gate.
- Provider success without provider evidence: do not mark complete. Route to
proof audit.
- Secret or private data in the signal: refuse to echo it into outputs;
require redacted context or a provider-side readback instead.
Output schema
The default graph's public result is one lane_packet, ready for the named
downstream skill. The explicit main runner instead returns the complete
lane_packets artifact shown below. Runtime graph context retains producer
outputs for nested execution, while machine-readable CLI output omits exact
result-producer duplicates and child receipts bind the execution lineage.
lane_packets:
schema: runx.business_ops_route.v1
signal: string
lanes:
classify: lane_packet
docs: lane_packet
release: lane_packet
issue: lane_packet
send: lane_packet
spend: lane_packet
audit: lane_packet
Each lane_packet has this shape:
lane_packet:
schema: runx.business_ops_lane.v1
lane: string
signal: string
status: ready | awaiting_approval | needs_input | refused
decision: route | prepare | draft | quote | verify | stop
kind: router | docs | release | work | outreach | spend | proof
consequence: read_only | draft | live_mutation | public_send | money_movement | proof
summary: string
why: string
authority:
requested: [string]
provided: fixture_only
gate:
approval_required: boolean
approval_gate: string | null
stop_reason: string | null
handoff:
interface: skill | graph | cli | hosted_api | workflow | provider_tool
lane_ref: string
runner_ref: string | null
command_hint: string | null
evidence:
inputs_required: [string]
readbacks: [string]
receipt_refs: [string]
risks: [string]
next: [string]
Worked example
runx skill business-ops \
-i signal="launch readiness for API v2: docs, release, customer comms, and spend checks" \
--json
The default graph returns one classify lane packet with its authority class,
evidence requirements, and next governed handoff. It does not configure a data
store, run the other planning lanes, or call an external provider.
Inputs
signal (required): concise business operations signal to classify and route.
lane (optional, default classify): the one bounded lane to return.
operator_context (optional): product policy, project topology, audience
constraints, or known provider state. Context only, not authority.
route_and_append additionally requires data_source_ref, resource,
aggregate_id, expected_version, and idempotency_key; these identify
durable state and therefore are never guessed.
main accepts the signal and context only, and must be selected explicitly.
1---2name: business-ops3description: Route one business signal through a replayable governed ops graph: classify, docs, release, work, outreach, spend, and proof, with consequential actions stopping at the right gate.4---56# Business Ops78Turn one business signal into a replayable operations graph.910`business-ops` routes one signal into one selected bounded lane without giving11the agent ambient authority. The default `route` runner returns that typed12lane immediately; it does not require event-store configuration or run13unrelated docs, release, work, outreach, spend, and audit branches. Select14`route_and_append` only when a chain needs a durable event plus projection15readback, and select `main` only when the full planning fan-out is the16requested artifact.1718This is not a provider integration and not an operator dashboard. It is the19small core shape that teams copy when they want one objective to fan out into a20chain of skills, then replay that chain with receipts.2122The explicit `route_and_append` runner takes the same selected lane, appends23its packet through `data-store`, reads back the projection, and returns one24`route_persistence` result that distinguishes a new commit from an idempotent25replay while preserving the selected `lane_packet`. The same graph26can use local JSON, SQLite, Postgres, D1, Redis, or a product adapter by changing27the `data_source_ref` binding. Its aggregate id, expected version, and28idempotency key stay explicit because guessing them would corrupt durable29workflow state.3031## Composes3233<!-- Generated from the native execution closure; run pnpm core-skills:composes:generate. -->3435- `data-store#append_event`36- `data-store#read_projection`3738## What this skill does3940- Routes one business signal into one selected typed lane by default.41- Can explicitly fan the signal through representative lanes: docs, release,42 issue/PR, outreach planning, spend quoting, and proof audit.43- Produces structured lane packets with authority, gate, handoff, evidence, and44 readback fields.45- Demonstrates the runx split between proposal work and consequential action:46 drafts and plans can be produced, but sends, spend, merges, publishes, and47 deploys require a separate approval and execution lane.48- Gives downstream agents a clear handoff target instead of vague prose.49- Optionally persists the classified route for replay through `data-store`.5051## What this skill deliberately does not do5253- It does not call private providers, mutate a repo, post to GitHub, send email,54 schedule campaigns, move money, publish releases, or deploy services.55- It does not duplicate `ops-desk`, product operator skills, `send-as`,56 vendor-specific provider skills, `release`, `issue-to-pr`, `spend`, or57 receipt-audit skills.58- It does not turn "outbound marketing" into a hidden side effect. Outreach is59 a plan lane here; real delivery routes to `send-as` and then a provider60 adapter. Branded provider skills are concrete adapters, not branches in this61 core graph.62- It does not treat the graph receipt as proof that an external provider action63 happened. Provider actions need provider evidence and their own receipt.6465## When to use this skill6667- To show how runx chains skills into replayable business operations.68- To prototype a team-specific ops graph before wiring private provider tools.69- To route a product signal without giving the agent blanket repo, email,70 wallet, or deployment access.71- To explain why a governed workflow is more useful than a one-shot prompt:72 the route, stops, handoffs, and readbacks are explicit and replayable.73- To smoke-test graph execution and child receipts with no external account.7475## When not to use this skill7677- To run a production launch, incident, release, campaign, support reply,78 payout, or spend flow as-is. Replace fixture lanes with real skills first.79- To approve a live send, spend, merge, publish, deploy, or customer-visible80 action.81- To hide project policy, customer lists, credentials, wallet keys, provider82 dumps, or private review context in the signal.83- To claim external work completed when only this fixture graph ran.8485## Mental model8687```text88standalone: signal -> one typed lane -> downstream handoff89durable: signal -> one typed lane -> append -> projection readback90fanout: signal -> all planning lanes -> approval stops -> governed handoffs -> proof91```9293The useful part is the reusable route. A direct call returns one packet instead94of forcing the operator through the whole operating system. A chain may persist95that packet or request the complete fan-out, where some lanes are read-only,96some draft-only, some blocked until approval, and one proof lane states how97later execution should be verified.9899## How this maps to real runx work100101- **Docs and public proof** route to a docs skill such as `sourcey` or a102 product-owned documentation lane.103- **Release preparation** routes to `release`, with publish held behind a104 release approval.105- **Code work** routes to `issue-to-pr` or a project-owned implementation lane,106 with merge held behind review.107- **Outreach and customer communication** route first to `send-as`, then to a108 provider adapter that implements the send lane. Branded provider skills are109 the right place for vendor-specific compose, test, review, schedule, or send110 details. Broad outbound marketing should be its own skill or product broadcast111 skill, not extra logic hidden in this graph.112- **Spend and payments** route to quote or payout skills with caps, recipient,113 rail, and settlement proof separated from the planning lane.114- **Proof** routes to receipt/history/audit skills and provider readbacks.115116The fixture `ops-lane` step simply returns these packets without performing the117handoff. In a real project, replace each fixture lane with the named governed118skill runner or provider tool.119120## Procedure1211221. Receive one concise `signal` and optional `operator_context`.1232. Route the selected `lane`, which defaults to `classify`.1243. Mark the lane as read-only, draft-only, approval-required, or proof-only and125 name its exact downstream owner.1264. Return the typed lane packet and seal the graph receipt.1275. If durable state is actually required, select `route_and_append`, supply the128 data source, aggregate, expected version, and idempotency key, then read back129 the projection.1306. If the complete planning artifact is actually required, select `main` to131 fan out docs, release, issue, outreach, spend, and proof packets.132133## Edge cases and stop conditions134135- **Missing signal:** return `needs_input`. There is no safe route.136- **Vague objective:** return a narrow classify packet and ask for the missing137 product, audience, repo, release, amount, or provider context.138- **Live send without principal, audience, consent, digest, and approval:** stop139 at the outreach lane and route to `send-as`.140- **Spend without amount, cap, recipient, rail, and approval:** stop at the141 spend lane and route to a quote or payment skill.142- **Merge, publish, deploy, or destructive mutation without approval:** stop at143 the relevant lane and name the missing gate.144- **Provider success without provider evidence:** do not mark complete. Route to145 proof audit.146- **Secret or private data in the signal:** refuse to echo it into outputs;147 require redacted context or a provider-side readback instead.148149## Output schema150151The default graph's public result is one `lane_packet`, ready for the named152downstream skill. The explicit `main` runner instead returns the complete153`lane_packets` artifact shown below. Runtime graph context retains producer154outputs for nested execution, while machine-readable CLI output omits exact155result-producer duplicates and child receipts bind the execution lineage.156157```yaml158lane_packets:159 schema: runx.business_ops_route.v1160 signal: string161 lanes:162 classify: lane_packet163 docs: lane_packet164 release: lane_packet165 issue: lane_packet166 send: lane_packet167 spend: lane_packet168 audit: lane_packet169```170171Each `lane_packet` has this shape:172173```yaml174lane_packet:175 schema: runx.business_ops_lane.v1176 lane: string177 signal: string178 status: ready | awaiting_approval | needs_input | refused179 decision: route | prepare | draft | quote | verify | stop180 kind: router | docs | release | work | outreach | spend | proof181 consequence: read_only | draft | live_mutation | public_send | money_movement | proof182 summary: string183 why: string184 authority:185 requested: [string]186 provided: fixture_only187 gate:188 approval_required: boolean189 approval_gate: string | null190 stop_reason: string | null191 handoff:192 interface: skill | graph | cli | hosted_api | workflow | provider_tool193 lane_ref: string194 runner_ref: string | null195 command_hint: string | null196 evidence:197 inputs_required: [string]198 readbacks: [string]199 receipt_refs: [string]200 risks: [string]201 next: [string]202```203204## Worked example205206```bash207runx skill business-ops \208 -i signal="launch readiness for API v2: docs, release, customer comms, and spend checks" \209 --json210```211212The default graph returns one classify lane packet with its authority class,213evidence requirements, and next governed handoff. It does not configure a data214store, run the other planning lanes, or call an external provider.215216## Inputs217218- `signal` (required): concise business operations signal to classify and route.219- `lane` (optional, default `classify`): the one bounded lane to return.220- `operator_context` (optional): product policy, project topology, audience221 constraints, or known provider state. Context only, not authority.222- `route_and_append` additionally requires `data_source_ref`, `resource`,223 `aggregate_id`, `expected_version`, and `idempotency_key`; these identify224 durable state and therefore are never guessed.225- `main` accepts the signal and context only, and must be selected explicitly.