From oracle-ai-data-platform-fusion-bundle
End-to-end conductor for the Fusion to AIDP to OAC dashboard journey. Takes one high-level goal ('I want a supplier-spend vs GL-balance dashboard from Fusion') and drives the whole chain: configure, connect OAC MCP, bootstrap, seed, advise dataset, author mart if needed, create OAC dataset, author workbook, and optionally enable end-user MCP chat by detecting current state and delegating each step to the right sibling skill/command. Auto-advances on clean steps; pauses for real decisions (destructive seed, variation freeze, OAC dataset creation, ambiguous intent, gaps). Use when the user states a dashboard/analytics goal and wants it driven start-to-finish, OR on first run after installing the plugin: 'I just installed this, what now', 'get me started', 'set me up', 'set up Fusion analytics from scratch / end to end', 'autopilot this', 'take me from nothing to a dashboard'. This is the front door for a fresh install (setup scaffolds the bundle). NOT for a single known step (call that skill directly).
How this skill is triggered — by the user, by Claude, or both
Slash command
/oracle-ai-data-platform-fusion-bundle:aidp-fusion-autopilotThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Turns *"I want a CFO dashboard of supplier spend vs GL balance, by currency"*
Turns "I want a CFO dashboard of supplier spend vs GL balance, by currency" into a finished workbook by conducting the existing skill family — it does not re-implement any step. Its only jobs are: detect where the user already is, drive the next incomplete step via the right skill, and stop at the decisions a human must make.
This is the single entry point so the user never has to know which of the seven skills to invoke, or in what order.
/aidp-fusion-seed,
/oac-dataset-advisor, /mart-author, /workbook-authoring, …). Autopilot
is overhead when the user already knows the one thing they want.| # | Step | Done when (detect) | Drive with | PAUSE before if |
|---|---|---|---|---|
| 1 | Config | bundle.yaml + aidp.config.yaml exist; coords non-placeholder | aidp-fusion-bundle init (scaffold if absent — fresh install) → /aidp-fusion-config for coords | missing fusion: connectivity (human-only) |
| 1b | OAC MCP connect (front-loaded prerequisite — see §below) | oac-mcp-server tools answer a live search_catalog ping | project-scoped dashboard mcp-setup, then restart/reconnect Claude Code | always when dead — staging the connector needs a Claude Code restart before its tools work; write the resume checkpoint, then PAUSE for the restart |
| 2 | Bootstrap | profiles/<tenant>.yaml present + fingerprint pinned | /aidp-fusion-bootstrap | multi-match variation needs a human pick (never --non-interactive); surface frozen picks |
| 3 | Seed | live gold has the needed tables (probe) | /aidp-fusion-seed | always confirm the destructive guard's CONFIRM outcome |
| 4 | Advise | — (always run for the goal) | /oac-dataset-advisor | — |
| 5 | Author mart (only on advisor GAP) | the gap node exists live after seed | /mart-author → use-pack → back to Step 3 | confirm the authored change before seeding it |
| 6 | OAC dataset | a dataset over the recommended table(s) exists (OAC MCP) | /oac-dataset-setup | always — dataset creation is an OAC UI action today (MCP can't create datasets); hand the exact spec to the user |
| 7 | Workbook | a workbook on that dataset exists/renders | /workbook-authoring | confirm overwrite if replacing an existing workbook |
| 8 | End-user MCP chat (optional deliverable) | least-privilege OAC user handed the connect steps | docs/oac_mcp_setup.md hand-off | confirm the end-user OAC account is least-privilege (v1.4 exposes write/delete/ACL tools) |
Steps 6–7 read OAC through the
oac-mcp-servertools (autopilot's own detectors and/workbook-authoring's required tools). That connection is Step 1b, a prerequisite — not Step 8. Step 8 is a different thing: enabling end users to chat with their own clients. Don't conflate them.
Why front-loaded (not Step 8). /workbook-authoring and autopilot's own
step-6/7 detectors consume the oac-mcp-server tools (search_catalog,
describe_data, save-validation). They are a prerequisite for the OAC half
of the journey. And establishing the connector (dashboard mcp-setup) requires
a Claude Code restart/reconnect before the tools come
alive (docs/oac_mcp_setup.md — MCP servers bind at session start; a mid-flow
setup can't transparently light them up). So the connection is set up early,
once, before the minutes-long Bootstrap/Seed — by the time those finish the
OAC tools are live and phases 6–7 flow with no further interruption.
Run it as early as OAC coords exist. It needs the OAC instance + creds, which come from Config — so on a fresh install Step 1b falls right after Step 1, before Bootstrap. On an already-configured tenant, probe it first thing.
The gate:
oracle_analytics-search_catalog ping (or
claude mcp list → expect oac-mcp-server ✔ Connected).[✓] mcp connect.env -u OAC_URL -u OAC_MCP_USER -u OAC_MCP_PASSWORD -u OAC_ADMIN_USER -u OAC_ADMIN_PASSWORD \
aidp-fusion-bundle dashboard mcp-setup \
--connector-js <path-to-oac-mcp-connect.js>
This stages the connector, writes the 0600 connector config, and wires
the project .mcp.json. The env -u ... wrapper prevents a global shell
OAC profile from overriding the project .env. Before stopping, write
.aidp/autopilot/resume.md with the user's goal and next step. Then
PAUSE with an explicit handoff: "OAC MCP staged — restart/reconnect
Claude Code (/mcp → reconnect oac-mcp-server, or relaunch), then paste:
Resume the Fusion dashboard workflow from .aidp/autopilot/resume.md."
Autopilot is state-first, and the checkpoint preserves the goal if chat
context is lost. Do not try to proceed into phases 6–7 on a dead
connection.Before any pause that may cross a Claude Code restart/reconnect or a long manual UI step, write a non-secret checkpoint at:
.aidp/autopilot/resume.md
Use the helper from this skill directory:
python3 skills/aidp-fusion-autopilot/write_resume_checkpoint.py \
--workdir . \
--goal "<dashboard or workflow goal>" \
--phase "Step 1b OAC MCP connect" \
--next-step "Reconnect Claude Code, verify oac-mcp-server, then re-run /aidp-fusion-autopilot" \
--completed "bundle.yaml and aidp.config.yaml exist" \
--pending "OAC MCP liveness check" \
--evidence "OAC URL configured" \
--note "No secrets recorded"
Resolve the script path relative to the active skill directory when the user is running from a separate customer bundle. Do not put passwords, private keys, tokens, full OCIDs, or connection payloads in the checkpoint. On resume, read the checkpoint first, then re-probe live state; the file is context, not proof.
If bundle.yaml / aidp.config.yaml don't exist yet (brand-new install), Step
1 starts from zero.
First, make sure the CLI exists. On a plugin-only install, the user may have
downloaded the Claude Code plugin but not manually run pip install -e. Do not
send them back to a setup guide for that. Check command -v aidp-fusion-bundle;
if it is missing, install the CLI from the plugin root that contains this skill
directory, then continue. The plugin root is two directories above this file
(skills/aidp-fusion-autopilot/../..). Use the active Python, create or reuse
the plugin repo's .venv only when needed, and keep the customer bundle
directory separate.
Then run aidp-fusion-bundle init from the clean customer bundle directory
to scaffold bundle.yaml, aidp.config.yaml, and .env, then
/aidp-fusion-config to resolve the AIDP coords from names. Capture the user's
goal first (even a rough one) so the rest of the journey has a target; if they
have no goal yet, scaffold + configure and stop there with "what dashboard do
you want?". Don't ask for OCIDs by hand — that's what init +
/aidp-fusion-config are for.
The loop is state-first, so a returning user with a specific goal is just a journey that starts mid-way. Concretely, for "autopilot — I want a dashboard of dim_supplier":
/oac-dataset-advisor (it resolves
"supplier" → the gold/dim table(s) that answer it)./oac-dataset-setup
hands the dataset spec to the user for the OAC UI and verifies it after)./workbook-authoring) — this is the common "already built upstream, just
need the dashboard" case.viewUrl; offer to
refresh/open it or author a new one. Don't silently re-author.So the answer to "if supplier already exists, go to workbook authoring; if not, seed first" is the loop's normal behavior — this section just makes the entity- scoped routing explicit.
The one hard ordering rule: never enter phases 6–7 with a dead
oac-mcp-server. If the Step 1b probe fails, set up, write the resume
checkpoint, hand off the restart, and stop there. Re-running autopilot after the
restart reads the checkpoint and resumes the journey.
python3 skills/aidp-fusion-seed/preconditions.py --bundle bundle.yaml --config aidp.config.yaml --env <env> → {ok, missing[], config_placeholders[], cluster_state}.tests/live/aidp_catalog_probe_live.py → skills/oac-dataset-advisor/catalog_inventory.py).
Live AIDP catalog is the evidence — never pack YAMLs.python3 skills/oac-dataset-advisor/pack_capability.py.oracle_analytics-search_catalog
ping, or claude mcp list (expect oac-mcp-server ✔ Connected). A failure /
auth error means route to Step 1b setup + restart — it does not mean
the catalog is empty.search_catalog /
find_matching_datasources / describe_data. Only trust these once Step 1b
is green — a dead connection returning nothing must never be read as "no
dataset/workbook exists" (false negative → autopilot would wrongly try to
re-author)./aidp-fusion-seed's fail-closed guard; if it
says CONFIRM, surface the affected tables and wait./mart-author's chosen change (rung, blast radius)
before authoring/seeding it./oac-dataset-setup; it presents the
exact spec (tables, columns, join key), pauses for the OAC UI action, then
verifies the saved dataset with MCP.dashboard mcp-setup,
write .aidp/autopilot/resume.md, then stop for the operator to
restart/reconnect Claude Code; the tools can't activate inside the current
session. Resume from the checkpoint on re-run.fusion: connectivity / non-least-privilege MCP user — stop and ask.A compact journey ledger each turn — e.g.:
goal: supplier spend vs GL closing balance, by currency
[✓] config [✓] mcp connect [✓] bootstrap [✓] seed (gl_balance, supplier_spend live)
[✓] advise → COVERED: dataset over gl_balance + supplier_spend on currency_code
[⏸] OAC dataset → create in OAC UI (spec below), then I continue
[ ] workbook [ ] end-user mcp chat (optional)
On a pause, state exactly what you need from the user and which step resumes.
/aidp-fusion-config · /aidp-fusion-bootstrap / medallion-author · /aidp-fusion-seed ·
/aidp-fusion-status · /oac-dataset-advisor · /oac-dataset-setup ·
/mart-author (+ use-pack) · /workbook-authoring · /aidpf-error-triage ·
dashboard mcp-setup. Day-2: /aidp-fusion-incremental (deltas) with
/fusion-drift-doctor as its drift precheck. On known drift gates
(AIDPF-2072/4070/4071/2012/4040 — schema/PVO drift, plan-hash), route
directly to /fusion-drift-doctor, which diagnoses and hands to
bootstrap --refresh / /medallion-author / re-seed. On any other AIDPF-*
code or ambiguous failure, route first to /aidpf-error-triage. Autopilot adds
no mechanism — it sequences these and holds the user's goal across them.
oac-mcp-server, and never read a dead/
unauthenticated MCP connection as an empty catalog — set up Step 1b + restart
first.AIDPF-* code; route to
/aidpf-error-triage.npx claudepluginhub daiiis/claude-code-plugins --plugin oracle-ai-data-platform-fusion-bundleGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.
Dispatches multiple subagents concurrently for independent tasks without shared state. Use when facing 2+ unrelated failures or subsystems that can be investigated in parallel.