SC4SAP Ask Consultant
Single entrypoint for asking a SAP module consultant agent an operational question. The skill auto-selects the right consultant(s) from the question text + project config, honors the configured SAP environment, and returns a faithful answer — no code generation, no object creation, just the consultant's judgment.
<Response_Prefix>
Every response triggered by this skill MUST begin with [Model: <main-model> · Dispatched: <sub-summary>] per ../../common/model-routing-rule.md § Response Prefix Convention.
</Response_Prefix>
<Phase_Banner>
Multi-phase skill. Before each Agent(...) dispatch (including every parallel consultant spawn and the optional synthesis pass), emit ▶ phase=<id> (<label>) · agent=<name> · model=<Opus|Sonnet|Haiku> per ../../common/model-routing-rule.md § Phase Banner Convention. Resolve the dispatch mode first per ../../common/model-dispatch-mode.md: auto (default) uses the model below/in the rule; user-defined asks the user Opus / Sonnet / Haiku (recommended one first) before each dispatch group.
</Phase_Banner>
<Team_Mode>
When module routing produces ≥ 2 consultants, Step 4 doubles as teamMode Round 1. If Round 1 POSITIONs diverge (per team-mode.md § Divergence check), escalate to Rounds 2-3 and use the teamMode synthesis variant instead of Step 5 legacy synthesis. Single-consultant questions and aligned Round 1 → legacy synthesis (Step 5) unchanged. See team-mode.md for orchestration + shared task list layout + response prefix variant. Base protocol: ../../common/team-consultation-protocol.md.
</Team_Mode>
<Use_When>
- User says "ask consultant", "ask {module}", "consultant", "SD 컨설턴트", "MM 컨설턴트", "물어봐", "자문", "consult", etc.
- User has an operational / configuration question that does NOT require code generation or MCP writes.
- User needs cross-module advice that fans out to 2-3 consultants.
- User wants to sanity-check a config choice before running
/sc4sap:create-program. </Use_When>
<Do_Not_Use_When>
- User wants to create code / objects — use
/sc4sap:create-programor/sc4sap:create-object. - User wants to analyze a runtime error — use
/sc4sap:analyze-symptom. - User wants to review existing code quality — use
/sc4sap:analyze-code. - User wants IMG customizing table data extraction — refuse per
common/data-extraction-policy.md. </Do_Not_Use_When>
<Session_Trust_Bootstrap> MANDATORY — runs as Step 0 before the consultant dispatch.
Invoke /sc4sap:trust-session with parent_skill=sc4sap:ask-consultant so the consultant agent's read-only MCP calls (SearchObject, GetTable, GetPackage, GetWhereUsed, etc.) proceed without prompting.
- If
.sc4sap/session-trust.logalready has a line within the last 24h, skip silently.
Full spec: see ../trust-session/SKILL.md.
</Session_Trust_Bootstrap>
<Environment_Context> MANDATORY — the consultant answers against the project's configured SAP environment, not generic best-practice. Before dispatching, load:
.sc4sap/config.json→sapVersion(ECC / S4 On-Prem / S4 Cloud Public / S4 Cloud Private),abapRelease,industry,country,activeModules.sc4sap/sap.env→SAP_URL,SAP_CLIENT,SAP_LANGUAGE,SAP_INDUSTRY,SAP_COUNTRY,SAP_ACTIVE_MODULES(as fallback)
Pass these to the consultant via the dispatch prompt so its answer reflects the actual landscape. If any key is missing, ask the user before dispatching — do NOT let the consultant invent assumptions.
The consultant agent's Mandatory_Baseline (Tier 1 + Tier 2 per ../../common/context-loading-protocol.md) ensures it loads spro-lookup.md, customization-lookup.md, active-modules.md at session start and reads only the configs/{MODULE}/*.md file(s) the question needs.
</Environment_Context>
<Module_Routing> Map the user's question to the target module(s). Priority:
- Explicit mention: "MM 물어봐" / "ask SD" / "FI 컨설턴트" → dispatch that consultant directly.
- Keyword inference: map keywords to modules (PO/EKKO/EBELN → MM; invoice/BKPF/BSEG → FI; sales order/VBAK → SD; cost center/KOSTL → CO; MRP/production order/AFKO → PP; WBS/PROJ → PS; maintenance order → PM; inspection lot → QM; cash management/treasury → TR; payroll/infotype → HCM; warehouse/bin → WM; freight order → TM; InfoObject/DataSource → BW; sourcing/Ariba Network → Ariba; dump/transport/kernel → BC).
- Multi-module: if 2-3 modules match with similar signal strength, dispatch all in parallel. Example: "MM PO가 FI에 어떻게 전기되는지" → dispatch MM + FI in parallel; the skill then composes the answer.
- Unclear: ask the user which module first — one question, one round.
Supported consultants (15 total):
- Module:
sap-sd-consultant,sap-mm-consultant,sap-fi-consultant,sap-co-consultant,sap-pp-consultant,sap-ps-consultant,sap-pm-consultant,sap-qm-consultant,sap-tr-consultant,sap-hcm-consultant,sap-wm-consultant,sap-tm-consultant,sap-bw-consultant,sap-ariba-consultant - Basis:
sap-bc-consultant</Module_Routing>
<Workflow_Steps>
Per-step model allocation (the main thread follows the session model — frontmatter model: inherit, because it judges divergence and reviews the synthesis; Agent dispatches carry their own model):
- Trust bootstrap — §
<Session_Trust_Bootstrap>. (main · skill-to-skill) - Environment load — read
config.json+sap.env; surface resolved values on the FIRST turn only (one line:SAP: <version> · <industry> · <country> · active: <modules>). (main thread) - Module routing — apply §
<Module_Routing>. If ambiguous, ask one question and stop. (main thread) - Consultant dispatch — one
Agent(...)per resolved module (parallel in a single message when 2–3 modules match). Emit phase banner per dispatch:
Dispatch shape:▶ phase=4 (consultant-<MODULE>) · agent=sap-<module>-consultant · model=Opus
teamMode variant: when N ≥ 2, Step 4 doubles as Round 1 of teamMode — use the Round 1 spawn shape inAgent({ subagent_type: "sc4sap:sap-<module>-consultant", // frontmatter alias `opus` (tracks the newest Opus) description: "<MODULE> consultation — <topic>", prompt: <user question + environment context + expected format> })team-rounds.md§ Round 1 (inlined charter +teamMode=true; each consultant returns a POSITION block ahead of its answer and the lead persists it to the run directory — noteam_name). - Synthesis (conditional — only when ≥ 2 consultants replied) — dispatch
sap-writerwithmodel: "sonnet"override. Writer's base model is Haiku (pure formatting); Sonnet override gives the light cross-domain reasoning needed to detect agreement / disagreement between consultant answers without jumping to Opus. Emit banner:
Dispatch shape:▶ phase=5 (synthesis) · agent=sap-writer · model=Sonnet
teamMode variant: if Round 1 POSITIONs diverged (perAgent({ subagent_type: "sc4sap:sap-writer", model: "sonnet", // override base Haiku — synthesis needs light reasoning description: "Cross-module synthesis — <modules>", prompt: """ Synthesize the following consultant answers for the user question. Identify shared points, flag disagreements (with a one-line "WHY they differ" note), and produce a cross-module summary. Do NOT re-answer the question — only compose from the supplied consultant outputs. User question: <question> Environment: <sapVersion> · <industry> · <country> · modules: <list> Consultant answers: <MODULE_A>: <answer_a> <MODULE_B>: <answer_b> [...] """ })team-rounds.md§ Divergence check), do NOT run the legacy synthesis above — followteam-rounds.mdRounds 2-3 thenteam-mode.md§ Synthesis (task-list–driven writer dispatch). On single-consultant case: SKIP Step 5 entirely — main thread just forwards the consultant's answer to Step 6. - Return & follow-up — review the synthesis against the consultant answers first (identifiers, what each consultant actually claimed; correct and note mismatches — writers do misstate), then present the final answer (single-consultant: verbatim; multi-consultant: synthesis output as the body + per-module subsections). Offer follow-up paths:
/sc4sap:create-program(if the answer leads to a new build),/sc4sap:program-to-spec(if user wants the existing asset documented),/sc4sap:analyze-code(if quality review needed). (main thread)
No writes: this skill never calls Create* / Update* / Delete* / Activate* / CreateTransport. If the consultant's answer suggests a change, the user must run a separate creation / modification skill.
No row extraction: GetTableContents and GetSqlQuery are NOT used. Schema / DDIC reads are fine (GetTable, GetStructure, GetDataElement, GetDomain, SearchObject).
</Workflow_Steps>
<Output_Format> Return the consultant's answer verbatim, prefixed with the consultant identity and the environment context it used:
[Model: <main-model> · Dispatched: Opus×<n> (<consultant names>)] 🧭 Consultant: sap-<module>-consultant 🌐 Environment: <sapVersion> · <industry or "—"> · <country or "—"> · active modules: <list> <consultant's faithful answer> --- 💡 Next steps (optional): - /sc4sap:create-program — if this leads to a new build - /sc4sap:program-to-spec — to document an existing asset - /sc4sap:analyze-code — to review existing code
For multi-module dispatches, the 🧭 Consultant line lists all names, the body leads with the sap-writer synthesis (Sonnet) — shared points, disagreements, cross-module summary — followed by one verbatim subsection per consultant.
Dispatch-summary examples in the prefix:
- Single consultant:
[Model: <main> · Dispatched: Opus×1 (sap-mm-consultant)] - Multi-consultant:
[Model: <main> · Dispatched: Opus×2 (sap-mm-consultant, sap-fi-consultant), Sonnet×1 (sap-writer synthesis)] - Multi-consultant teamMode:
[Model: <main> · Dispatched: Opus×2 (sap-mm-consultant, sap-fi-consultant), Sonnet×1 (sap-writer team-synthesis) · Team: 2 members × 2 rounds]</Output_Format>
<Related_Skills>
/sc4sap:compare-programs— complementary when the consultant's answer references existing variants./sc4sap:analyze-cbo-obj— complementary when the consultant's answer depends on knowing what custom assets already exist. </Related_Skills>
<MCP_Tools_Used>
SearchObject,GetObjectInfo— existence checks as the consultant worksGetPackage,GetPackageContents— CBO scope confirmationGetTable,GetStructure,GetDataElement,GetDomain,GetView— DDIC metadataGetWhereUsed— call-graph queries- NEVER:
GetTableContents,GetSqlQuery, anyCreate*/Update*/Delete*/Activate*</MCP_Tools_Used>
Task: $ARGUMENTS


