Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Wire a Genie agent to an Omni channel in one canonical flow — register the host, bind the instance, route chats to a repo, verify the round-trip.
.claude/skills/automagik-dev-omni/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 29% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 76% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 71% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -4% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 52% | 0% |
Runtime syntax: invoke the plugin copy through the active runtime's owner-qualified skill selector; use a bare selector only when intentionally selecting a user-tier copy (a separately installed personal copy; Genie no longer seeds this tier). Cross-skill prose below uses bare names as portable semantic routes; the orchestrator resolves the selector for the active runtime.
Take an operator from "channel connected in Omni" to "messages in that channel reach a Genie agent and get replies". This skill owns the wiring flow. If separate Omni setup, messaging, or administration skills are installed, invoke them through the active runtime's skill surface; otherwise use current omni --help output and stop when a required capability is unavailable.
Genie is zero-daemon; the one optional foreground process is genie omni serve — a NATS bridge that (a) sends tool-approval requests to a phone chat and resolves replies/reactions, and (b) routes inbound messages from mapped chats into one-shot agent runs in a target repo. Wiring is four short phases; every phase is idempotent, so re-running the flow is safe.
bashomni auth status # Omni CLI authenticated? If not, report the missing setup capability omni instances list # need at least one connected instance genie omni status # genie-side config sanity + queue counts (no network)
bashgenie omni handshake # idempotent; --rotate reissues, --hostname overrides
Registers this machine with the Omni server via an ed25519 keypair stored under $GENIE_HOME/keys/ (default ~/.genie/keys/; the command refuses to write keys inside any git working tree). Requires OMNI_API_URL + OMNI_API_KEY (or omni.apiUrl / omni.apiKey in ~/.genie/config.json).
bashomni connect <instance-id> <agent-name> # idempotent
Creates or reuses a nats-genie provider and agent record on the Omni side and points the instance at them. Options: --mode turn-based (default, chat round-trips) or --mode fire-and-forget; --reply-filter all|filtered. Pick the instance id from omni instances list; if none is connected yet, pause and request the separate instance-setup action.
Configuration lives in the omni section of ~/.genie/config.json; env vars override:
| Key | Env override | Meaning | |-----|--------------|---------| | omni.apiUrl / omni.apiKey | OMNI_API_URL / OMNI_API_KEY | Omni server + credentials | | omni.natsUrl | OMNI_NATS_URL | NATS server (default localhost:4222) | | omni.instance | OMNI_INSTANCE | Instance carrying approval traffic | | omni.approvalChat | OMNI_APPROVAL_CHAT | Chat that receives approval requests | | omni.approvals.enabled | OMNI_APPROVALS_ENABLED=1 | Feature gate (also needs instance + approvalChat) | | omni.routes[] | — | Inbound one-shot routes: {instance, chat, repo, agent, persona?} where agent is claude or codex |
A route maps an (instance, chat) pair to an absolute repo path and an explicit provider. Do not omit agent: the compatibility default is claude, which can silently route a message to the wrong client when the operator intended Codex. The run's persona defaults to <repo>/AGENTS.md when persona is omitted. Unrouted chats are store-only — they land in the inbox with no agent run.
json{ "omni": { "routes": [ { "instance": "<instance-id>", "chat": "<chat-id>", "repo": "/absolute/path/to/repo", "agent": "codex" } ] } }
bashgenie omni serve # foreground resident runner — its own pane/service genie omni status --json # approvals queue counts + config sanity genie omni test-approval # one approval round-trip, fake transport genie omni test-approval --live # ONE real approval to the configured chat (deliberate) genie omni inbox --unhandled # inbound messages awaiting handling
Finish with a real round-trip: the operator sends a message in the wired chat and confirms the selected provider's reply arrives. Report the verified topology — instance id, chat, repo, agent, persisted provider/thread key, and persona source — with the evidence for each, not intentions.
omni connect instead — it reuses whatever already exists.$GENIE_HOME/keys/ and omni.apiKey never appear in output, commits, or messages.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 12,456 | 3,824 | -69% | 1 | 1 | 0% | 2,346 | 1,834 | -22% | 0 | 0 | — |
case-02 | fail→fail | 11,544 | 7,366 | -36% | 1 | 1 | 0% | 1,817 | 1,806 | -1% | 0 | 0 | — |
case-03 | fail→fail | 16,049 | 8,504 | -47% | 1 | 1 | 0% | 1,884 | 1,862 | -1% | 0 | 0 | — |
case-04 | pass→pass | 9,278 | 5,065 | -45% | 1 | 1 | 0% | 885 | 1,917 | +117% | 0 | 0 | — |
case-05 | fail→pass | 11,689 | 16,286 | +39% | 1 | 1 | 0% | 1,959 | 2,531 | +29% | 0 | 0 | — |
case-06 | pass→pass | 4,825 | 4,500 | -7% | 1 | 1 | 0% | 609 | 1,978 | +225% | 0 | 0 | — |
case-07 | fail→pass | 7,070 | 3,523 | -50% | 1 | 1 | 0% | 1,113 | 1,960 | +76% | 0 | 0 | — |
case-08 | fail→pass | 6,451 | 2,844 | -56% | 1 | 1 | 0% | 1,046 | 1,792 | +71% | 0 | 0 | — |
case-09 | pass→pass | 10,618 | 14,718 | +39% | 1 | 1 | 0% | 934 | 2,028 | +117% | 0 | 0 | — |
case-10 | fail→pass | 14,237 | 5,362 | -62% | 1 | 1 | 0% | 2,300 | 2,208 | -4% | 0 | 0 | — |
case-11 | fail→pass | 8,185 | 4,478 | -45% | 1 | 1 | 0% | 1,363 | 2,075 | +52% | 0 | 0 | — |
case-12 | fail→pass | 11,604 | 1,781 | -85% | 1 | 1 | 0% | 1,499 | 1,569 | +5% | 0 | 0 | — |
case-13 | fail→pass | 2,374 | 5,962 | +151% | 1 | 1 | 0% | 306 | 1,696 | +454% | 0 | 0 | — |
case-14 | fail→pass | 6,133 | 1,923 | -69% | 1 | 1 | 0% | 1,044 | 1,593 | +53% | 0 | 0 | — |
case-15 | fail→pass | 10,351 | 2,646 | -74% | 1 | 1 | 0% | 1,699 | 1,712 | +1% | 0 | 0 | — |
case-16 | fail→fail | 6,876 | 1,266 | -82% | 1 | 1 | 0% | 1,074 | 1,496 | +39% | 0 | 0 | — |
case-17 | fail→pass | 16,288 | 1,548 | -90% | 1 | 1 | 0% | 2,406 | 1,523 | -37% | 0 | 0 | — |
case-18 | pass→pass | 3,336 | 2,315 | -31% | 1 | 1 | 0% | 534 | 1,689 | +216% | 0 | 0 | — |
case-19 | fail→pass | 12,079 | 3,500 | -71% | 1 | 1 | 0% | 1,981 | 1,861 | -6% | 0 | 0 | — |
case-20 | fail→pass | 24,521 | 4,644 | -81% | 1 | 1 | 0% | 2,000 | 2,082 | +4% | 0 | 0 | — |
case-21 | fail→pass | 10,697 | 1,936 | -82% | 1 | 1 | 0% | 1,642 | 1,593 | -3% | 0 | 0 | — |
case-22 | fail→pass | 19,716 | 2,767 | -86% | 1 | 1 | 0% | 2,224 | 1,768 | -21% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +64 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.