Skip to main content

Commands

The shape of the line, with selectors that mix freely and a plan that always runs in the same order.

Before any single command, two things hold across all of them. This page is what comes before the four pages beside it, which come out of the command surface contract rather than out of this prose.

Selectors compose

--ai-framework, --bundle, --skill and --mcp are selectors, flags that name what a line is about. Every one of them accepts a comma-separated value, a repeated flag, or both, and they accumulate rather than override.

overpower install --skill one-skill --skill another-skill --bundle api-python,another-bundle

Mixing selectors of different kinds on a single install line is the normal case, not an edge case. --ai-framework matt-pocock --skill some-other-skill --mcp cloudflare --runtime claude-code is one ordinary invocation, not three commands stitched together.

The --runtime on that line is not decoration. A skill and an MCP server together require the runtime named, and the refusal lands before any lookup in the catalog or on disk:

a skill and an MCP server on one line need --runtime named explicitly,
or two separate commands, one per class

The reason is that the two classes write into different tables, and not every runtime is in both. Without the runtime on the line, the wizard would have to open two steps of different shapes at once, and it is one gesture. Exit 2.

list is the one place this does not hold. It answers about a single item, so more than one selector on a list line is a question with two answers, and the command refuses rather than silently picking one.

The plan runs in one fixed order

When a line resolves to writes across more than one unit, a framework and an individual skill on the same install, say, the writes always happen in the same order. It is not the order you typed the flags in.

OrderUnitWhy here
1AI Frameworkthe broadest unit, and the least specific
2Bundlemore specific than a framework, less than an artifact
3Individual artifactyou named it directly, so it wins
4MCP servernot a copy but a graft, and it lands in a file of yours

The order matters most where two selections would land on the same destination. Rather than raising an error for that overlap, the fixed order decides it: the most specific unit is written last, so its content is what survives on disk.

overpower install --ai-framework matt-pocock --skill panlabs-python-standards --runtime claude-code

The wizard opens the gap, not the screen

In a terminal, an install line that does not add up to a plan opens the wizard instead of refusing. The trigger is the gap, not the empty line: it is enough to be missing what to install, or missing the runtime.

It opens only the steps your line left open, always in this order:

  1. Artifacts

    What to install. Opens only when the line named no artifact, framework, bundle or MCP server.

  2. Scope

    Project or machine. Opens only when the line carried neither --runtime nor --global, because scope is what decides the set the next step offers.

  3. Runtimes

    Who receives it. Pre-ticked with whatever the tool found on disk.

  4. Confirmation

    The whole plan, before the first byte.

What it collects becomes exactly the request the hand-typed line would have built. --dry-run, --force and --yes are not steps and travel through the session untouched.

Backing out of any step abandons everything, and does not resume at the previous step. Nothing is written, and the exit is 1. It is the same all-or-nothing shape the final confirmation has.

Off a terminal the wizard never opens: the same incomplete line falls into the same two errors it always did and exits 2. That is what makes a partial invocation in a pipe fail early instead of hanging for an answer.

The four pages beside this one

overpower, list, install and doctor are generated from the command surface contract, and none of them is written by hand. What you read on them is the projection of the contract: the options, the exit codes and the panel's usage line all come out of the same JSON, which is why they cannot drift from the table above without the drift showing up in the diff of whoever touched the contract.

This page is the exception in the section, and it is the exception on purpose: it is the only authored leaf here, and the right-hand panel does not exist on it. Its four siblings paint the panel from api_exemplos; this one goes through the leg of the switch that merely delegates, and the contrast between the two sits in the same section, one click apart.