oo
Use oo as a hosted capability router. Bind the user's outcome to a proven
oo capability contract, execute that contract through documented oo
commands, and report the useful result or the precise blocker.
If the user wants to find, compare, or install published OOMOL/oo skills, use
oo-find-skills instead of this skill.
Read only the reference file needed for the current state.
OOMOL ops use provider oomol_console with the current credential and team
context.
OOMOL Connection permission mode
When a request concerns a member, user, or collaborator's ability to use a
Connection in the current OOMOL context, including viewing or listing
permissions, allow, deny, read-only, action allowlists, or access to a named
provider, use oomol_console before routing to the provider. The user does not
need to say "team" for this mode to apply.
This controls which Connector actions a member may run through OOMOL. It does
not change the provider's native account, mailbox, or resource delegation.
For least-privilege access, list the team Connections, inspect the selected
Connection's permission groups, then create or update a custom group with only
schema-reported read actions. Use exact member IDs, preserve unrelated group
assignments, and do not change the default group unless the user requested a
change for every member.
Open Flow mode
If the user wants to create, inspect, edit, check, run, publish, or open a
persistent Open Flow workflow, read
references/flow-authoring.md before the first
oo flow command. This mode replaces the connector operating state machine
below: use Flow-scoped Connector and Trigger discovery, not oo search or
direct Connector execution. Do not run the wrap-up skill recommendation for
services that were only added to a Flow.
If the user supplies, links, or points to n8n workflow or template JSON and
asks to migrate, rewrite, import, reproduce, or assess it for Open Flow, also
read
references/flow-n8n-conversion.md before
analyzing the workflow or issuing the first oo flow command.
LLM client config mode
If local code you are writing or running needs an OpenAI-compatible base URL,
API key, or model name for OOMOL's LLM API, read
references/llm-client.md. Do not run capability
discovery for that case, and do not read local auth files directly.
Runtime note
- The substantive
oo commands used by this skill rely on outbound network
access.
- If one of those commands fails because the environment cannot establish
outbound network connections in a sandboxed environment, request elevated
permissions and retry the same
oo command before changing strategy.
Exception: a failure saying the CLI could not reach the self-hosted
connector at its URL means the self-hosted server is down, so report that
and stop instead of requesting elevated permissions or retrying.
Shell command safety
- When generating shell commands for macOS or zsh, quote arguments that contain
shell pattern characters such as
?, *, [, ], (, ), or !.
- Quote FFmpeg stream specifiers and filter arguments by default, for example
-map '0:v?' -map '0:a?'.
- Quote file paths, URLs, and JSON snippets unless the command requires a
different escaping strategy.
Constitution
These rules override every local heuristic.
- Optimize for fast accuracy. Take the shortest path that can prove a safe,
callable contract. Once evidence is sufficient to choose and execute, do not
broaden discovery, inspect extra candidates, hydrate extra data, or ask
non-blocking questions.
- Outcome first. Route from the user's desired result, not from guessed
implementation steps. Preserve decisive constraints such as target service,
language pair, file type, output format, destination, time range, recipients,
and externally visible side effects.
- Capability contract before execution. Do not execute from a search result
alone. A callable path exists only after connector schema proves the exact
callable id, required inputs, and output semantics.
- Evidence over invention. Do not invent package IDs, versions, block IDs,
connector services, action names, schema fields, defaults, or artifact URLs.
Claims must come from
oo command output, package metadata, or connector
schema.
- Smallest sufficient payload. Build the smallest payload that fully expresses
the user's real intent. "Smallest" means no invented fields or irrelevant
options; it does not mean dropping user constraints.
- Current-step discovery. For multi-step workflows, discover only the current
unresolved external step. Between
oo steps, local work is limited to
filtering, grouping, ranking, deduplicating, summarizing, or shaping the next
payload.
- Explicit artifact rule. Upload only for URI-compatible inputs. Local
file://... URIs are not cloud-accessible artifacts; for local files, run
oo file upload "<filePath>" --json and pass the returned downloadUrl
instead. Download only explicit artifact URLs documented by the selected
path. Browse links, edit links, folder links, console URLs, and metadata are
not downloadable artifacts.
- External effects need enough confidence. For non-destructive send, post,
create, or invite actions, an explicit user instruction plus complete
required payload values is enough to proceed. Ask one focused question before
destructive actions, broad sharing, or ambiguous recipient, content,
destination, or timing choices.
- Stop at real blockers. Stop and report clearly on auth, billing, catalog
miss, unsupported input shape, missing required values, terminal task
failure, or an unsafe side effect. Connector authorization blockers are
terminal for the current turn: when evidence shows the selected connector is
not connected, not authorized, missing scopes, expired, or otherwise blocked
by connector authentication, return only a short blocker summary, the direct
connection or re-authorization URL, and one concise next step. Do not inspect
more schemas, enumerate actions, browse provider docs, provide usage
examples, or run more connector commands until the user confirms the service
is connected, unless the user explicitly asks for offline docs or setup
details. If a shortlisted fallback directly avoids a non-auth blocker without
changing the user's intent, try that fallback once. Otherwise do not retry
blindly, and do not replace a remote
oo capability with local code or
direct third-party APIs.
- Reference reads are non-negotiable. Before invoking the first command in
an
oo command domain during a turn, read the corresponding file under
references/ unless it was already read in this turn. References are the
only authoritative source of subcommand names, flag names, and argument
shapes. Do not infer command shapes from prior CLI knowledge. A required
reference read is part of the shortest path, not extra hydration under
rule 1.
Operating state machine
Move through these states. Skip a state only when current evidence already
proves its output.
- Intake
Decide whether
oo is the right router. Extract the outcome, hard
constraints, side effects, and any supplied files or remote URLs. Do not run
which, command -v, oo --version, oo --help, or routine auth
prechecks; let the first substantive oo command surface availability or
account problems.
- Search goal
For a single-step task, write one concise English goal sentence that names
the target service when known and keeps product, brand, and proper names
untranslated. For a short multi-step task, write 2 to 4 ordered subgoals and
activate only the current unresolved external step.
- Discover
Read references/search-and-selection.md
before the first search. Run
oo search "<goal>" --json unless a complete
capability contract is already known from current evidence.
A complete contract means connector schema already proves the callable id,
required inputs, and output semantics; a user-named service is not enough.
Record the service of each connector capability you actually use, building
one deduplicated wrap-up list of connector services for this session. You do
not need oo skills search for this; the wrap-up command derives and
verifies the matching oo-<service> skill packages. Do not install or ask
about installation before the selected connector capability succeeds.
- Select
Inspect the first result set before refining. Keep one primary candidate and
at most one materially different fallback. Prefer directness, named target
service or output, authenticated connector readiness, low required-input
burden, and output fit.
Use the fallback only when the primary path hits a named blocker the fallback
avoids without changing the user's intent.
- Inspect contract
Read references/connector-execution.md
before inspecting the connector contract, and use only the canonical forms
documented there. File-like inputs or artifact downloads may require
references/file-transfer.md.
- Build payload
Use only fields exposed by the selected contract. Prefer user-provided values
over defaults, samples, and placeholders. Ask one focused follow-up only when
a required value is missing, risky to infer, destructive, broadly shared, or
externally visible but ambiguous.
- Execute
Execute the selected connector path through
oo, using only the canonical
shape documented in the reference read at step 5.
- Materialize
Save outputs locally only when doing so helps the user and the selected path
exposes an explicit artifact URL.
- Report
Lead with the useful result. For blockers, name the exact blocker and the
next useful move. If you group or summarize by an attribute, make sure the
payload or result actually used that attribute.
After the final useful result, run the wrap-up skill recommendation. Pass the
deduplicated wrap-up list of connector services to
oo skills recommend plan <connectorService>... --json. That single command
derives each oo-<service> package, confirms it is published, and skips
packages that are already installed and current, not published, dismissed,
globally muted, or already suggested earlier this session. The CLI
de-duplicates within a session, so re-running the wrap-up will not re-surface
an already-shown suggestion: present only what is under recommendations, and
never re-present a suggestion absent from it. Persist any "never remind" choice
exactly as
references/search-and-selection.md
describes. If the plan reports muted or returns no recommendations, say
nothing about skills and finish. Omit the optional suggestion when the user
explicitly asked for concise output.
Capability contract
Before execution, hold the minimum viable contract in working memory.
Connector contract:
callable: exact service plus action from schema
inputs: schema-declared required values and payload
effects: read-only, create/send/post/invite, destructive, or broad sharing
outputs: structured data, metadata, explicit download URL, or none
If the minimum contract is complete and no unsafe effect is ambiguous, execute.
Inspect further only for missing required fields, unclear output semantics,
unsupported input shape, or a blocker-specific fallback.
Reference routing
- Search and choose an executable connector candidate:
references/search-and-selection.md
- Connector schema, payload, run, storage-style actions, and re-authorization:
references/connector-execution.md
- Local files, URI-compatible inputs, and explicit artifact downloads:
references/file-transfer.md
- Auth and billing blockers:
references/auth-and-billing.md
- OOMOL LLM client configuration for local code:
references/llm-client.md
- Persistent Open Flow creation, editing, validation, execution, and release:
references/flow-authoring.md
- n8n workflow JSON analysis and behavioral conversion to Open Flow:
references/flow-n8n-conversion.md
Decision sketches
Managed AI pipeline
User wants a managed transform such as OCR, translation, transcription, image
generation, or document conversion. Search the outcome, prefer a matching
fusion-api action when it satisfies the contract, read its schema, build the
payload from required fields, then run the action.
Single connector
User wants an action in a connected account such as Gmail, Drive, Calendar,
Slack, Notion, or GitHub. Search the outcome with the target service, read the
chosen connector schema, build the payload from required fields, confirm if the
effect is externally visible, then run the action.
Short orchestration
For read -> transform -> write, discover only the current external step. Use
local reasoning only to filter, group, rank, summarize, dedupe, or shape the
next payload. Switch discovery to the destination service only when the write
step becomes active.
Persistent Open Flow
User wants a reusable workflow rather than an immediate Connector result. Use
the Open Flow mode, resolve the Project explicitly, discover Node and Trigger
contracts through oo flow, author the smallest complete Draft, then stop at
check, run, or publish according to the requested side-effect boundary.
1---2name: oo3description: oo4---56# oo78Use `oo` as a hosted capability router. Bind the user's outcome to a proven9`oo` capability contract, execute that contract through documented `oo`10commands, and report the useful result or the precise blocker.1112If the user wants to find, compare, or install published OOMOL/oo skills, use13`oo-find-skills` instead of this skill.1415Read only the reference file needed for the current state.1617OOMOL ops use provider `oomol_console` with the current credential and team18context.1920## OOMOL Connection permission mode2122When a request concerns a member, user, or collaborator's ability to use a23Connection in the current OOMOL context, including viewing or listing24permissions, allow, deny, read-only, action allowlists, or access to a named25provider, use `oomol_console` before routing to the provider. The user does not26need to say "team" for this mode to apply.2728This controls which Connector actions a member may run through OOMOL. It does29not change the provider's native account, mailbox, or resource delegation.3031For least-privilege access, list the team Connections, inspect the selected32Connection's permission groups, then create or update a custom group with only33schema-reported read actions. Use exact member IDs, preserve unrelated group34assignments, and do not change the default group unless the user requested a35change for every member.3637## Open Flow mode3839If the user wants to create, inspect, edit, check, run, publish, or open a40persistent Open Flow workflow, read41[references/flow-authoring.md](references/flow-authoring.md) before the first42`oo flow` command. This mode replaces the connector operating state machine43below: use Flow-scoped Connector and Trigger discovery, not `oo search` or44direct Connector execution. Do not run the wrap-up skill recommendation for45services that were only added to a Flow.4647If the user supplies, links, or points to n8n workflow or template JSON and48asks to migrate, rewrite, import, reproduce, or assess it for Open Flow, also49read50[references/flow-n8n-conversion.md](references/flow-n8n-conversion.md) before51analyzing the workflow or issuing the first `oo flow` command.5253## LLM client config mode5455If local code you are writing or running needs an OpenAI-compatible base URL,56API key, or model name for OOMOL's LLM API, read57[references/llm-client.md](references/llm-client.md). Do not run capability58discovery for that case, and do not read local auth files directly.5960## Runtime note6162- The substantive `oo` commands used by this skill rely on outbound network63 access.64- If one of those commands fails because the environment cannot establish65 outbound network connections in a sandboxed environment, request elevated66 permissions and retry the same `oo` command before changing strategy.67 Exception: a failure saying the CLI could not reach the self-hosted68 connector at its URL means the self-hosted server is down, so report that69 and stop instead of requesting elevated permissions or retrying.7071## Shell command safety7273- When generating shell commands for macOS or zsh, quote arguments that contain74 shell pattern characters such as `?`, `*`, `[`, `]`, `(`, `)`, or `!`.75- Quote FFmpeg stream specifiers and filter arguments by default, for example76 `-map '0:v?' -map '0:a?'`.77- Quote file paths, URLs, and JSON snippets unless the command requires a78 different escaping strategy.7980## Constitution8182These rules override every local heuristic.83841. Optimize for fast accuracy. Take the shortest path that can prove a safe,85 callable contract. Once evidence is sufficient to choose and execute, do not86 broaden discovery, inspect extra candidates, hydrate extra data, or ask87 non-blocking questions.882. Outcome first. Route from the user's desired result, not from guessed89 implementation steps. Preserve decisive constraints such as target service,90 language pair, file type, output format, destination, time range, recipients,91 and externally visible side effects.923. Capability contract before execution. Do not execute from a search result93 alone. A callable path exists only after connector schema proves the exact94 callable id, required inputs, and output semantics.954. Evidence over invention. Do not invent package IDs, versions, block IDs,96 connector services, action names, schema fields, defaults, or artifact URLs.97 Claims must come from `oo` command output, package metadata, or connector98 schema.995. Smallest sufficient payload. Build the smallest payload that fully expresses100 the user's real intent. "Smallest" means no invented fields or irrelevant101 options; it does not mean dropping user constraints.1026. Current-step discovery. For multi-step workflows, discover only the current103 unresolved external step. Between `oo` steps, local work is limited to104 filtering, grouping, ranking, deduplicating, summarizing, or shaping the next105 payload.1067. Explicit artifact rule. Upload only for URI-compatible inputs. Local107 `file://...` URIs are not cloud-accessible artifacts; for local files, run108 `oo file upload "<filePath>" --json` and pass the returned `downloadUrl`109 instead. Download only explicit artifact URLs documented by the selected110 path. Browse links, edit links, folder links, console URLs, and metadata are111 not downloadable artifacts.1128. External effects need enough confidence. For non-destructive send, post,113 create, or invite actions, an explicit user instruction plus complete114 required payload values is enough to proceed. Ask one focused question before115 destructive actions, broad sharing, or ambiguous recipient, content,116 destination, or timing choices.1179. Stop at real blockers. Stop and report clearly on auth, billing, catalog118 miss, unsupported input shape, missing required values, terminal task119 failure, or an unsafe side effect. Connector authorization blockers are120 terminal for the current turn: when evidence shows the selected connector is121 not connected, not authorized, missing scopes, expired, or otherwise blocked122 by connector authentication, return only a short blocker summary, the direct123 connection or re-authorization URL, and one concise next step. Do not inspect124 more schemas, enumerate actions, browse provider docs, provide usage125 examples, or run more connector commands until the user confirms the service126 is connected, unless the user explicitly asks for offline docs or setup127 details. If a shortlisted fallback directly avoids a non-auth blocker without128 changing the user's intent, try that fallback once. Otherwise do not retry129 blindly, and do not replace a remote `oo` capability with local code or130 direct third-party APIs.13110. Reference reads are non-negotiable. Before invoking the first command in132 an `oo` command domain during a turn, read the corresponding file under133 `references/` unless it was already read in this turn. References are the134 only authoritative source of subcommand names, flag names, and argument135 shapes. Do not infer command shapes from prior CLI knowledge. A required136 reference read is part of the shortest path, not extra hydration under137 rule 1.138139## Operating state machine140141Move through these states. Skip a state only when current evidence already142proves its output.1431441. Intake145 Decide whether `oo` is the right router. Extract the outcome, hard146 constraints, side effects, and any supplied files or remote URLs. Do not run147 `which`, `command -v`, `oo --version`, `oo --help`, or routine auth148 prechecks; let the first substantive `oo` command surface availability or149 account problems.1502. Search goal151 For a single-step task, write one concise English goal sentence that names152 the target service when known and keeps product, brand, and proper names153 untranslated. For a short multi-step task, write 2 to 4 ordered subgoals and154 activate only the current unresolved external step.1553. Discover156 Read [references/search-and-selection.md](references/search-and-selection.md)157 before the first search. Run `oo search "<goal>" --json` unless a complete158 capability contract is already known from current evidence.159 A complete contract means connector schema already proves the callable id,160 required inputs, and output semantics; a user-named service is not enough.161 Record the `service` of each connector capability you actually use, building162 one deduplicated wrap-up list of connector services for this session. You do163 not need `oo skills search` for this; the wrap-up command derives and164 verifies the matching `oo-<service>` skill packages. Do not install or ask165 about installation before the selected connector capability succeeds.1664. Select167 Inspect the first result set before refining. Keep one primary candidate and168 at most one materially different fallback. Prefer directness, named target169 service or output, authenticated connector readiness, low required-input170 burden, and output fit.171 Use the fallback only when the primary path hits a named blocker the fallback172 avoids without changing the user's intent.1735. Inspect contract174 Read [references/connector-execution.md](references/connector-execution.md)175 before inspecting the connector contract, and use only the canonical forms176 documented there. File-like inputs or artifact downloads may require177 [references/file-transfer.md](references/file-transfer.md).1786. Build payload179 Use only fields exposed by the selected contract. Prefer user-provided values180 over defaults, samples, and placeholders. Ask one focused follow-up only when181 a required value is missing, risky to infer, destructive, broadly shared, or182 externally visible but ambiguous.1837. Execute184 Execute the selected connector path through `oo`, using only the canonical185 shape documented in the reference read at step 5.1868. Materialize187 Save outputs locally only when doing so helps the user and the selected path188 exposes an explicit artifact URL.1899. Report190 Lead with the useful result. For blockers, name the exact blocker and the191 next useful move. If you group or summarize by an attribute, make sure the192 payload or result actually used that attribute.193 After the final useful result, run the wrap-up skill recommendation. Pass the194 deduplicated wrap-up list of connector services to195 `oo skills recommend plan <connectorService>... --json`. That single command196 derives each `oo-<service>` package, confirms it is published, and skips197 packages that are already installed and current, not published, dismissed,198 globally muted, or already suggested earlier this session. The CLI199 de-duplicates within a session, so re-running the wrap-up will not re-surface200 an already-shown suggestion: present only what is under `recommendations`, and201 never re-present a suggestion absent from it. Persist any "never remind" choice202 exactly as203 [references/search-and-selection.md](references/search-and-selection.md)204 describes. If the plan reports `muted` or returns no `recommendations`, say205 nothing about skills and finish. Omit the optional suggestion when the user206 explicitly asked for concise output.207208## Capability contract209210Before execution, hold the minimum viable contract in working memory.211212Connector contract:213214- `callable`: exact `service` plus `action` from schema215- `inputs`: schema-declared required values and payload216- `effects`: read-only, create/send/post/invite, destructive, or broad sharing217- `outputs`: structured data, metadata, explicit download URL, or none218219If the minimum contract is complete and no unsafe effect is ambiguous, execute.220Inspect further only for missing required fields, unclear output semantics,221unsupported input shape, or a blocker-specific fallback.222223## Reference routing224225- Search and choose an executable connector candidate:226 [references/search-and-selection.md](references/search-and-selection.md)227- Connector schema, payload, run, storage-style actions, and re-authorization:228 [references/connector-execution.md](references/connector-execution.md)229- Local files, URI-compatible inputs, and explicit artifact downloads:230 [references/file-transfer.md](references/file-transfer.md)231- Auth and billing blockers:232 [references/auth-and-billing.md](references/auth-and-billing.md)233- OOMOL LLM client configuration for local code:234 [references/llm-client.md](references/llm-client.md)235- Persistent Open Flow creation, editing, validation, execution, and release:236 [references/flow-authoring.md](references/flow-authoring.md)237- n8n workflow JSON analysis and behavioral conversion to Open Flow:238 [references/flow-n8n-conversion.md](references/flow-n8n-conversion.md)239240## Decision sketches241242### Managed AI pipeline243244User wants a managed transform such as OCR, translation, transcription, image245generation, or document conversion. Search the outcome, prefer a matching246`fusion-api` action when it satisfies the contract, read its schema, build the247payload from required fields, then run the action.248249### Single connector250251User wants an action in a connected account such as Gmail, Drive, Calendar,252Slack, Notion, or GitHub. Search the outcome with the target service, read the253chosen connector schema, build the payload from required fields, confirm if the254effect is externally visible, then run the action.255256### Short orchestration257258For `read -> transform -> write`, discover only the current external step. Use259local reasoning only to filter, group, rank, summarize, dedupe, or shape the260next payload. Switch discovery to the destination service only when the write261step becomes active.262263### Persistent Open Flow264265User wants a reusable workflow rather than an immediate Connector result. Use266the Open Flow mode, resolve the Project explicitly, discover Node and Trigger267contracts through `oo flow`, author the smallest complete Draft, then stop at268check, run, or publish according to the requested side-effect boundary.