SuperClaude for SAP
A Claude Code plugin that installs and wires its own ABAP MCP server, then puts a two-layer write guard between the agent and any system profile marked QA or production.
Most of this corner leaves the question of which system an agent is pointed at to the person configuring it. This makes the landscape a first-class object: register several SAP systems per company — KR-DEV, KR-QA, KR-PRD — and hot-switch between them mid-session. QA and production profiles are protected automatically by a PreToolUse hook *and* a guard inside the MCP server, so bypassing the hook does not bypass enforcement; create, update, delete, transport creation and runtime execution are all blocked there. Passwords live in the OS keychain rather than a dotfile, and per-profile artifacts are isolated with read-only cross-view so a QA session can read Dev's specs without contaminating them. /sc4sap:setup installs, configures and connection-tests the MCP server itself.
Facts
Where it sits
Who is behind it
In the atlas: maintains 2, contributes to 2@babamba2maintainerKim sihunContributes to this
In the atlas: contributes to 1@tennto1 contributor
Before choosing this
Conditions
PracticalFunctional boundary
It is a plugin for one server — its own — so it is a stack rather than a component. And the guard is only as good as the profile labels: a production system registered as DEV is a production system with the safety off.
What it declares
Every artifact
- Type
- Skill
- Origin
- Independently maintained
As a skill
- Distributed through
- Agent plugin marketplace
For agent guidance
- Installs into
- Claude Code
- System reach
- Supplied with it
Connections
Packaged knowledge that teaches a coding agent a framework
Controlling what an agent may call, with an audit trail
ABAP ADT MCP server published as an npm scope and plugin
SAP's earlier ERP suite, ECC 6.0, run on-premise on the ABAP platform and succeeded by SAP S/4HANA. For the things here it is the system a tool reads from or writes to.
SAP's ERP suite, run on-premise or as a private cloud edition, with its business data and processes reached over OData, RFC and the ABAP platform. For the things here it is the system a tool reads from or writes to. The public cloud edition is its own entry.
Download
README
quoted from babamba2/superclaude-for-sap under MIT, read
SuperClaude for SAP (sc4sap)
Claude Code plugin for SAP ABAP development — SAP ECC / S/4HANA On-Premise / S/4HANA Cloud (Public & Private)
Website: sc4sap.dev
What is sc4sap?
SuperClaude for SAP transforms Claude Code into a full-stack SAP development assistant. It connects to your SAP system via the MCP ABAP ADT server (150+ tools) to create, read, update, and delete ABAP objects directly — classes, function modules, reports, CDS views, Dynpro, GUI status, and more.
Core Capabilities
| Capability | What it does |
|---|---|
| 🔌 Auto MCP Install | abap-mcp-adt-powerup is auto-installed, configured, and connection-tested during /sc4sap:setup. No manual MCP wiring. |
| 🌐 Multi-Environment Profiles (Dev / QA / Prod) | Register multiple SAP systems per company (e.g. KR-DEV, KR-QA, KR-PRD, US-DEV) and hot-switch between them in-session via /sc4sap:sap-option. QA and Prod profiles are auto-protected: a 2-layer defense (PreToolUse hook + MCP-server guard) blocks Create*/Update*/Delete*, CreateTransport, and runtime code execution tools — bypassing the hook does not bypass enforcement. Passwords are stored in the OS keychain (@napi-rs/keyring — Windows Credential Manager / macOS Keychain / libsecret) so .sc4sap/ never leaks secrets to git. Artifacts (specs, CBO catalogs, audits) are isolated per profile with read-only cross-view so QA sessions can inspect Dev-produced specs without contaminating them. |
| 🏗️ Formatted Auto Program Maker | Builds ABAP programs end-to-end: Main + conditional Includes (OOP/Procedural), full ALV + Docking, Dynpro + GUI Status, mandatory Text Elements, ABAP Unit tests — platform-aware (ECC / S4 On-Prem / Cloud). |
| 🔍 Program Analyze | Read any ABAP object via MCP, run Clean ABAP / performance / security review, or reverse-engineer into Functional/Technical Spec (Markdown/Excel). |
| 🧪 Analyze Code | /sc4sap:analyze-code — dedicated static review pass (sap-code-reviewer): Clean ABAP, performance, security, SAP standard compliance. Severity-ranked findings with concrete fix suggestions. |
| 🔀 Compare Programs | /sc4sap:compare-programs — side-by-side business comparison of 2–5 ABAP programs that share the same scenario but split by module (MM/CO), country (KR/EU), or persona (controller/warehouse). Consultant-facing editable HTML report across 10 configurable dimensions — coloured verdict matrix with a Differences only switch, field-by-field differences, screens drawn side by side, decision guide, versions + English companion. |
| ⚙️ Config → Document | /sc4sap:config-to-document — one module's configuration documented as it is in the connected system (MM first). One offline HTML file that follows the IMG tree: per IMG activity the real table values drawn on an SM30-style screen, rows changed by customer transports with their transport history, configuration checks, SAP's IMG documentation, and consultant notes written by the module consultant agent and reviewed by sap-critic. Read-only on SAP; an in-page edit mode lets the consultant correct the notes, values and change history and hand the file back for the next version. |
| 🔌 Interface Mapping Spec | /sc4sap:interface-mapping-spec — interface mapping specification as one editable HTML page in the classic template layout: cover, revision history, Source → Target field grid with conversion-rule and MAPPING columns, synchronous response block, extraction condition, field guide. Built for new interfaces: scenario presets, SAP fields from a TABLE-FIELD list or the module consultant's proposal (checked against DDIC) — or read from an existing table, structure, view or RFC — with the counterpart side, DB types and conversion rules proposed. In-page checks (missing items, truncation, type and key mismatches, unmapped fields), Excel paste, versions with revision history, English companion, refresh when the SAP structure changes. |
| 🖨️ SmartForm Preview | /sc4sap:smartform-preview — the expected print of a SmartForm as a JPG, without a print program or test data: windows at their real mm positions, SmartStyle fonts, template grids with borders and shading, SE78 graphics (logo, signature), loops with sample rows. The &fields& get invented sample values sized to their DDIC types, and the report lists the cells and windows whose content is cut off. Read-only. → smartforms/<FORM>/<FORM>-preview.{jpg,html} |
| 📄 SmartForm from PDF | /sc4sap:smartform-from-pdf — builds a SmartForm from a PDF (or screenshot) of the printed form: ruled areas become templates, every text sits where the source has it in the closest format of an existing SmartStyle, then the values become &fields&, item lines a loop over an internal table and the interface is added — decided with you. Uploaded to the DEV system, printed there and scored against the source page. → smartforms/<FORM>/ |
| 🗺️ Package → Process | /sc4sap:package-to-process — reverse-engineer a CBO package into an end-to-end business-process document: auto-detected TCode entry points → AI process grouping (PR→PO→GR→IR) → per-process narrative + Mermaid flowchart / sequence diagram + step tables. Auto-chains sap-stocker when CBO inventory is missing. → .sc4sap/processes/<MODULE>/<PACKAGE>/. |
| 🩺 Maintenance Diagnosis | Operational triage loop: ST22 dumps, SM02 system messages, /IWFND/ERROR_LOG, profiler traces, logs, where-used graphs — all from Claude. |
| ♻️ CBO Reuse (Brownfield Accelerator) | Inventory a Z-package once — create-program / program-to-spec prefer reusing existing CBO assets over duplicates. |
| 🧷 CBO Extension Awareness (CMOD / GGB0·1 / BTE / VOFM / BAdI / APPEND) | Inventories user-exits (CMOD), validations & substitutions (GGB0/GGB1), BTE function modules, VOFM routines (requirements / formulas / data transfer), BAdI implementations, and APPEND structures. create-program / BAPI flows prefer existing Extension fields (e.g. BAPI EXTENSIONIN / table appends) over new CBOs; dump & incident diagnosis inspects Extension points as first-class suspects. |
| 🏭 Industry Context | 14 industry reference files (retail, fashion, cosmetics, tire, automotive, pharma, F&B, chemical, electronics, construction, steel, utilities, banking, public-sector). |
| 🌏 Country / Localization | 15 per-country files + EU-common (KR/JP/CN/US/DE/GB/FR/IT/ES/NL/BR/MX/IN/AU/SG). e-invoicing, banking, payroll, tax localization. |
| 🧩 Active-Module Awareness | Cross-module integration hints: MM + PS active → auto-suggest WBS fields on MM CBOs; SD + CO active → CO-PA derivation. Details → |
| 🤝 Module Consultation | sap-analyst / sap-critic / sap-planner / sap-architect delegate to 14 module consultants + 1 BC consultant when business judgement is needed. Users can also ask a module consultant directly via /sc4sap:ask-consultant — auto-routes SD/MM/FI/CO/PP/PS/PM/QM/TR/HCM/WM/TM/BW/Ariba/BC by keywords, answers against the configured SAP environment (version, industry, country, active modules), read-only. |
| ⚡ Per-Phase Model Routing | Every skill's main thread follows your session model (model: inherit) while delegating heavy work to specialized agents (Opus for novel ABAP generation, cross-module synthesis, and incident triage; Sonnet for facts extraction; Haiku for report rendering). No skill switches the main thread, so your model choice holds and the prompt cache is never re-written mid-session; per-phase Agent() dispatches run on their declared tier. Model choice is visible in every response prefix + per-phase banner (e.g. ▶ phase=3 (writer-spec) · agent=sap-writer · model=Opus). Full matrix — per-skill, per-phase — in docs/skill-model-architecture.md. |
Documentation
- 📦 Installation & Setup → — requirements, install options, wizard steps, blocklist configuration
- 🎯 Features Deep-Dive → — 26 agents, 14 skills, MCP tools, RFC backends, hooks, data-extraction policy
- 🧠 Skill Model Architecture → — per-skill / per-phase model allocation (Haiku / Sonnet / Opus), model override patterns, escalation ladders, design rationale
- 📜 Changelog → — version history and breaking changes
Unleashed
Author
Contributors
Acknowledgments
This project was inspired by oh-my-claudecode by 허예찬 (Hur Ye-chan). The multi-agent orchestration patterns, Socratic deep-interview gating, persistent loop concepts, and overall plugin philosophy here all trace back to that work.
mcp-abap-adt by fr0ster was a major contribution to building our customized MCP server (abap-mcp-adt-powerup). The pioneering ADT-over-MCP work — request shaping, endpoint coverage, object I/O — provided the conceptual foundation we drew on while designing and extending our own server.
License
History
Changed 1
Notes
Changed — MCP pin
abap-mcp-adt-poweruppin1af0724(4.8.12) →c9461c6(4.8.13). New installs get the SmartForm tools thesmartform-previewandsmartform-from-pdfskills call —GetSmartFormLayout,GetSmartFormContent,RenderSmartForm,CreateSmartForm,DeleteSmartForm— and the server's dependency updates (@modelcontextprotocol/sdk1.32.1,axios1.20,fast-xml-parser5.11,zod4.6, ...).
Changed 6
Notes
Changed —
smartform-from-pdf- Item lines are always a loop. The planner reports item candidates: lines whose columns repeat at a fixed pitch, also items of several lines, a reference line above the line of numbers and a freight line that fills fewer columns. Over free texts (no ruled grid) the new
textItemsputs the column header, the loop and the totals below it into one MAIN window, so the totals move down with the items; cells follow each text's alignment and grow beyond the sample's width, rows never get thinner than their line spacing. - Shading: filled boxes shade the template cells they cover (a grey as black at its intensity, a colour as fill colour). Image areas become graphic windows that show an existing SE78 graphic the user names (resolution taken from the image).
- Conditional texts (
conditions, the text node's own condition), currency / quantity reference fields (refFields), Initialization code (init) and text modules (modules) for letterhead and footer blocks, named per company code at run time; a company code without a module leaves the block empty instead of stopping the print. A test text module can be uploaded withCreateSmartForm. - Placement: right-aligned columns (amounts, values under each other) get right-aligned paragraphs; a window whose text became a field grows the way its text is aligned; grid edges sit at rule positions, not at rule ends; white rules and zero-width window frames are no rules; texts on one line share a line spacing where the styles allow it; a line spacing equal to the font height no longer counts as too small.
- Screenshots: font sizes are measured from line widths with SAP's glyph widths, and handwritten notes are asked about, not printed.
compare-layout.mjsalso reports shading and images (not scored, so scores stay comparable).
- Item lines are always a loop. The planner reports item candidates: lines whose columns repeat at a fixed pitch, also items of several lines, a reference line above the line of numbers and a freight line that fills fewer columns. Over free texts (no ruled grid) the new
Changed 5
Notes
Changed —
smartform-preview- Glyph widths match SAP's print: SAP adds up its device type's font-metric widths per character, each rounded to whole twips.
scripts/smartform/glyph-widths.jsonholds the widths SAP's own PDF converter used (PDFUC / SAPWIN per family and weight, KPPDF per size), and the preview corrects the browser's widths to them, so lines wrap where SAP wraps them. - Tables: sort-begin / sort-end events per group, and the WHERE / first-line / last-line output conditions.
- A tab with nothing printed after it makes no room; a bar-code character format with no bar-code type prints plain text; a character format that only wraps other formats and is larger than their text no longer enlarges the line; the Thai family THVIJIT prints as ANDALE_J on PDFUC.
- Tested on 40 more forms the preview had not seen before; 37 matched SAP's print exactly.
Changed —
config-to-document- Reads validation / substitution rules (GGB) and CMOD projects into the configuration document; large tables are read in pages; customer rows are marked from the transport history.
- Glyph widths match SAP's print: SAP adds up its device type's font-metric widths per character, each rounded to whole twips.
Features 5
Notes
Added —
smartform-from-pdf- New skill
/sc4sap:smartform-from-pdf: a SmartForm built from a PDF of the printed form (or a screenshot, positions estimated). Ruled areas become templates, every text is placed where the source has it, in the paragraph / character format of an existing SmartStyle that prints its font, size and weight (no style is created; sizes no style has are reported). The main thread then decides with the user which texts are fields, which grid rows are item lines and which DDIC types carry the interface; the form is uploaded to the DEV system, printed there and the print is scored against the source page. scripts/smartform/read-pdf.mjs— PDF page → texts (position, font, size, weight, SAP font name from RSTXPDF comments), rules, boxes and images in mm; no dependencies (Type1 / TrueType widths and encodings, CID fonts in EUC-KR / UTF-16 / UCS-2, ToUnicode, glyph-name differences, inline and XObject images, object streams). Checked against SAP's OTF of more than a hundred forms: 99.6 % of the text runs and 99.9 % of the rules at the same place.plan-form.mjs(layout + style catalog → form spec),shape-form.mjs(fields, item loops, interface),write-form.mjs(spec → Form Builder XML: windows, templates with per-cell borders, loops, tables with header / main / footer events),compare-layout.mjs(print vs source score). Built and tuned by generating forms from more than a hundred printed forms and comparing SAP's print of each with its source: average 98 / 100, most at 99 or better.- What the generator follows, learned from SAP's prints: a text prints in the style of its output options; a cell prints a line only when the whole line height fits; a window frame prints only when the window prints something (lone rules are one-cell templates); a text line holds 132 characters (continued in
=lines); CJK families are device fonts (a stand-in the printer lacks prints#); numbers are right-justified in their output length ((C)in narrow cells). - ABAP:
zmcp_ssf_upload.abap(FMZMCP_SSF_UPLOAD, SMARTFORMS-style XML upload with check, activation and regeneration) andzmcp_ssf_delete.abap(FMZMCP_SSF_DELETE, local Z/Y forms only) with their dispatcher branches; install steps inabap/README.md. DEV systems only.
Needs abap-mcp-adt-powerup with
CreateSmartForm/DeleteSmartForm.- New skill
Features 2, Changed 5
Notes
Changed —
smartform-previewprints like SAPThe preview was trained against SAP's own output: for well over a hundred customer forms, SAP rendered the form with invented values (new FM
ZMCP_SSF_RENDER, MCP toolRenderSmartForm) and a metric compared every text run, line and bar code of SAP's OTF with the preview. Most forms now match exactly. What the renderer learned, among others:- Fonts and widths: printer families per device type (missing families and missing fixed sizes print in COURIER, TrueType families without bold print regular), blank widths from SAP's own metrics per device / family / size (
blank-widths.json), hyphen rules rounded like SAP, no kerning, fixed-pitch DBCS fonts, legacy Korean / Chinese / Japanese bytes in Latin-1 texts printed as Hangul / CJK in a DBCS printer font. - Styles: a text prints in the style its output options or parents pass down, not the one stored with it; styles named only in output options are read too.
- Layout: table patterns and outer frames, window boxes outside by their distance, hairline sides, templates at a fixed vertical position, LEFTMARGIN, line types that refer to another line's height, 4.6-style tables that flow by new line / new cell, folders and loops inside templates and tables, footer events on the last row, sort events, page breaks, cut rows in fixed-height cells and secondary windows.
- Text: right / centre tab stops and default tab stops, append-directly text nodes, dynamic text nodes (text tables), hyphenated words, numbers right-justified with the sign position, page totals, texts in the form's master language when the logon language has none, bar codes (Code 128 module and height from SE73) with nested bar-code formats.
- The skill documents the value conventions (sign position, node-scoped values, dynamic texts).
Added
scripts/smartform/compare-otf.mjs(preview vs SAP OTF metric) andscripts/smartform/otf-draw.mjs(OTF drawn as a reference image).- ABAP:
zmcp_ssf_render.abap(FMZMCP_SSF_RENDER) with its dispatcher branchzmcp_adt_dispatch_ssf_render_branch.abap;ZMCP_SSF_CONTENTreturns style paragraphs / character formats with SE73 bar-code definitions, the device's printer fonts (FONTSpart), and the form XML in a given language (FORM+IV_LANGUAGE). Seeabap/README.md.
Needs abap-mcp-adt-powerup with
RenderSmartFormand the extendedGetSmartFormContent(main 14df46e).- Fonts and widths: printer families per device type (missing families and missing fixed sizes print in COURIER, TrueType families without bold print regular), blank widths from SAP's own metrics per device / family / size (
Features 4
Notes
Added —
smartform-preview- New skill
/sc4sap:smartform-preview: the expected print of a SmartForm as a JPG plus the HTML it is drawn from, without a print program or test data. Windows at their mm positions, SmartStyle paragraph and character formats, template grids with borders and shading, loops and tables with sample rows, SE78 graphics (logos, signatures) at their printed size,Page 1 of 1. - Every
&field&gets an invented sample value:scripts/smartform/build-preview.mjs symbolslists where each symbol prints (window, font size, cell width, inside a loop) with the type it is declared with; the skill reads the field types from the DDIC and writesvalues.jsonwith values that fit them (one value per sample row inside loops). Business data is never read. buildwrites the HTML, saves the JPG with headless Chrome / Edge / Chromium and reports cut-off cells and overflowing windows — drawn cut off, as SAP prints them — plus everything it could only approximate (field conditions, alternatives, address nodes, dynamic graphic keys).- ABAP: FM
ZMCP_SSF_CONTENTand dispatcher actionSSF_CONTENT(abap/zmcp_ssf_content.abap,abap/zmcp_adt_dispatch_ssf_content_branch.abap, install steps inabap/README.md). Read-only; needs MCP server withGetSmartFormContent.
- New skill
Features 4, Fixes 10
Notes
Added —
config-to-document- What the customer BAdI implementations do: the extraction reads every implementing class (and the Z includes it branches into, two levels deep) and splits it per method — code or empty, size, the function modules, tables read and changed, classes and includes it calls. The module consultant writes a summary and one line per method with code,
sap-criticchecks them against the source, one revision (scripts/config/badi-notes.mjs, prompt § 6). The BAdI card shows them under each implementation with the method table and the source (folded). - IMG activities that only open SE18 / SE19 name their BAdIs in the documentation, not in
CUS_ACTEXT: those names count when the system knows them as a BAdI, so implementations such as invoice-verification BAdIs appear on their activity. - Value lists per column: the ⓘ popup and the column meanings list the values a column can take with SAP's text — the domain's fixed values, else the keys of its check table with the text of its language-keyed text table (TVFK → TVFKT), never a user-name column; up to 300 values.
- What each fixed value of a column does:
scripts/config/values.mjsbatches the domains behind the shown columns (fixed values with the document-language and English SAP text, F1, rows using each value), the module consultant writes one line per value (DOMAIN:VALUE = meaning),sap-criticcorrects, and the reviewed meanings go to a knowledge base shared by every module and system (~/.sc4sap/kb/values/<lang>.json). The value list in the ⓘ popup shows them in a "Meaning" column; a document-language SAP text that is a mistranslation, a literal rendering or untranslated is called out there. The snapshot keeps the English domain texts for this (domainsEn).
Fixed —
config-to-document-
Customer rows were under-counted on busy tables: the customer transport keys (E071K) of a table were read once, up to 5000 rows, so on per-plant tables (storage locations, order type parameters …) rows changed by later requests were not marked as customer rows. The keys are now read in pages by request number.
-
The extraction's read cache (
_cache.json) is written one entry per line: with the transport keys read in full it grew past the longest stringJSON.stringifycan build, and the run ended without writing the snapshot. A cache from an earlier version is still read. -
Tables still cut after the full read are read completely in more cases: a text table read in two languages is split per language first (movement type texts stopped half-way through the Y range), and a table whose first key has no fixed values or a check table larger than 1000 rows (routes, route stages, message texts) is read in pages in key order instead of staying at 5000 rows.
-
Tables with more rows than
--max-rowsare no longer cut at 1000 rows: on a system with many plants the per-plant tables (order type parameters, BOM application, move times …) lost most plants. Such a table is now read again up to the 5000-row read cap and split by its key fields when it reaches it; text tables keyed by language are read in the document language and English only, which keeps the snapshot small.--no-fullkeeps the old limit. -
notes-lint.mjsno longer flags "N rows, customer changes M" sentences ("28행이며 고객 변경 행은 5건") as a wrong customer count: a customer word after a clause connector belongs to the next count. -
notes-lint.mjsalso reads a zero customer count ("105건, customer row 0건", "1건, customerRows 0") and "고객 … 없음" as "no customer rows" instead of a wrong customer count. -
sap-criticcan read includes (GetInclude): reviewing a BAdI implementation or a user exit, it had to take the writer's word for code that branches into a Z include. -
The consultant notes' input carried only the first 1000 characters of the SAP IMG documentation, which cut 40 % of the activities (a whole standard procedure could be missing); it now carries up to 6000 characters (99 % of the documents complete).
-
Enhancement-based BAdI implementations show their creator, date and implementing class: the enhancement header keeps them in a serialized field, so they are read from the transport that first recorded the enhancement (E071/E070) and the class from that request.
-
The IMG link in the overview's BAdI table opens the activity instead of jumping back to the overview; the BAdI card's filter column has its own label (it showed the table search label) and dates read YYYY-MM-DD.
- What the customer BAdI implementations do: the extraction reads every implementing class (and the Z includes it branches into, two levels deep) and splits it per method — code or empty, size, the function modules, tables read and changed, classes and includes it calls. The module consultant writes a summary and one line per method with code,
Features 7, Fixes 7
Notes
Added —
config-to-document: column meanings- Every value-table column gets its business meaning: an ⓘ on the column header (tap on a phone) and a folded "column meanings" list above the table, with the SAP F1 text of the data element next to it.
- The extractor reads the F1 documentation of every column's data element (
fieldDocs);--field-docsadds it to an existing snapshot without reading the configuration again. - New
scripts/config/fields.mjs: batches of 100 data elements (label, domain values, F1 text, where used, samples), written by the module consultant and corrected bysap-critic(prompt § 5, no web research), then kept in~/.sc4sap/kb/fields/<lang>.json— shared by every module, so a later module writes only the data elements it does not share. --full-tables "<T1>,<T2>"reads the named tables up to the read cap instead of--max-rows; a capped table is split by its next key fields, andconfig-checks.jsonreadswithout a condition are read like activity tables (DDIC fields, customer transports).- BAdI customer implementations: an IMG activity that is a BAdI (
CUS_ACTEXT) shows a card with the customer implementations of this system — classic (SXC_EXIT/SXC_ATTR/SXC_CLASS) and enhancement-based (BADIIMPL_ENH) — and an active implementation marks the activity customized; the overview lists every BAdI with customer implementations.--badiadds them to an existing snapshot. - Case flows and screen drawings open in a lightbox with zoom (−, +, fit, close).
- SD:
configs/SD/config-checks.jsonreads the SD condition tables the checks need; corrected SD pricing transactions (V/06, V/07, V/08, OVKK).
Fixed —
config-to-document- View selection conditions on the same field are OR-ed and NUMC values compared as numbers, so views such as output-function or billing-plan variants no longer show 0 rows.
- On a phone the top bar stays on one line (title shortened, system line hidden).
- A browser that cannot unpack the page shows why instead of a blank page.
extract-customizations.mjsread no BAdIs at all: the catalog heading "BAdIs" was not recognised as the BAdI section. A tool reply flaggedisErrornow counts as a failure (listed underunavailable),GetEnhancementSpotgets its correct argument name, and enhancement-based implementations are read once fromBADIIMPL_ENHand merged.ZMCP_ADT_DISPATCH(ECC)TABLE_READallows the BAdI repository tablesSXS_ATTR,SXC_EXIT,SXC_ATTR,SXC_CLASS,ENHHEADER— update the function module fromabap/zmcp_adt_dispatch_ecc.abapto see classic BAdI implementations; until then they show as not readable.- An unknown option to
extract-config.mjsstops the run instead of being ignored. - SAP documentation drops
<GL:…>/<LS:…>link tags.
Features 7
Notes
Added —
interface-mapping-spec: interface mapping specifications- New skill
/sc4sap:interface-mapping-spec: one editable HTML page per interface in the classic mapping-specification layout — cover, revision history, header, systems, Source → Target field grid with conversion-rule (R) and MAPPING columns, an optional response block for synchronous interfaces, conversion rules, extraction condition, remarks and the field guide (ⓘ tooltips). Output:interfaces/<IF_ID>/<IF_ID>-v<n>-<lang>.htmlunder the profile artifact base, with an English companion. - Built for new interfaces: four scenario presets (master data outbound, transaction outbound, inbound into SAP, query) fill the header and the response block; the SAP side comes from a
TABLE-FIELD/ data-element list, from the module consultant's proposal (checked against DDIC), from an Excel paste or an empty grid — or is read from an existing table, DB view, structure (proxy) or function module signature (TABLES parameters named as outputs go to the response block). - Fields are grouped by the unit they travel in: ▸ group rows per side with name, PARAMETER / STRUCTURE / TABLE and occurrence; a row's Table column holds only the source DDIC table, and the systems' Structure / occurrence is the summary of the groups. Source and target sides have their own colours.
- Proposals: the counterpart side (same names, DB types, MAPPING 1:1), DDIC types shown as DB types (the DDIC type in the tooltip), conversion rules from the field types (dates, times, leading zeros / ALPHA, currency amounts, quantities and units), IF ID numbering from a project pattern. Proposals are marked until edited or confirmed.
- In-page checks: empty required items, MAPPING to a missing row, unknown rule ids, size truncation, type-family and key mismatches, unmapped target fields.
- Edit mode with nothing installed: code lists as drop-downs, rows and groups added / moved / deleted with MAPPING following the renumbering, Excel paste, undo, browser autosave; Save adds the revision row (author, change, approver) and raises the version.
importtakes the page back and fills hand-typed SAP fields from DDIC;refreshreads SAP again, keeps what the user wrote and marks added / changed / removed fields;fieldshands the SAP-side field list to/sc4sap:create-object. - Cover, document-number pattern, ID pattern and code lists per project in
interfaces/project.json.
- New skill
Features 4
Notes
Added —
config-to-document: edit mode covers the views- Edit mode now also edits each view card: its title, the value-table cells (rows added or deleted) and the change-history rows (added, edited, deleted). Edited views get the "Edited · author · date" badge, so readers see where the page differs from the system.
- A drawn SM30 screen (overview or detail) can be replaced by a real screenshot in edit mode — button, or click the drawing and Ctrl+V — and switched back to the drawing; captures wider than 1800 px are scaled down, only
data:image/…sources are drawn. - Editable table cells stay table cells (the value table, comparison and criteria tables no longer collapse into one column in edit mode).
--importcarries view edits intonotes/edits.json(views, newer edit wins, null removes); the next build replaces the view's values, title and history, redraws its SM30 screen from the edited rows and recounts the activity's rows.
Features 22, Changed 3, Fixes 3
Notes
Added —
config-to-document: module configuration from the live system- New skill
/sc4sap:config-to-document(MM first): one HTML file along the module's IMG tree — per IMG activity the real table values drawn on an SM30-style screen, rows changed by customer transports with their transport history, configuration checks (configs/<MODULE>/config-checks.json), SAP's IMG documentation, and consultant notes written by the module consultant agent and reviewed bysap-critic. Output:config-docs/<MODULE>/<MODULE>-config-v<n>-<lang>.htmlunder the profile artifact base. - Reference panel per IMG activity, written by the consultant agent and reviewed by
sap-critic: SAP documentation summarised in the document language, 2–3 setup cases with flow diagrams and which one the system follows, comparison table, decision checklist, decision criteria, and sources limited to official SAP documentation (SAP Help Portal, SAP Notes / KBAs, SAP Learning — anything else is refused on save). - The notes scope (customized / all with values / all / none) is asked on every run with its batch count and measured cost; reviewed activities are not rewritten.
- Names SAP has no text for in the document language (IMG folders, activity titles, field labels) are translated once by the consultant agent, reviewed, and reused by later runs.
- Number range activities show their intervals (NRIV) on an SNUM-style screen; view variants (
VV_*) resolve to their base table and selection condition. - Edit mode in the page: the consultant notes and the reference panel become editable plain text (list items added or deleted, notes added to an activity without them, sources deleted) while the value tables stay read-only; undo, browser autosave with "continue editing", an "Edited" badge per note. "Save" downloads the page with the edits embedded;
build-config-doc.mjs --import <file>merges them intonotes/edits.jsonso every later version keeps them. Edits never enter the knowledge base. - Knowledge base of reviewed notes (
notes.mjs kb): the system-independent part of every reviewed note is kept under~/.sc4sap/kb/config/<MODULE>/<lang>/; later runs — the same or another system — write only the system part of those activities, with no web research. - Cheaper reviews: a verified-source cache (
notes-sources.mjs) hands earlier-accepted official pages to the writer and lets the reviewer skip re-opening them;notes-lint.mjschecks a batch before review at no token cost — count statements against the snapshot (customer transports only, truncated tables flagged), every named transaction resolved against TSTC / the IMG, check findings the notes leave out. - Tables capped at the 5000-row
TABLE_READlimit are read again per value of their first key field, so output determination (usage B) rows are no longer cut off behind pricing rows.
Fixed —
config-to-document- Customer rows count customer transports only (
<SID>K+ 6 characters); SAP delivery records (SAPK…, command files such asP30A_C_SFC,/SPE/100_CUST) are no longer counted as customer changes. - View conditions on blank values (
INAKTIV = ' ') match empty fields.
Fixed — screen drawings
- ALV cells cut a value wider than its column with "…" instead of drawing it over the next column;
config-to-documentsizes each column to its longest shown value (80–240 px). Measured on a full MM document: 288 drawings had overlapping or spilling texts before, none after.
Changed — MCP pin
abap-mcp-adt-poweruppinbbb2e98(4.8.9) →1af0724(4.8.12 + legacyTABLE_READpasses every table toZMCP_ADT_DISPATCH, which decides by delivery class).
Added — model routing for Opus 5.5 and a Haiku checker
common/model-routing-rule.mdrewritten for the Opus 5.5 / Sonnet 5.5 / Haiku 5.5 tiers with effort per agent role, an escalation pattern and a fan-out table; HUD pricing for the 5.5 models.- New agent
sap-checker(Haiku, read-only) for narrow scout / verify / detect jobs with a line-oriented output contract. create-program: Phase 1A DDIC scout, Phase 4 verification by checker, Phase 6 detect-judge behind a golden-set gate; the reviewer stays read-only.analyze-code: a size scout first; large objects go through checker detection over five rule groups and an Opus judge, and every finding gets a Haiku evidence check (unconfirmed ones are listed separately).compare-programsfacts scouts and the CBO stocking walk / scout / finalize fan-out (analyze-cbo-obj,package-to-process) use the checker as well.
Added — editable reports
program-to-spec: versioned spec pages with an in-page editor;html-to-md.mjsturns an edited page back into Markdown (untouched blocks byte-exact) and imports it as the next version with history.compare-programs: one editable, versioned HTML report with an English companion — fact card, decision guide, verdict matrix with evidence, field presence, both programs' screens side by side, message texts quoted from T100 / the text pool — plus an optional Excel copy (md-to-xlsx.mjs).
Added — other
- CBO reference graph (
scripts/graph/): ABAP statement lexer, edge extraction (include, calls, submits, reads, writes, types, uses) with evidence lines, and queries (callers, reach, impact, flow, components). package-to-process: multi-profile output paths,_state/checkpoints with resume, parallel narrative and render steps.- Conventions: include names without underscores plus a
{PROG}cttest include, tabstrip screens, the OK_CODE contract, an ALV framework option insap-option, ABAP 7.40 SP05 / SP08 feature gates. - ECC ABAP: usage FMs
ZMCP_WL_TCODE_USAGE/ZMCP_WL_JOB_USAGE(back MCPGetTcodeUsage/GetJobUsage);ZMCP_ADT_DISPATCHgets a realDYNPRO_INSERT, the 7.40TR_KEYforCUA_WRITE, andTSTC/TSTCP/DD03L/DD04Lreads. - Screen renderer draws the common SAP toolbar icons (list, convert, release, history, …).
.mjsfiles check out with LF line endings; homepage links point at sc4sap.dev.
Changed —
ZMCP_ADT_DISPATCHTABLE_READ(ECC)- Reads customizing and system tables by delivery class (C, G, E, S) plus a fixed list of repository tables (CMOD, TSTC, DDIC metadata, transport keys); application data and credential tables are still refused.
- Fields inside a
.INCLUDEcan be selected.
- New skill
Features 4, Fixes 10
Notes
Added — customization extraction: VOFM routines
extract-customizationsnow lists customer VOFM routines (requirements, formulas, data transfer, copy requirements, …) inenhancements.json → vofmRoutines[]: group, number, description, KAPPL, active flag, the routine include (RV61A+ number,RV45C+ number, …), its FORMs and code lines. The summary line gets aVOFM:ncolumn.- Customer routines are told apart by number only, with the ranges of transaction VOFM itself: 600–999, PSTK / TDAT 50–99, FOFU 900–999. Their includes live in SAP packages, so the package says nothing. SAP routines below the range are never reported, even when modified.
- Module: condition routines by KAPPL (V… / F → SD, M… / E… → MM, TX → FI), the rest by group (sales / shipping / billing → SD; batch, PURCHIS, stock control → MM; SFIS → PP; PMIS → PM; QMIS → QM). Group catalog and rules:
scripts/lib/customization-vofm.mjs. - A routine registered but never activated is kept with
note; a registered routine whose include was never generated goes tonotPresent[].
Fixed — customization extraction on ECC and its accuracy
- ECC (BASIS < 7.50): the table reads (CMOD, GGB, BTE, VOFM) now work through the
ZMCP_ADT_DISPATCHactionTABLE_READ(requires abap-mcp-adt-powerup 4.8.9 and the updatedabap/zmcp_adt_dispatch_ecc.abap; pinned SHA9a948be→bbb2e98). - GGB rules were never read: the scan queried columns that do not exist on GB03. It now reads the rule tables GB93 (validations) and GB92 (substitutions). A customer rule is one not created by user
SAP, whatever its name — productive rules are often named without Z/Y. GB31 maps each rule to its application area (FI / AA / CO / PS); FI rules carry their company-code assignments from T001D / T001Q. - BTE function modules were never read: wrong columns on TBE24 / TPS34. Now TBE34 (Publish/Subscribe) and TPS34 (Process), Z/Y function modules split by application (APPLK), with the product active flag from TBE24.
- Unreadable is no longer "none": a check that could not run is listed in
unavailable[]and printed asNOT READ: …(repeats counted, e.g.FORMEXIT ×3); a catalog include the system does not have goes tonotPresent[]. - CMOD: SMOD enhancements are matched against active Z/Y CMOD projects (MODATTR + MODACT, read once).
- BAdI: classic BAdIs are read with
GetBadiImplementations(source: "classic"); the enhancement-spot scan is kept as a fallback markedconfidence: "low". - Form-based exits: an include counts as customized when a FORM has code, it declares FORMs of its own, or it pulls in Z/Y includes — the old 150-line threshold is gone.
codeLines,routinesandzIncludesare recorded. - Table extensions: a field is a customer field when its name or its data element starts with Z/Y. On ECC append-structure names are not readable, so only the fields are listed, with a
note. - SD catalog: three form-exit includes that do not exist in any release were removed.
- Documentation updated:
common/customization-lookup.md,skills/setup/customization-auto-generation.md,create-program/inventory-lookups.md,analyze-symptom/SKILL.md,agents/sap-bc-consultant.md, README feature line.
Features 5
Notes
Added —
program-to-manual: numbered screens in the Field Reference- The Field Reference section now shows the selection screen above the selection-field table and the output grid above the output-column table. Every field the table lists is numbered on the picture, and the same number heads its row in a new
#column. - Numbers follow the table order and are made by the build —
manual.jsonneeds no new keys. A row'snameis matched to the drawn screen element (sel:<name>,col:<name>; "P_DIST2 / P_DIST1" tries each name). - Output columns spread over several screens (main grid, popups) get one picture per screen, numbered continuously. Rows whose field is on no drawn screen (Excel columns, fields shown only in a variant) stay unnumbered.
- In edit mode, adding, deleting or renaming rows renumbers the table and the pictures at once; undo restores them.
- These pictures are shown at natural size with horizontal scrolling, so wide grids stay readable; in print they fit the page width.
- The Field Reference section now shows the selection screen above the selection-field table and the output grid above the output-column table. Every field the table lists is numbered on the picture, and the same number heads its row in a new
Features 13, Changed 1
Notes
Added — process flows you can redraw in the page (
program-to-manual,program-to-spec)- The process flow is no longer a fixed picture. In the manual's edit mode, and behind an "✎ Edit flow" button on every flow of a spec HTML (main flow and per-button flows), users:
- drag shapes to move them;
- drag one of the four dots on a shape onto another shape to draw an arrow (dropping on empty space makes a new step there), or click an arrow and drag its end to reconnect it;
- add process / decision / message / start / end steps, change a shape's kind, delete shapes and arrows (Delete key);
- double-click a shape or arrow to change its text (e.g. "Yes" / "No" on branches).
- An edited flow is saved as a free graph (
"layout": "free", every node keeps itsx,y; arrows keep their sides). The build draws it from those positions (scripts/spec/flow-draw.mjs, the same code the page runs), so the PNG, the Excel sheet and the HTML show the user's layout. Flows nobody edited keep the automatic layout. - Manual: the flow is part of the manual's edit mode (undo, autosave, Save,
--import). - Spec HTML:
render-md-images.mjswrites<flow>.graph.jsonnext to each flow PNG;md-to-html.mjsturns those images into editable figures. Save downloads…-edited.html;node scripts/spec/flow-editor.mjs --import <edited.html> <image-spec.json>writes only the changed flows back (old file kept as.bak).
Added —
program-to-manual: more of the manual is editable- Business rules and each scenario's check points: add, delete and reorder items (▲ ▼ + ✕); ⇄ moves a check point to another scenario. Empty lists stay on the page (hidden outside edit mode) so the first item can be added.
- Step notes: one line per item, with the same ▲ ▼ + ✕ and "Add note line". The note is still saved as one string.
- Callout details: add, delete and reorder, also on callouts that had none.
- An empty result shows a placeholder in edit mode and can be filled in.
- Empty items are dropped on save.
Added —
program-to-manual: cross-links and automatic revision history- Glossary terms in the prose link to their glossary row (dotted underline, meaning as tooltip), once per step, check-point box or section.
- Message codes (
E07,Q01, …) link to their row in Messages and Actions wherever they appear, check-point sources included; the tooltip shows the message text. - Links are rebuilt from the page's own tables when edit mode ends.
- Saving in edit mode records a revision: a dialog asks for the author (remembered for next time) and a change note, and the page adds version +0.1 to the revision history, the top bar, the cover and the file name (
…-v1.1-…-edited.html). Saving again in the same session updates that entry.--importwrites it to<PROGRAM>-<lang>.history.json; a--same-versionbuild keeps the user's author, date and note.
Changed —
program-to-spec: English companion by default- When the spec language is not English, a new Step 6 writes English twins of every selected format (
-en.md,-en.html,-en.xlsx) after the review, the wayprogram-to-manualalready does. Structure, SAP identifiers and flow layouts are kept; only prose and labels are translated. Say "no English version" to skip it.
- The process flow is no longer a fixed picture. In the manual's edit mode, and behind an "✎ Edit flow" button on every flow of a spec HTML (main flow and per-button flows), users:
Fixes 2
Notes
Fixed —
trust-session: no more permission-rule warning at startup- Permission rules are aligned with Claude Code's path-rule model:
Read(path)covers all file-reading tools andEdit(path)covers all file-editing tools. trust-session now grants onlyRead(.sc4sap/**),Read(sc4sap/**)andEdit(.sc4sap/**)(plusAgent(*)). - The stale
Write(.sc4sap/**),Glob(...)andGrep(...)entries that earlier versions wrote never matched and made Claude Code print a warning at startup. trust-session now removes them automatically; no other rule is touched.
- Permission rules are aligned with Claude Code's path-rule model:
Features 6, Changed 1
Notes
Added —
program-to-manual: edit the finished manual in the page- The manual page has an Edit button. Key users change the finished manual like a slide deck, with nothing installed and nothing loaded from the network:
- Click any text to change it. Selecting text shows a small toolbar with bold, highlight (red) and bullet list. The toolbar is Quill 2.0.3 (BSD-3-Clause), inlined from
scripts/manual/third_party/quill-2.0.3/and mounted only on the field being edited. - Move, duplicate and delete steps. Add and delete callouts, and drag a callout number to a better place; a leader line keeps it tied to its frame.
- Replace a drawn screen with a real screenshot: click the step and press Ctrl+V, or use the button. "Original screen" brings the drawing back.
- Add and delete rows of the field, message and glossary tables, edit every cell, and switch the ● cells (required, F4) with a click.
- Undo every change with Ctrl+Z or the Undo button.
- Edits are kept in the browser (IndexedDB) until saved. Reopening the page offers "Continue editing" or "Discard".
- A short guide opens the first time and stays available under Help.
- Click any text to change it. Selecting text shows a small toolbar with bold, highlight (red) and bullet list. The toolbar is Quill 2.0.3 (BSD-3-Clause), inlined from
- Save writes a copy of the page (
…-edited.html) with the editedmanual.jsonembedded.build-manual.mjs --import <edited.html> <manual.json>reads it back (the old draft is kept as.bak), and workflow Step 0 imports a user-edited copy before anything else, so the next version keeps the users' edits. - New
manual.jsonkeys written by the edit mode: stepimage(a pasted screenshot, drawn instead ofscreen), calloutoffset/pos, top-leveledited. Prose markup gains==highlight==and-bullet lines. - The page is about 480 KB instead of about 220 KB, because the editor is inlined.
Added —
program-to-manual: Excel worksheet screens- A screen with
"kind": "excel"is drawn as an Excel worksheet: title bar with the file name, formula bar, column letters, row numbers, the note row, header cells in the template's own fill colours, data rows and the sheet tab. Use it for steps the user performs inside an upload template, instead of an SAP grid. Anchors:col:<name>,row:<n>,note,sheet,title. - Workflow Step 2 reads a user-supplied upload template (header row, fill colours, note cells); mockup rows stay invented.
Changed —
program-to-manualbuilds an English companion by default- After the main-language manual is confirmed, Step 8 translates it into
<PROGRAM>-en.manual.jsonand builds…-en.htmlwith its own revision history. Screens, anchors, sample values, SAP identifiers and message texts stay unchanged. It is skipped when the manual is already in English or the user opts out.
- The manual page has an Edit button. Key users change the finished manual like a slide deck, with nothing installed and nothing loaded from the network:
Features 8, Changed 12
Notes
Added —
program-to-manual: an end-user manual for one program- New skill
/sc4sap:program-to-manualwrites the manual a business user follows, as one self-contained HTML file. On screen it is a web document with a contents sidebar; printed or saved as PDF, every scenario step starts a new A4 landscape page, and the confidentiality notice repeats at the foot of each page. - The body is organised by usage scenario. Each step shows the screen it happens on (selection screen, output ALV, popups and follow-up screens), drawn from the source with the
program-to-specrenderer, with numbered callouts on the fields, radio options, buttons and columns the user touches. The same numbers head the step's instruction list. - Each scenario ends with check points taken from the source (mandatory inputs, selection-screen checks, confirmation popups, processing that cannot be undone). The manual also has a field reference, a table of messages with their cause and the action to take, a glossary, and a revision history that numbers versions automatically.
- A module consultant drafts the business context. The skill asks the user about at most three statements it could not confirm from the source, and marks any that stay unconfirmed with a "to be confirmed" badge.
- Author, team, company and the confidentiality notice are asked once and stored in the active profile's
config.jsonundermanual(scripts/manual/manual-config.mjs). - A small screen (a confirmation popup) keeps its natural size instead of stretching to the page width.
- A screen image drawn smaller than its natural size (a wide grid) opens at full size on click and scrolls sideways; a second click closes it. Print keeps the fitted size.
scripts/manual/build-manual.mjsbuilds the page. It warns about callouts that point at something not drawn on their screen (and lists what is drawn), scenarios without check points, and English prose in a Korean or Japanese manual.
Changed — screen mockups are drawn in SAP Signature
- Selection screens, output screens and popups in
program-to-specandprogram-to-manualimages now look like SAP GUI's Signature theme. They have the Signature title area with a bold italic title, a flat application toolbar, group boxes with a header strip, and a square ALV grid with a grey header, ruled cells and tinted key columns ("key": true). The screen background is the blue-grey of the default colour scheme. The colours were sampled from real SAP GUI screenshots. "theme"inimage-spec.jsonormanual.json, or"screenTheme"in the profileconfig.json, picks the look:signature(default),signature-pink(the pink system colour scheme),modern(the earlier look, unchanged) or a palette of your own ({ "base": "signature", … }).selection.titledraws the program title above the selection screen.- A dialog box (
"modal": trueon a screen:CALL SCREEN … STARTING AT, status type P,POPUP_TO_CONFIRM) is drawn as SAP draws it. Its application toolbar sits at the bottom edge with the buttons flush right, and the popup has a window frame. /sc4sap:sap-optionsets the theme per SAP system ("screen theme", newskills/sap-option/screen-theme.md) and shows it in the status snapshot.scripts/spec/screen-theme.mjs get | set | resetvalidates names and custom#RRGGBBpalettes and writes the profileconfig.jsonatomically.
Changed — screen mockups carry callout anchors
screen-image-renderer.mjswraps selection rows, radio options, toolbar buttons, GUI status and ALV buttons, dynpro elements, column headers, and screen and pane titles in<g data-anchor="…">. The wrapper draws nothing, soprogram-to-specimages are unchanged.- Selection screens can show a block nested inside another block (
BEGIN OF BLOCK … WITH FRAMEinside a block). Write it as a{ "type": "frame", "label", "items" }item at its place in the outer block. It is drawn as an inner border with its title on the top edge, and its fields line up with the fields of the outer block. Before, a nested block had to be flattened into a separate top-level block. Applies toprogram-to-specandprogram-to-manual. - Button
iconalso takes the SAP icon name from the GUI status or ALV toolbar (ICON_TRANSPORT,ICON_OPERATOR, …). It is drawn with the matching glyph, and an SAP icon with no glyph draws none instead of its name. - A wide ALV grid is no longer cut off. The canvas stopped at 1600px, and columns past it were dropped without a warning. It now grows with the grid, and toolbars and screen fields still wrap within 1600px.
- ALV column headers no longer run into the next column: a narrow column is widened for its header (up to 120px) and a header that still does not fit ends with "…". A cell whose value is
red,yelloworgreenis drawn as a status lamp, as SAP shows traffic-light and LED icon columns. - Output screens can show the ALV grid title (
SET_GRID_TITLE/ layoutgrid_title) as a bar above the grid, set withalv.gridTitle(and onscreens[]). - A screen with a
screenblock but nocolumnsorpanes(a confirmation or input popup) is drawn with its title, buttons and fields only. Before, an empty grid was drawn under it.
- New skill
Features 4, Fixes 3
Notes
Added —
program-to-specdocuments every screen, not only the main ALVimage-spec.json.screens[]draws each further dynpro — popups, detail screens — asscreen-<dynnr>.png, with the same shape asalv(GUI status title and buttons, grid toolbar, columns, sample rows). Buttons on those screens are checked like main-screen buttons, and a popup's confirm button can join the flow of the button that opened it throughcodes.alv.screen.fieldsdraws the dynpro elements between the GUI status and the grid: input fields, checkboxes, output-only text and push buttons. A push button sends a PAI function code, so it carries a flow badge like a status button.- The skill now reads
GetScreenfor every dynpro except the selection screen and writes one subsection per screen: its image, what calls it, and a PBO / PAI table built from the flow logic (every PBO module, every PAI function code,AT EXIT-COMMAND, value-request modules). A screen element is no longer described as "inferred" before its dynpro has been read. - The xlsx template has no slot for further screens;
build-spec.mjsskips them.
Fixed — flowchart layout
- A tall message node (a long list of messages) overlapped the message node above it or ran off the top of the image. Its decision now moves down until the message node clears, and several message nodes of one decision stack with bent connectors.
- The label of a loop-back line along the right edge was cut off at the image border. It now stays inside the image.
- Checked on a real report with a main ALV screen, three popups and a push button on the screen: no render warnings, every screen drawn.
Features 5, Changed 3, Fixes 3
Notes
Added —
program-to-specdraws output-screen buttons and one business flow per button- The ALV image (xlsx Sheet 3 and MD/HTML §3.2) now shows what a user can press:
image-spec.json.alv.screendraws the GUI status title and its application toolbar (PAI function codes),alv.toolbar/panes[].toolbardraw the ALV grid toolbar, andstandardToolbaradds the generic ALV icons. buttonFlowsdraws one business flow per button that changes data or starts processing (flow-<n>-<CODE>.png, embedded in MD/HTML §4.2). The button in the ALV image carries the same number as an orange badge. The main process flow now stops at the ALV output and points to the button flows.codes[]on abuttonFlowsentry lets one flow cover a whole business stage — its online, batch and cancel buttons, and a button on the other toolbar ({ "code", "source" }). All of them carry the flow's badge, so a screen with ~30 function codes needs ~10 flows.render-md-images.mjsandbuild-spec.mjswarn about business buttons without a flow, flows without a button, codes claimed twice and malformedcodes. Navigation buttons opt out with"flow": false. The xlsx keeps the badges; the template has no slot for the flow images.- New
skills/program-to-spec/alv-buttons-schema.md: how to inventory PAI and ALV buttons, the JSON shape, stage grouping and where the flows go in the spec.
Changed —
program-to-specHTML output and message referencesmd-to-html.mjsbuilds a web page instead of a plain document: contents sidebar with section folding, cover fact card, cross-linked SAP names with tooltips, sortable / filterable tables, callouts, and an All / Functional toggle that hides technical detail. Newskills/program-to-spec/html-markup.mdlists the Markdown conventions the page reads ([!WARNING]callouts,<span class="tech">,<!-- audience: technical -->).- Text elements are read in English (
language: "E") whatever the spec language; a program often has no text pool in it. - Every message is written as
CODE (English text)—M07 (Already FD Done),E01 (IR amount is different from SO.)— in prose, tables and flow images. Message class texts come from T100 throughGetSqlQuerywith explicit fields, the one table read the skill now allows. On BASIS < 7.50, whereGetSqlQueryis unavailable, theWITHtext in the source is used.
Fixed
- Flowcharts: a decision with several branches that skip nodes (a three-way "which button?") drew all their labels on one spot, so only the last one was readable. Each extra branch now leaves on its own row with its own label.
md-to-html.mjsheld literal NUL bytes, so git treated it as a binary file. It now uses\u0000escapes.- Checked end to end on two real ALV cockpit reports (8 and 29 function codes): no render warnings, a badge on every business button.
- The ALV image (xlsx Sheet 3 and MD/HTML §3.2) now shows what a user can press:
Fixes 7
Notes
Fixed — hooks, skill frontmatter and manifests checked against Claude Code 2.1.285
setup-init/setup-maintenancewere registered underSessionStartwith the matchersinit/maintenance, which belong to theSetupevent, so they never fired. They are nowSetuphooks and run onclaude --init-only,claude -p --initandclaude -p --maintenance. Setup output does not reach Claude, so both print a plain-text summary instead ofadditionalContext.PreCompactaccepts only a top-leveldecision, so the contextpre-compact.mjsandproject-memory-precompact.mjsinjected was dropped. Both are removed.SessionStartalready runs again after a compact;project-memory-session.mjsnow also carries recent transports and recent objects.- Skills ended with
Task: {{ARGUMENTS}}, which is not a substitution. They now use$ARGUMENTS. - Skill frontmatter: removed the unrecognised
level:key;name:no longer repeats thesc4sap:prefix (Claude Code adds it, commands are unchanged);trust-sessiondeclaresuser-invocable: falseinstead of the unrecognisedinternal: true, so a typed/sc4sap:trust-sessionis refused by Claude Code itself. - Manifests: removed
statusLinefromplugin.jsonandexamplesfrom the marketplace entry (both stripped at load; the HUD status line is still installed intosettings.jsonbyinstall-statusline.mjs).claude plugin validatenow passes without warnings. - Docs: agent count 25 → 26 (CBO Stocker), skill count 14, missing
package-to-processrow and broken table-of-contents anchors in README / FEATURES (en, ko, ja, de). - Removed the empty
rules.md.
Fixes 6
Notes
Fixed —
program-to-specselection-screen mockup dropped buttons and radio buttons- The Selection PNG (xlsx Sheet 3 and MD/HTML §3.1) could only draw input fields and checkboxes in two fixed blocks. Push buttons, toolbar buttons and extra blocks were dropped, and radio groups were drawn as checkboxes, although the analyst had already extracted them into the Parameters table.
image-spec.json.selectionnow takesblocks[](one perSELECTION-SCREEN BEGIN OF BLOCK) with typed items:param,range(noIntervals,noExtension),checkbox(labelLeft),radioGroupandcheckboxGroup(labelfor a leadingCOMMENT, vertical or horizontal layout),pushbutton,comment, plustoolbarforFUNCTXT_nnbuttons.default/defaultHighare drawn inside the input box.- New
skills/program-to-spec/selection-schema.mdgives the ABAP → JSON transcription rules: one item per field (no merging), defaults followed into methods called fromINITIALIZATION, dynamic fields kept with a note,NO-DISPLAYfields and theirCOMMENT … FOR FIELDomitted. - The legacy
fields/optionFieldsshape still renders.build-spec.mjsandrender-md-images.mjsprint a⚠warning when they see it or when anR_*field sits inoptionFields. - Rendering changes: plain
PARAMETERSno longer show a multiple-selection ▼ button (onlySELECT-OPTIONSdo). Checkboxes sit in the label column as on a real screen. Long notes widen the image instead of being clipped, and long defaults are cut with…. - Checked against three real selection screens (push button + three radio groups; titled radio and checkbox lines; seven blocks with dynamic fields).
Changed 4
Notes
Changed — main-thread model now follows the session (
model: inherit)- The remaining 12 skills declared
model: sonnet(analyze-code, analyze-symptom, analyze-cbo-obj, compare-programs, create-object, create-program, package-to-process, program-to-spec) ormodel: haiku(mcp-setup, sap-doctor, sap-option, trust-session). All 14 skills now declaremodel: inherit. - Why: a host that opens a session on a chosen model (e.g. an Agent SDK app) applies a skill's
model:as a switch, so the pin replaced the user's choice. The prompt cache is per model, so each switch also re-wrote ~26–46k tokens of cached context. Measured through an Agent SDK host:ask-consultantpinned to Haiku cost 0.28 of it the re-write), and $0.09 withinheriton a Haiku session;analyze-codepinned to Sonnet cost more on a Haiku session than on a Sonnet one. trust-sessionruns inside twelve other skills, so a pin there switched the model twice per pipeline.- Work that needs a specific tier already runs in
Agent(...)dispatches with their own model; those are unchanged. The per-skill session-model suggestion moved todocs/skill-model-architecture.md§ 2 as guidance. A preference-driven main-thread pin is not offered: frontmatter is applied before the skill body runs, so a runtime setting cannot change it.
- The remaining 12 skills declared
Features 3, Changed 8, Fixes 3
Notes
Added — user-selectable model dispatch mode
- New option
modelDispatchin~/.sc4sap/preferences.json, edited via/sc4sap:sap-option→ "dispatch".auto(default) keeps the current behavior: sub-agent models followcommon/model-routing-rule.mdand the skill MDs.user-definedmakes every multi-agent skill ask Opus / Sonnet / Haiku before each dispatch group, with the rule-based choice marked(Recommended). - A parallel fan-out counts as one group (one question); an escalation after
BLOCKEDasks again. Phase banners mark user-chosen models with(user). - Rules:
common/model-dispatch-mode.md. The setting is user-level, so it applies to every profile and project, and needs no MCP reconnect.
Fixed — HUD cost used stale prices
- The HUD price table billed Opus 4.6 / 4.7 at 75 per MTok (actual 25) and had no entry for Opus 5 / 5.5, Sonnet 5 or Fable 5 / 5.1, which fell back to Sonnet 4 rates. Added the current models, per-model cache-read prices (Opus 5.5 0.25) and family fallbacks so a newly released version gets its family's price instead of Sonnet's.
- Cache writes were always priced at the 5-minute rate (1.25× input). Claude Code writes 1-hour cache entries (2× input);
costOf()now prices them fromusage.cache_creation.ephemeral_1h_input_tokens. scripts/ci/diagnose-failure.mjsdefaults toclaude-sonnet-5(wasclaude-sonnet-4-6).
Changed — agents follow the newest model of each tier
- Agent frontmatter pinned
claude-opus-4-7/claude-sonnet-4-6/claude-haiku-4-5, so dispatches kept running on those versions after newer models shipped. All 26 agents now use the Claude Code aliasesopus/sonnet/haiku, which track the newest model of each tier. ask-consultantandsetupnow declaremodel: inheritinstead ofhaiku. Their main thread routes, checks consultant divergence, reviews the synthesis or triages setup failures, which Haiku handles poorly. Claude Code documents a skill'smodel:as a per-turn switch; the current CLI registers the switch but still answers on the session model, so this guards against the switch starting to apply.- Phase banners, response-prefix examples and docs name the tier (
Opus/Sonnet/Haiku) instead of a version. The response prefix still reports the answering model's full name, read at runtime.
Changed — reasoning effort per agent
sap-stockerandsap-doc-specialistseteffort: medium(lookup / inventory work). Every other agent keeps Claude Code's per-model default (observedhighfor Sonnet,xhighfor Opus 4.7);sap-writergets none because its Haiku base does not accept effort andcreate-programPhase 3 reuses it on Opus. Policy:common/model-routing-rule.md§ Reasoning effort.
Changed — teamMode deliberation no longer uses Claude Code agent teams
- teamMode in
ask-consultant,compare-programs,create-program(Type A / B / D) andanalyze-code(Type B) calledTeamCreate, passedteam_nameand sentshutdown_requestmessages. Claude Code no longer hasTeamCreateand ignoresteam_name, and the consultant / reviewer agents cannot write the position files the protocol asked for (Write/Editare disallowed). - Members now return their POSITION / CHALLENGE / REFINEMENT / CONCUR / ESCALATE block as their reply, and the orchestrating skill writes it to the same
~/.claude/tasks/<run-id>/files as before, so the synthesis steps are unchanged. Each round is a fresh parallel dispatch with peer blocks inline; there is no shutdown step. A malformed block is re-requested once. - Block format is fixed (bare TYPE line, plain
field: valuelines,target= member name). Cosmetic drift is normalized by the lead instead of re-requested. When two members each adopt the other's stance on the same point, the lead records aLEAD RESOLUTION. The lead checks the synthesis writer's output against the task files before showing it. - Rules:
common/team-consultation-protocol.md§ Transport. Design:docs/team-consultation-architecture.md.
- New option
Changed 3
Notes
Changed —
sap-executorcarries 92 SAP tools instead of 142- Sub-agents load the full schema of every tool in their
tools:list on each dispatch (no deferred loading there). Dropped fromsap-executor: the 25Delete*tools (deletion needs a per-call user approval, so it belongs on the main thread), 16Read*duplicates ofGet*tools (ReadClass/ReadProgramstay), and unit-test / CDS unit-test authoring, metadata extension and package tools. A minimal dispatch went from 71.4K to 59.7K tokens. - Added
ActivateObjects,WriteTextElementsBulkandReadTextElementsBulk, whichcreate-programandcreate-objectalready told the executor to call but it did not have. Checked with acreate-objectrun on DEV (data element in$TMP: create → activate viaActivateObjects→ verify). - Vendor pin:
ea0de8c(4.8.7) →9a948be(4.8.8, shorter tool parameter descriptions).
- Sub-agents load the full schema of every tool in their
Changed 4, Fixes 2
Notes
Fixed — table reads returned values in the wrong rows (vendor 4.8.7)
GetTableContents/GetSqlQuerymerged an empty cell with the next one, so every later value in that column moved up one row. Customizing and SPRO data pulled byextract-customizations.mjs/extract-spro.mjsfrom tables with empty cells may hold shifted values — re-run the extraction after updating.GetProgFullCodenow reads function groups (it returned metadata XML) and resolves nested includes.
Changed — smaller MCP responses
SearchObjectdrops the duplicated raw XML (over half of each response) and defaults to 50 results;GetTableContentsreturns column names only, leaves empty cells out of rows and defaults to 20 rows (fields/include_metadatawhen more is needed).- Source tools (
GetProgram,GetClass,GetInterface,GetFunctionModule,GetInclude,GetProgFullCode) acceptoutput: "file": the source goes to.sc4sap/work/<alias>/mcp-output/src/and the response is the path plus an outline of METHOD / FORM / MODULE blocks with line ranges (a 66 KB class → ~3 KB). The bridge setsMCP_OUTPUT_DIRto that folder per profile; the server refuses file writes outside it. analyze-symptomreads large classes / programs through the file outline and only the block around the termination line;compare-programsgreps the files instead of reading every line, and no longer askssap-code-reviewerforReadClass/ReadFunctionGroup/ReadView, which it does not have.- Vendor pin:
9e6e216(4.8.6) →ea0de8c(4.8.7).
Changed 5, Dependencies 4, Other
Notes
Changed —
analyze-symptomspends less context per round- Dump reads sized to need (measured on an S/4HANA dump): dumps feed
RuntimeListFeeds(~1 KB per dump) replacesRuntimeListDumps, which returned an empty list on that system;RuntimeGetDumpByIdmetadata (~7 KB: error, exception, termination link) comes first; the ~50 KB formatted dump is read at most once and only its developer chapters (~10 KB) are used.RuntimeAnalyzeDumpand thesummarykey facts are no longer used — they pick the wrong chapter ("System environment", unrelated line).sap-debuggergainsRuntimeListFeeds. - Sonnet for
quick-dump, Opus forfull. A quick-dump round that cannot settle the cause returnsBLOCKED — needs fulland is re-dispatched on Opus with its findings, so nothing is fetched twice. - Type C team mode removed (debugger + BC + module consultants on Opus for up to three rounds; never runtime-validated). Open business questions become a one-line
/sc4sap:ask-consultantsuggestion in the report. - Narrower reads: web lookup only when the failure point is standard SAP code; one failing include read with tools the debugger actually has (
GetInclude/GetProgram/GetClass/GetFunctionModule, neverGetProgFullCode);GetTransportonly for transports holding call-stack objects (max 3); customization cache grepped by name instead of read whole; list callstop ≤ 5; later rounds reuse prior evidence. SKILL.md199 → 161 lines (duplicated tool inventory replaced by a pointer to the dispatch prompt).
Changed — vendor pin bumped to abap-mcp-adt-powerup 4.8.6
scripts/build-mcp-server.mjs—DEFAULT_PINNED_SHAmoves fromdfc96de(4.8.5) to9e6e21635e032dbfb38aec474c3125d2a8516dbe(4.8.6):RuntimeGetDumpById/RuntimeAnalyzeDump: key facts from the dump root and termination link (they pointed at the "System environment" chapter before); newchaptersfilter for the ST22 long text (51.5 KB → 3.4 KB on a real dump), used byanalyze-symptom.RuntimeListDumps: per-entry HTML summaries dropped by default (−88%).- RFC backend resolved per call;
SAP_RFC_BACKEND=zrfcnow works (it was offered by setup / sap-option but rejected by the server). pino/pino-prettyno longer skipped bynpm install --omit=dev— fresh installs and the bridge self-heal failed with "Vendor dependency missing: pino" on 4.8.5.
Refresh path for existing installs:
node scripts/build-mcp-server.mjs --update.Version
All four version fields bumped 0.6.20 → 0.6.21.
- Dump reads sized to need (measured on an S/4HANA dump): dumps feed
Features 6, Changed 4, Fixes 2, Other
Notes
Changed —
analyze-symptomis read-only and checks known issues first- Never calls SAP write tools (Create/Update/Delete/Patch/Write/Activate, RunUnitTest, RuntimeRun*/RuntimeCreate*, CreateTransport) and never edits files outside teamMode protocol files — even when asked for the fix. Fixes appear only as a "Proposed fix — not applied" block; Step 4 gives pointers instead of applying them.
- Round 1 starts with a short web lookup for dumps / error messages (≤ 2 searches, ≤ 1 fetch) built from standard identifiers only — never Z*/Y* names, SID, user IDs or data. Hits are reported as leads under "🌐 Known Issues".
- Profiler: existing traces are analyzed; no run is started and no trace parameters are created.
sap-debugger: when the dispatching skill names a report format, that format wins over the agent's default template.
Added — HTML output (new
scripts/spec/md-to-html.mjs)Zero-dependency converter: one self-contained
.htmlfrom a skill's.md(local images inlined as data URIs,```mermaiddrawn by the Mermaid CDN script, YAML frontmatter as a table, GitHub-style heading ids).program-to-spec— output formats are a multi-select (Markdown / HTML / Excel); HTML is converted from the.md, and the intermediate.mdis removed when Markdown was not selected.package-to-process—formats[]multi-select for the process document and the BPML (default Markdown + Excel);build-bpml.mjsgains an.htmlmode. The process document has no Excel form, so an Excel-only choice keeps its.md.
Added — HTML option for the remaining Markdown-producing skills
Every skill that writes a Markdown document for people can now also give a single self-contained HTML file, converted from the same
.mdbyscripts/spec/md-to-html.mjs(images inlined, Mermaid via CDN):compare-programs— Step 2 reply takeshtml(Markdown + HTML) orhtml only; follow-up menu offers an HTML copy later.analyze-code— the Step 4 "save report" action writes Markdown, HTML or both.analyze-cbo-obj— Step 8 offersindex.htmlbesideindex.md(index.md/inventory.jsonalways stay for sibling skills).create-program— after Phase 8, offers HTML copies ofspec.mdandreport.md(the.mdfiles stay as pipeline state).
Fixed — SubagentStop loop and agent reference files
scripts/verify-deliverables.mjsreadoutput/result, which SubagentStop never sends, so every agent looked empty ("produced minimal output (0 chars, expected 50+)") and was woken again. It now readslast_assistant_message, skips when the field is absent orstop_hook_activeis set, and matches plugin-namespaced agent types (sc4sap:sap-…).agents/agent_details/bc/*moved toagent-refs/bc/*— files underagents/were being registered as agents (with all tools). References insap-bc-consultantandanalyze-symptom/team-mode.mdupdated.
Version
All four version fields (
package.json,.claude-plugin/plugin.json,.claude-plugin/marketplace.jsonroot &plugins[0]) bumped 0.6.19 → 0.6.20. Vendor pin unchanged (dfc96de, 4.8.5).Removed, Changed 3, Fixes 3, Dependencies 1, Other
Notes
Removed — hooks that never fired or only added noise
hooks/hooks.jsondrops from 22 hook commands to 14; for SAP MCP tool calls, onlypermission-approverstill runs on each call.Script Why it went transport-validator,activation-trigger,project-memory-posttool,syntax-checkerMatched only mcp__mcp-abap-adt__*; the plugin's tools aremcp__plugin_sc4sap_sap__*, so they never firedkeyword-detectorRouted to skills that do not exist ( cancel,autopilot,ralph,release)skill-injectorScanned only top-level skills/*.md(skills live in sub-folders) for atriggers:key no skill haspersistent-mode(+ ralph/autopilot branches insession-start/session-end)Modes that no skill creates permission-handler,code-simplifierNever approved anything / off by default with a one-line message spro-injectorInjected 15–20 KB of module config on every keyword-matched prompt, no de-duplication; consultants load what they need themselves pre-tool-enforcer,post-tool-verifierGeneric tips on every tool call; false "Command failed" on normal output containing "failed" / "error" run.cjsWrapper that spawned a second node process per hook — hooks now run node <script>directlytests/validation/plugin-structure.test.tsnow asserts that every hook command points at an existing script instead of a minimum event count.Changed — lighter agent context
- Tier 1 is three files (
data-extraction-policy,sap-version-reference,naming-conventions).context-loading-protocolandmodel-routing-ruleare orchestrator-only; every agent's<Mandatory_Baseline>now lists its files explicitly and carries the two rules it needs inline (expansion limit,BLOCKEDon a hard blocker). Saves about 18 KB per dispatch. - Module consultants read
configs/{MODULE}/*.mdon demand — only the file the question needs instead of all six up front (about 20–30 KB per consultant dispatch). - Report-only writer dispatches moved to the main thread —
create-objectStep 7,analyze-codeBranch B briefing,analyze-cbo-objBranch B briefing. Same section templates, no extra agent.
Fixed — stale docs
- Multi-profile paths:
common/spro-lookup.md,common/customization-lookup.mdand 17 agents now point at.sc4sap/work/<alias>/…(legacy.sc4sap/…fallback).sap-option,sap-doctor(Layer 1 active-profile check, Layer 6 defaultodata) andmcp-setupno longer describe the single-file.sc4sap/sap.envflow. create-object,analyze-code,analyze-symptom,compare-programs,analyze-cbo-objsaid the main thread runs on Haiku; their frontmatter has beensonnetsince 0.6.6 — wording corrected.program-to-spec: removed the deprecatedmode: "dontAsk"Agent parameter.
Fixed — HUD context window ignored the subscription plan
The
ctxsegment read its window from the pricing table, so models missing from it (e.g.claude-opus-5[1m]) fell back to 200K — a Max session at 633K rendered633K/200K(capped at 100%). Newscripts/hud/lib/context-window.mjsresolves it on its own:SC4SAP_CONTEXT_WINDOWenv > statusLine payload size >[1m]model id > model limit (Haiku, Claude 3, Opus/Sonnet 4.0–4.1 stay 200K) >claudeAiOauth.subscriptionTypein~/.claude/.credentials.json(max/team/enterprise→ 1M,pro/ other → 200K) > 200K.pricing.mjsno longer carries actxcolumn.Upstream dependency
abap-mcp-adt-powerup:SAP_RFC_BACKEND=zrfcwas offered by setup andsap-optionbut rejected by the runtime selector (src/lib/rfcBackend.ts) even thoughzrfcProxy.tsimplements the backend. The selector now routeszrfcto it. Needs a vendor release + pin bump before it reaches plugin users.
Version
All four version fields (
package.json,.claude-plugin/plugin.json,.claude-plugin/marketplace.jsonroot &plugins[0]) bumped 0.6.18 → 0.6.19. Vendor pin unchanged (dfc96de, 4.8.5).- Tier 1 is three files (
Fixes 3, Dependencies 2, Other
Notes
Fixed — tier readonly guard let four mutating tools through on QA and PRD
scripts/hooks/tier-readonly-guard.mjsmatched mutations by the prefixesCreate/Update/Deleteplus a three-entry runtime-execution set. Four registered tools that mutate SAP matched neither and were reachable on QA and PRD profiles:Tool What it does ActivateObjectsactivates ABAP objects PatchGuiStatusmodifies a GUI status WriteTextElementsBulkbulk-writes the text pool RuntimeCreateProfilerTraceParametersconfigures a server-side profiler trace Verified by running the hook as a real child process against an isolated project with
SAP_TIER=PRD: all four returned no decision (allow) before the change anddenyafter it, while six controls (Create*/Update*/Delete*/RunUnitTest/RuntimeRun*/GetProgram) were unchanged in both directions.Patch,WriteandActivatejoinMUTATION_PREFIXESas prefixes rather than literals — each matches exactly one registered tool today, so a future sibling is covered on the day it ships.Createstill matches bystartsWith, soRuntimeCreate*is not swept in and stays in the explicit runtime set.RuntimeCreateProfilerTraceParametersjoinsRUNTIME_EXECalongside theRuntimeRun*executions it configures.data/sc4sap-mcp-tools-write.mdgains the missingWrite*section. It already listedActivateObjectsandPatchGuiStatusas write tools, so the classification and the guard now agree.
No behaviour change on DEV — the guard returns
nullon its first line for that tier, confirmed for all ten probed tools. On QA/PRD nothing usable is lost: activation and text-pool writes are unreachable onceCreate*/Update*are denied, and profiler-trace setup pairs with runs that were blocked already.Known gap, deliberately left open and documented in code:
RuntimeCallDispatchinvokes an arbitraryZMCP_ADT_DISPATCHaction, and the action name is a runtime argument — so neither layer can separate a write action from a read one by tool name alone. Tracked separately.Gap originally spotted by the SC4SAP-PoC read-only tool policy; the profiler-trace tool and the
RuntimeCallDispatchnote were found while verifying that report.Changed — vendor pin bumped to abap-mcp-adt-powerup 4.8.5
The MCP server's
readonlyGuard.tscarried the identical two lists, so for these four tools neither layer of the two-layer defence blocked — while the hook still told the user the server guard was backing it up. Fixed upstream in the same shape and released as 4.8.5.scripts/build-mcp-server.mjs—DEFAULT_PINNED_SHAbumped from9fc6da6bf1b056edd29179edbc812e69f80c5363(4.8.4) todfc96de9201d8450cbc59062a8ab67de88788ddc(4.8.5).- Refresh path for existing installs:
node scripts/build-mcp-server.mjs --update.
Version
All four version fields (
package.json,.claude-plugin/plugin.json,.claude-plugin/marketplace.jsonroot &plugins[0]) bumped 0.6.17 → 0.6.18.Removed 3, Changed 7, Fixes 1, Other
Notes
Fixed — hook payload never reached hook scripts (all sc4sap hooks silently broken)
scripts/run.cjslaunched each hook script withexecFilebut never forwarded the parent's stdin — the hook payload JSON — to the child process. Every stdin-reading hook (skill-injector,keyword-detector,spro-injector,pre-tool-enforcer,transport-validator,post-tool-verifier,session-*, …) therefore blocked until its internalreadStdin()5s timeout fired and then ran with an empty payload. Under Claude Code's stricter per-hook timeout enforcement this surfaced asUserPromptSubmit hook timed out after 3s, leaving keyword / skill / SPRO injection non-functional.scripts/run.cjsrewritten fromexecFiletospawn(..., { stdio: 'inherit' }), wiring stdin/stdout/stderr straight through so hooks receive their payload and Claude Code receives their output. Per-invocation latency dropped from ~5.3s to ~0.3s; the 30s safety kill and clean exit-0-on-error behavior are retained. Affects every hook event (UserPromptSubmit, PreToolUse, PostToolUse, SessionStart/End, …).
Changed — trust-session permission model migrated to a PreToolUse hook
A Claude Code permission update deprecated the Agent tool's
modeparameter:mode: "dontAsk"is now ignored, and sub-agents inherit the parent session's permission mode (agent frontmatterpermissionModemay override it, but theredontAskmeans auto-DENY, not auto-approve).trust-session's Layer 2 — passingmode: "dontAsk"on everyAgentdispatch — was therefore fully non-functional, and pipeline sub-agents began prompting mid-run.- New PreToolUse hook
scripts/permission-approver.mjs(wired inhooks/hooks.json, matchermcp__plugin_sc4sap_sap__.*|mcp__mcp-abap-adt__.*) returnspermissionDecision: "allow"for all SAP MCP handlers exceptGetTableContents/GetSqlQuery, which fall through to normal prompting plus theblock-forbidden-tablessafeguard. The hook runs in both the main thread and sub-agents, independent of session permission mode, so SAP MCP calls are auto-approved without the deprecated parameter. skills/trust-session/SKILL.mdrewritten: no longer enumerates SAP MCP tools insettings.local.jsonand no longer referencesmode: "dontAsk"; it now only pre-approvesAgent(*)dispatch and.sc4sap/**state-file I/O, and documents the hook as the SAP MCP approval mechanism.- Removed the now-ignored
mode: "dontAsk"directive from 22 skill files acrosscreate-program,create-object,analyze-cbo-obj,analyze-code,analyze-symptom,compare-programs,package-to-process,ask-consultant, andsetup. (program-to-specis owned by another contributor and was left untouched.)
Reference: hooks
permissionDecisionoutput (code.claude.com/docs/en/hooks); sub-agent permission modes (code.claude.com/docs/en/sub-agents).Changed — setup wizard
SAP_SYSTEM_TYPEvalues renamedThe setup wizard's system-type question (Step 4 profile creation) now offers
s4hana | cloud | eccinstead ofonprem | cloud | legacy, giving a clearer SAP product/deployment taxonomy (s4hana= S/4HANA on-prem,cloud= S/4HANA Cloud,ecc= ECC). The field is a descriptive label with no behavioral branching, so the rename is low-risk.scripts/sap-profile-cli.mjs— new-profile default'onprem'→'s4hana'.scripts/sap-option-tui.mjs— validator['onprem','cloud','legacy']→['s4hana','cloud','ecc'].skills/setup/wizard-step-04-profile-creation.md,skills/sap-option/SKILL.md,skills/sap-option/migration.md— documented values + example updated.- Note: existing profiles carrying the old value keep working; re-save via
/sap-optionexpects the new values.
Removed —
deep-interview,team,releaseskills (OMC leftovers)Three skills carried over from the original oh-my-claudecode base were retired.
deep-interviewandteamwere generic OMC orchestration leftovers;release(CTS transport release workflow) is no longer needed. TheteamModefeature woven intocreate-program/compare-programs/ask-consultant/analyze-symptom/analyze-code(andcommon/team-consultation-protocol.md) is a separate, sc4sap-native capability and is retained — only the standalone/sc4sap:teamskill was removed.- Deleted
skills/{deep-interview,team,release}/. - Registration updated:
.claude-plugin/plugin.json+marketplace.jsondescriptions and skill count (17 → 14 workflow skills);CLAUDE.mdskill list;docs/FEATURES.md(+ ko/ja/de) table rows and sections;tests/validation/skills.test.tsexpected-skills list. - Cross-references to the removed skills cleaned from
common/model-routing-rule.md,common/active-modules.md,skills/trust-session/SKILL.md,skills/compare-programs/SKILL.md,skills/ask-consultant/SKILL.md,skills/create-object/SKILL.md(+dispatch-prompts.md), andskills/create-program/SKILL.md. (program-to-specis owned by another contributor; its staledeep-interviewcross-reference was left untouched.)
Version
All four version fields (
package.json,.claude-plugin/plugin.json,.claude-plugin/marketplace.jsonroot &plugins[0]) bumped 0.6.16 → 0.6.17.Features 4, Changed 2, Other
Notes
Added — BPML deliverable for
package-to-processpackage-to-processgains a second deliverable alongside the process.md: a BPML (Business Process Master List) in Excel and/or Markdown.scripts/spec/build-bpml.mjs(new) — zero-dependency OOXML/Markdown builder. CLI:node scripts/spec/build-bpml.mjs <bpml.json> <out.xlsx|out.md>; output format follows the extension. Emits a localized overview sheet plus an always-EnglishBPMLsheet, and per-L1 flow sheets with embedded sequence images anchored at column A.skills/package-to-process/bpml-render.md(new) — Step 6b render contract: BPML spec-JSON schema, builder CLI, output paths, and language rules. Intermediate spec JSON is kept under_img/for regeneration.skills/package-to-process/SKILL.md/workflow.md— new Step 1-6b bundledAskUserQuestioncollects output language (ko / en / ja / other, defaulting to the detected conversation language) and BPML format (xlsx/md/both). Language now applies to both the process.mdand the BPML; sheet 2 staysBPMLin English as lingua franca.scripts/spec/screen-image-renderer.mjs— extended to supply the flow images the BPML sheets embed.
Changed
- BPML workbooks no longer contain intra-workbook hyperlinks (user decision);
std_cbocolumn widened to a minimum of 12. - Removed a stray
CHANGE_ME.xlsxbuild artifact from the repo root.
Version
All four version fields (
package.json,.claude-plugin/plugin.json,.claude-plugin/marketplace.jsonroot &plugins[0]) bumped 0.6.15 → 0.6.16.Features 3
Notes
Added —
package-to-processskill (End-to-End business-process documentation)New workflow skill
skills/package-to-processreverse-engineers a CBO package into an E2E business-process Markdown: auto-detected TCode entry points → AI process grouping (PR→PO→GR→IR style) → per-process narrative + Mermaid flowchart + sequenceDiagram + step tables. Auto-chainssap-stockerwhen CBO inventory is missing. Registered acrossCLAUDE.md,.claude-plugin/marketplace.json+plugin.json(16 → 17 workflow skills), and both READMEs.skills/package-to-process/—SKILL.md,workflow.md,dispatch-analyst.md,dispatch-stocker.md,dispatch-writer.md,document-template.md,grouping-heuristics.md.
Added — diagram image pipeline (program-to-spec v12 / diagrams v13)
program-to-specv12 — branching flowchart + Markdown image embedding;scripts/spec/render-md-images.mjs(new).- diagrams v13 —
screen-image-renderer.mjsgainsrenderSequenceDiagramSVG/renderProcessMapSVG(high-quality PNG sequence diagrams with lifelines, sync/return arrows, alt/opt/loop frames; macro process DAG with longest-path layering). Selection / ALV mockups restyled to the v13 look (rounded drop-shadow frames, solid header bar).scripts/spec/render-process-images.mjs(new) drives the package-to-process diagram image pipeline.
Features 6
Notes
Added — ECC DDIC read + classic BAdI lookup (server-side bridge FMs)
Vendor pin bumped to abap-mcp-adt-powerup
4.8.4(9fc6da6). Adds 4 new ECC-only ADT capabilities that legacy ECC 7.40 does not expose natively:GetTable/GetStructure/GetDataElement/GetDomainnow return full definitions on ECC via OData FunctionImports → server-side RFCs (ZMCP_ADT_DDIC_TABL_READ,_DTEL_READ,_DOMA_READ).TABL_READcovers both Table and Structure (TABL/STRU share the TABL DDIC category).GetBadiImplementations— new read-only handler that finds Z/Y implementations of a classic BAdI definition viaZMCP_ADT_DDIC_BADI(SXS_ATTR-based). Returnskind=classicwith implementation list (impl_name,impl_class,package,methods_redefined) orkind=unknownfor kernel BAdIs / non-existent definitions.
Server-side ABAP source (DEV-only, function group
ZMCP_ADT_UTILS,$TMP) is bundled underabap/:abap/zmcp_adt_ddic_tabl_read_ecc.abapabap/zmcp_adt_ddic_dtel_read_ecc.abapabap/zmcp_adt_ddic_doma_read_ecc.abapabap/zmcp_adt_ddic_badi_ecc.abap
scripts/build-mcp-server.mjs—DEFAULT_PINNED_SHAbumped from244928a19b252e53e4105c550df0b891b1685de5(4.8.3) to9fc6da6bf1b056edd29179edbc812e69f80c5363(4.8.4). Refresh path for existing installs:node scripts/build-mcp-server.mjs --update.Dependencies 3
Notes
Fixed — vendor pin bumped to abap-mcp-adt-powerup 4.8.3 (resolves issue #43)
brokerFactory.jsin vendor 4.8.1 (commitb41d4df) readSAP_PASSWORDdirectly from.envand used the literalkeychain:<service>/<account>reference string as the Basic Auth password — bypassingprofile.js'sresolveSecret(). Every ADT tool call returnedAnmeldung fehlgeschlagenfor profiles using keychain-stored credentials.ReloadProfiledid not help (broker session store cache survivedinvalidateConnectionCache). The upstream fix landed in 4.8.3 (244928a) — both Variant 2 (createBrokerWithEnvFileStore) and Variant 3 (loadEnvFileIntoSessionStore) now resolvekeychain:references before seeding the session store.scripts/build-mcp-server.mjs—DEFAULT_PINNED_SHAbumped fromb41d4df546e2cccfa3f6693b656e16868b6facb6(4.8.1) to244928a19b252e53e4105c550df0b891b1685de5(4.8.3). 4.8.2 (transport handler hybrid read + parser + MIME fix) is also picked up by the bump.- Refresh path for existing installs:
node scripts/build-mcp-server.mjs --update. Verifies HEAD matches the new SHA + reinstalls vendornode_modules(deps unchanged 4.8.1 → 4.8.3, but reinstall is idempotent and cheap). - Workaround documented in issue #43 (plaintext
SAP_PASSWORDin~/.sc4sap/profiles/<alias>/sap.env) is no longer needed after the bump.
Reported by @icharmi-byte. Verified locally on profile HKT-DEV.
Features 8, Fixes, Other
Notes
Added — Phase 1B execution-style user choice (create-program, Type D gating)
Type D (Phase 1A↔1B Interview Synthesis) now activates only when the user explicitly chooses it. Immediately after Phase 1A close (
module-interview.mdfinalized, business ambiguity ≤ 5%), the skill prompts a binary choice: (1) Legacy sequential 7-dimsap-analyst+sap-architectinterview (one question per turn), or (2) Type D team synthesis — analyst + architect + 1-2 consultants composeinterview.mddirectly via R1 POSITION + optional R2 REFINEMENT rounds. Previous auto-gating based onmodule_set.length ≥ 2is replaced with a recommendation heuristic that only fires when the user defers with "알아서" / "you decide". Persists to.sc4sap/program/{PROG}/state.json→phase1b.execution_style(legacy|type-d).skills/create-program/team-mode-d.md— §Gating rewritten: user-choice prompt + recommendation heuristic + persistence schema (+39 lines, 85 → 114)skills/create-program/agent-pipeline.md— "Phase 1A → 1B Execution-Style Gate" section inserted between Phase 1A and Phase 1Bskills/create-program/interview-gating.md— execution-style gate reference added at Phase 1A close enforcement lineskills/create-program/SKILL.md—<Team_Mode>block clarifies Type D is user-chosen, not auto-gated
Added — program-to-spec conforms to skill-model-architecture + team-consultation docs
program-to-specwas the 13th user-facing skill but missing fromdocs/skill-model-architecture.md§ 2 (which claimed "12 user-facing skills") and lacked the standard block conventions (Response_Prefix, Phase_Banner, Team_Mode, Session_Trust_Bootstrap, Agent_Composition) thatcompare-programsand other Sonnet-main skills carry.skills/program-to-spec/SKILL.md— frontmattermodel: sonnet+ 5 standard blocks (145 → 178 lines).Agent_Compositioncodifies:sap-analystOpus for Step 3 narrative extraction,sap-writerHaiku base for L1/L2 (Sonnet override for L3/L4 depth),sap-criticOpus for L4 line-range verification gate.skills/program-to-spec/workflow-steps.md— Phase Banner emission added at Step 3 dispatches (3.analyst / 3.writer / 3.critic)docs/skill-model-architecture.md— scope updated to "13 user-facing skills", §2 table row added, §3 dispatch map sub-section added, Pattern 3 override example (sap-writer→ Sonnet for L3/L4 specs) addeddocs/team-consultation-architecture.md+.ko.md— §6 gating table row:program-to-specN/A (single-object read-only reverse-engineering), with future-extension note for L3/L4 depth + ≥ 2-moduleGetWhereUsedgraph scenario
Fixed —
sc4sap:subagent_type prefix sweep across skill docsEvery
Agent(...)dispatch example in skill MDs now uses the fully-qualified"sc4sap:sap-<name>"form — bare"sap-<name>"fails at runtime due to Claude Code plugin auto-namespacing (memoryfeedback_sc4sap_subagent_prefix). Files touched:skills/analyze-cbo-obj/workflow-steps.md,skills/analyze-code/workflow.md,skills/analyze-symptom/workflow-steps.md,skills/ask-consultant/SKILL.md,skills/ask-consultant/team-rounds.md,skills/compare-programs/team-mode.md,skills/compare-programs/workflow.md,skills/create-object/workflow-steps.md,skills/create-program/inventory-lookups.md,skills/create-program/multi-executor-split.md,skills/create-program/phase6-buckets.md.phase6-buckets.mdadditionally reformats the 4-bucket dispatch block from the abbreviated positional signature to full JSON form withdescription+prompt.Validated — Phase 7 Type D runtime (Phase 1A↔1B bridge, create-program)
First end-to-end Type D validation on S4-DEV (profile switched from HKT-DEV). Target: ZCOR00010 — raw material COGS variance report on plant 1710 / USD / S/4HANA 2022. 4-way synthesis (
sap-analyst+sap-architect+sap-co-consultant+sap-mm-consultant) × 2 rounds (R1 POSITION bundled on Phase 1B Dims 1-7 → R2 REFINEMENT on Dim 5 data-source only). Convergence: 7/7 CONCUR, residual_disagreement = []. Key withdrawals:sap-mm-consultantwithdrew MBEW-VERPR for variance-axis (conceded MLDOC authority to CO);sap-co-consultantnarrowed MBEW "fallback only" to "price-history authority" (accepted MM's MBEWH period-trail scope). Final Dim 5 architecture: 3-axis business model (price-history MBEW/MBEWH × actual-COGS MLDOC × GL-impact ACDOCA) backed by 3 custom CDS views. Wall-clock: ~12 min; 11 audit files under.sc4sap/team-audit/create-program-p1b-zcor00010-20260424-130820/. User-facing report:.sc4sap/program/ZCOR00010/phase7-type-d-report.md.Fixes, Dependencies 3
Notes
Added —
runtime-deps/bundle integrity verification (offline, Stage 3-lite v1)The keyring bundle landed in 0.6.9 had no tamper detection — any modification to a committed
.nodebinary (intentional or accidental) would go unnoticed. 0.6.11 closes that gap with an offline integrity check.runtime-deps/keyring/integrity.json— new manifest. Per package, records the SHA-512npmIntegritycopied verbatim frompackage-lock.json(provenance) plus per-file SHA-256 hashes inssriformat (tamper detection). Schema version 1, 5 packages, 19 files on initial generation.scripts/bundle-keyring.mjs— two new subcommands:--refresh-integrity— regeneratesintegrity.jsonfrom the current bundle +package-lock.json. Run after any bundle update.--verify— offline SHA-256 re-hash and compare against the recorded manifest. Reports missing / unexpected files and hash mismatches individually. Exit codes:0pass,7manifest missing,8integrity failed.
docs/bundle-integrity.md— new maintainer doc covering the workflow,--verifysemantics, what is and is not detected, and Stage 3-lite v2 (upstream re-verification) as deferred scope.
End-to-end verified: clean
--verifypasses on 19 files across 5 packages; a single-byte tamper inruntime-deps/keyring/node_modules/@napi-rs/keyring/index.jsis detected with exact expected-vs-actual SHA-256 diff; re-bundling restores the expected state.CI hook not auto-installed — the repo has no
.github/workflows/.docs/bundle-integrity.mddocuments pre-commit / pre-push invocation until CI is wired.Fixed — 0.6.9 CHANGELOG misstated bundled
@napi-rs/keyringversionThe 0.6.9 release note said the bundled package was
@napi-rs/keyring@1.1.0. The actual installed and committed version perpackage-lock.jsonwas1.2.0; the 0.6.9 bundle bytes are unchanged, only the description was wrong.integrity.jsonrecords the correct1.2.0version and registryresolvedURL for every entry.Features, Fixes
Notes
Follow-up patch to 0.6.9. Three independent fixes + one missing implementation; no behavioural changes to the keychain bundle landed in 0.6.9.
Fixed — HUD showed "SAP not configured" when launched from a subdirectory
scripts/hud/lib/sc4sap-status.mjsresolved the active profile only at the exactcwd, while the MCP server walked up the ancestry chain — so launching Claude Code from a nested dev repo (e.g. the plugin source inside a larger workspace) produced HUD line 2 "SAP not configured" even though the MCP connection,/sc4sap:sap-doctor, and tool calls all reported the profile live.scripts/lib/profile-resolve.mjsnow exposes a sharedfindDotSc4sapDir()+resolveWorkspaceRoot().readActiveAlias(),resolveSapEnvPath(), andresolveConfigJsonPath()accept astartDirand walk up until they find a.sc4sap/that contains profile state (active-profile.txt,sap.env, orconfig.json) — skipping any intermediate.sc4sap/that holds only artifact folders (comparisons/,test-reports/,cbo/). Falls back to the first.sc4sap/on the chain when no ancestor has state. The HUD'sactiveProfile()switched to the shared resolver; downstreamSID/client/userfields now render correctly from any subdirectory.Fixed — Blocklist
denyrule short-circuited by built-inwarnpatternscripts/hooks/block-forbidden-tables.mjspreviously returned the first matching blocklist rule (exact-table lookup first, then the first matching pattern in iteration order). If a user extended.sc4sap/blocklist-extend.txtwith a strictdenyrule for a table that also matched a looser built-inwarnpattern, thewarnmatch could win the first-match race and the aggregatedeny > warndecision downstream never saw the user'sdeny.Replaced the single-match helper with
matchBlocklistAll()(returns every matching rule) +effectiveHitForTable()(collapses matches bydeny > warn > first-rule). User overrides inblocklist-extend.txtnow always take precedence over built-in defaults for the same table.Added —
scripts/prune-cache.mjsimplementation (Layer 7 cache hygiene)skills/sap-doctor/SKILL.mdadvertised/sc4sap:sap-doctor --pruneand--prune --yesflags since the doctor skill was introduced, but the underlyingscripts/prune-cache.mjsimplementation had never been committed — running the option hit "script not found" at runtime.Ships the missing script (227 LOC, dry-run by default,
--yesto actually delete;--jsonfor machine output). It resolves the active plugin version from the marketplaceplugin.json, walks~/.claude/plugins/cache/<marketplace>/sc4sap/to list stale version directories (each typically carrying its own ~500–800 MBvendor/abap-mcp-adt/node_modules/subtree), reports sizes in MB, and refuses to run when the active version cannot be resolved. Never touches the marketplace directory or the active cache directory.skills/sap-doctor/diagnostic-checks.mdgains a "Layer 7 — Cache Hygiene" section: PASS at zero stale versions, INFO when stale < 500 MB, WARN when stale ≥ 500 MB. Runs independently of Layer 2/3 connectivity so cache bloat is reported even when the SAP system is unreachable.Fixes 7, Other
Notes
Fixed — Keychain storage silently degraded to plaintext on git-clone installs
Claude Code plugin installation is a git clone, not an
npm install.@napi-rs/keyringwas declared inoptionalDependencies, but since end users receive only what is committed to the repo (andnode_modules/is gitignored), the plugin shipped with no keyring module at all. At runtimescripts/sap-profile-cli.mjs→loadKeyring()→require('@napi-rs/keyring')failed silently,keychainWrite()threwKeychainUnavailableError, andcmdAddcaught the error and wroteSAP_PASSWORD=<plaintext>tosap.envwith only a stderr warning that the setup wizard never surfaced. New profiles created via/sc4sap:sap-optiontherefore stored passwords in plaintext regardless of OS keychain support.Fix — bundle keyring under
runtime-deps/:runtime-deps/keyring/package.json—createRequireanchor.runtime-deps/keyring/node_modules/@napi-rs/keyring/— JS wrapper (56 KB).runtime-deps/keyring/node_modules/@napi-rs/keyring-<platform>/— native binaries forwin32-x64-msvc,darwin-x64,darwin-arm64,linux-x64-gnu(combined ~4.3 MB).scripts/bundle-keyring.mjs— idempotentnpm installoutput →runtime-deps/copy, with--checkto verify all 4 platform binaries are present.scripts/sap-profile-cli.mjs—loadKeyring()now uses aKEYRING_REQUIREanchored atruntime-deps/keyring/package.jsonso resolution goes through the committed bundle, not the plugin-rootnode_modules/(which is empty for end users)..gitignore— negation rule!runtime-deps/**/node_modules/**so the bundle is tracked despite the globalnode_modules/ignore..gitattributes— NEW,runtime-deps/** -text+*.node binaryso native binaries and package metadata survive cross-platform checkout without CRLF normalization.
Verified end-to-end:
git checkout-indexto a tmp location (simulates a first-time user's machine with nonode_modules/populated) →node scripts/sap-profile-cli.mjs versionruns →createRequireat the bundle anchor resolves@napi-rs/keyringfromruntime-deps/keyring/node_modules/@napi-rs/keyring/index.js. Separate 2026-04-23 verification confirmed the same chain delivers HTTP 200 on SAP OData$metadatawith a keychain-referenced password on a live SAP system.Bundle size: 4.4 MB committed (Linux x64 binary dominates at 3.0 MB; Windows/macOS binaries each ~450–470 KB).
Post-install behaviour:
/sc4sap:sap-optionand the setup wizard now store new profile passwords asSAP_PASSWORD=keychain:<service>/<alias>/<user>and write the plaintext into the OS-native credential store (Windows Credential Manager / macOS Keychain / libsecret), matching the design documented inscripts/sap-profile-cli.mjssince 0.6.0. Existing plaintext profiles remain functional; they can be migrated in-place by deleting and re-adding the profile after upgrading to 0.6.9.Deferred — Stage 3-lite bundle integrity verification
Design recorded in
.sc4sap/stage3-lite-bundle-integrity.md. Adds anintegrity.jsonsidecar underruntime-deps/<module>/populated frompackage-lock.json's npm SHA-512 integrity field, plusscripts/bundle-keyring.mjs --verifywhich recomputes the hash of the bundled tarball contents and fails CI on mismatch. Out of scope for 0.6.9 so the keychain fix can ship immediately; will land in a follow-up patch.Other 5
Notes
Reverted —
<Main_Thread_Dispatch>enforcement layer (0.6.7)Reverts the enforcement layer introduced in 0.6.7. The per-skill
model:frontmatter returns to being a declarative hint; no active sub-dispatch is performed.Why: 2026-04-23 smoke validation (
.sc4sap/test-reports/enforcement-validation-20260423.md) confirmed a Claude Code architectural limit — sub-dispatchedgeneral-purposeagents do not receive theAgent/Taskspawn tool and do not have themcp__plugin_sc4sap_sap__*MCP tools in their deferred-tool registry. The 0.6.7 design assumed a Sonnet sub-orchestrator could fan out to phase agents (sap-code-reviewer,sap-stocker,sap-analyst, …); empirically it cannot. 12/14 in-scope skills were functionally broken under 0.6.7; the 2 file-only skills that happened to work did so only by falling back to local file reads rather than live MCP calls.What reverted:
common/main-thread-dispatch.md— deleted (0.6.7 new file).common/model-routing-rule.md—§ Main-Thread Dispatch Enforcementsection removed; phase banner convention restored (single-dispatch skills no longer emitphase=0 (bootstrap)).docs/skill-model-architecture.md— "Enforcement layer (v0.6.7+)" note removed.skills/*/SKILL.md× 14 —<Main_Thread_Dispatch>block removed fromask-consultant,sap-doctor,sap-option,mcp-setup,setup,deep-interview,trust-session,create-program,create-object,team,analyze-cbo-obj,analyze-code,analyze-symptom,compare-programs.
What kept:
- Frontmatter
model:fields remain on all 14 skills (includingdeep-interview: haikuandteam: sonnetwhich were added in 0.6.7) — they serve as model-routing guidance for future redesign and for documentation readers, without runtime enforcement.
Operational impact: users whose Claude Code session is on a larger model than a skill's declared target will see the skill run at session-model cost. This matches 0.6.6 and earlier behavior.
Changed 2
Notes
Changed — Publish workflow
prepublishOnlysimplified from"npm run build"to"tsc". The fullbuildscript (which also runsscripts/build-mcp-server.mjsto clone and verify the vendor at the pinned SHA) is preserved for manual maintainer use (npm run build) but no longer executes duringnpm publish.- Rationale:
vendor/is not shipped in the tgz (filesfield excludes it) and the bridge re-clones it lazily at install-time, so publishing had no reason to materialize a ~500MBvendor/abap-mcp-adt/under the project root. This was a quality-of-life fix for maintainers.
No other changes — 0.6.5 is a pure publish-workflow follow-up to 0.6.4.
Dependencies 1
Notes
Changed — Vendor pin bump
scripts/build-mcp-server.mjsDEFAULT_PINNED_SHA→b41d4df546e2cccfa3f6693b656e16868b6facb6(abap-mcp-adt-powerup v4.8.1, previously pinned at a pre-v4.8.0 SHA). npm installers of sc4sap 0.6.4 now receive the ECC DDIC write fallback vendored into the plugin.
No other functional changes — 0.6.4 is a pure vendor-pin follow-up to 0.6.3.
Features 2, Changed 3
Notes
Added — ECC DDIC write path via OData RFC fallback
ECC 7.40 ADT REST lacks
/sap/bc/adt/ddic/{tables,dataelements,domains}endpoints. This release ships the runtime integration so MCP DDIC tools route through server-side FMs whenSAP_VERSION=ECC.- ABAP side — 6 new pre-release-branch source files under
abap/(zmcp_adt_ddic_{activate,doma,dtel,tabl}_ecc.abap,zmcp_adt_{dispatch,textpool}_ecc.abap) feeding 4 RFC FMs (ZMCP_ADT_DDIC_{TABL,DTEL,DOMA,ACTIVATE}) + 4 OData FunctionImports onZMCP_ADT_SRV. - MCP server (
abap-mcp-adt-powerupv4.8.0+) — 9 DDIC handlers patched withSAP_VERSION=ECCbranch. Full: Domain C/U/D + DataElement C/U/D (type_kind=domain only) + Table Delete. Inform-only: Table Create/Update (CDS-DDL translator deferred).
Changed
docs/FEATURES.{md,ko,de,ja}.md,docs/multi-profile-design.md,docs/odata-backend.md: refresh matrix and narrative for the ECC DDIC path.skills/sap-option/*,skills/setup/{rfc-backend-selection,wizard-steps,wizard-step-09-abap-objects}.md: SAP option UX and wizard refinements.abap/zmcp_adt_dispatch.abap,abap/zmcp_adt_textpool.abap: local refinements aligned with the new ECC variants.
Note: 0.6.1 and 0.6.2 were tagged but their notes were not written; see
git log v0.6.0..v0.6.2for the intermediate changes.- ABAP side — 6 new pre-release-branch source files under
Breaking, Features 8
Notes
Added — Multi-environment profiles (Dev / QA / Prod)
Register multiple SAP systems per company and hot-switch between them without restarting Claude Code. Targets the multinational 3-tier landscape (
KR-DEV,KR-QA,KR-PRD,US-DEV, …).Key pieces
- Profile storage — user-level definitions at
~/.sc4sap/profiles/<alias>/{sap.env,config.json}(shared across repos); project-level pointer at<project>/.sc4sap/active-profile.txt; artifacts per-profile under<project>/.sc4sap/work/<alias>/with read-only cross-view. - Tier-based readonly enforcement —
SAP_TIERenum (DEV|QA|PRD). QA/PRD profiles auto-blockCreate*/Update*/Delete*,CreateTransport, and runtime-execution tools. Two-layer defense:- Layer 1: PreToolUse hook
scripts/hooks/tier-readonly-guard.mjs(installed viascripts/install-hooks.mjs) — fast, explanatory deny. - Layer 2: MCP-server guard in
abap-mcp-adt-powerup/src/lib/readonlyGuard.ts— uncircumventable; fires even when the hook is missing, disabled, or the plugin is not yet installed.ReloadProfilealways allowed (the escape hatch back to DEV).
- Layer 1: PreToolUse hook
- OS keychain passwords —
SAP_PASSWORD=keychain:sc4sap/<alias>/<user>references resolved via@napi-rs/keyring(Windows Credential Manager / macOS Keychain / libsecret). Declared asoptionalDependencies; headless environments fall back to plaintext with a loud warning. Added to bothsc4sapandabap-mcp-adt-poweruppackage.json. - MCP server extensions (
abap-mcp-adt-powerup) — newsrc/lib/{profile,readonlyGuard,secrets}.ts(37 new unit tests, no regression on 276 existing),ReloadProfileMCP tool, launcher startup hook that activates the profile before the config manager runs. Guard wired intoBaseHandlerGroup.registerToolOnServerso every tool is checked from a single chokepoint. sap-optionmulti-profile UX — newskills/sap-option/profile-management.mdandskills/sap-option/migration.mdcompanions describing switch / add / remove / edit / purge / migrate flows. Status snapshot now shows active profile + tier.- HUD — Line 2 renders
{alias} [{tier}]with a 🔒 when tier ≠ DEV. No color is used; the lock icon is the single, theme-independent readonly signal. - Profile CLI (
scripts/sap-profile-cli.mjs) — JSON-in/JSON-out backend for skill flows:list,show,switch,add,remove,purge,migrate,detect-legacy,keychain-set,keychain-delete,version. - Legacy auto-detection — SessionStart hook
scripts/legacy-migration-banner.mjsemits a one-time notice when a project has.sc4sap/sap.envbut noactive-profile.txt, pointing the user to/sc4sap:sap-option. The migration wizard records the version threshold (multiProfileSince: "0.6.0") so the CLI can make upgrade-aware decisions.
Design docs:
docs/multi-profile-design.md,docs/multi-profile-implementation-plan.md.Non-breaking
Projects that never migrate keep working: the profile loader falls back to legacy
<project>/.sc4sap/sap.envand treats missingSAP_TIERasDEV(permissive). Migration is explicit — triggered only when the user runs/sc4sap:sap-optionafter the banner.- Profile storage — user-level definitions at
Changed, Fixes 5, Other
Notes
Fixed — Plugin manifest version alignment (critical)
The Claude Code plugin marketplace reads
.claude-plugin/plugin.jsonversion, notpackage.jsonversion. Previous v0.4.0–v0.5.3 releases bumped onlypackage.json, so users running/pluginsaw stale0.3.10fromplugin.jsonwhile GitHub showed v0.5.3. All three manifests are now synced to0.5.4:.claude-plugin/plugin.jsonversion:0.3.10→0.5.4.claude-plugin/marketplace.jsonplugins[0].version:0.2.5→0.5.4.claude-plugin/marketplace.jsonroot version:0.2.2→0.5.4package.json/package-lock.json:0.5.3→0.5.4README.md/README.ko.md/README.ja.md/README.de.mdbadge:v0.2.4→v0.5.4
Changed — Manifest descriptions updated
plugin.jsonandmarketplace.jsondescriptions now reflect all v0.4.x/v0.5.x additions: 16 skills (incl.ask-consultant,compare-programs), 4-Tier context loading, Sonnet/Opus model routing, OK_CODE binding pattern, Phase 4/6 hardening + Multi-Executor Split.Note — Semantic content unchanged
No skill / agent / rule file changed in this release. Only version fields + manifest descriptions. Users on 0.3.10 who upgrade to 0.5.4 get the accumulated v0.4.0–v0.5.3 feature set.
Features 3, Changed 3
Notes
Added —
/sc4sap:ask-consultantskillNew user-facing direct-Q&A skill for consulting with a module consultant agent without running a full create-program / create-object pipeline.
skills/ask-consultant/SKILL.md(new, 117 lines) — routes the user's question to the matchingsap-{module}-consultant(SD/MM/FI/CO/PP/PS/PM/QM/TR/HCM/WM/TM/BW/Ariba/BC) based on keyword inference + explicit mention. Multi-module questions dispatch 2-3 consultants in parallel. Answers are rendered against the configured SAP environment (sapVersion,industry,country,activeModulesfrom.sc4sap/config.json+.sc4sap/sap.env).- Read-only: no
Create*/Update*/Delete*/Activate*/CreateTransportcalls. DDIC metadata reads are fine; row extraction (GetTableContents/GetSqlQuery) is prohibited. - Inherits v0.5.2 conventions:
<Response_Prefix>block at top (prefix format[Model: <main> · Dispatched: Opus×<n> (<consultants>)]); consultant agents load Tier 1 + Tier 2 percommon/context-loading-protocol.mdsoconfigs/{MODULE}/*.mdare always available.
Added —
/sc4sap:compare-programsskill documentationcompare-programsexisted in the skills folder but was missing fromdocs/FEATURES.mdskill table. Added to all 4 language variants (en/ko/de/ja).Changed
README.md/README.ko.md/README.ja.md/README.de.md— new "Ask Consultant" row in the Core Capabilities table;FEATURES →link updated from "18 skills" to "19 skills" count.CLAUDE.md(sc4sap root) —/sc4sap:ask-consultantadded to the Skills list.docs/FEATURES.md(en/ko/de/ja) — skills table now has 16 entries (addedcompare-programs+ask-consultant); heading updated from "18 Skills" to "16 Skills" (matches actual count).
Changed 5, Fixes, Other 4
Notes
Added — 4-Tier Context Loading Model + Response Prefix
Tier 1 (Global Mandatory — every agent/skill, every session) — five files now unconditionally loaded at session start:
data-extraction-policy.md(safety),sap-version-reference.md(platform),naming-conventions.md(namespace),context-loading-protocol.md(meta),model-routing-rule.md(routing).Tier 2 (Role-Mandatory — per agent role group) — fixed additional set loaded at session start based on the agent's declared role group. Seven role groups:
Role group Agents Tier 2 adds Code Writer executor, qa-tester, debugger clean-code, abap-release-reference, transport-client-rule, include-structure Reviewer code-reviewer, critic clean-code, abap-release-reference, include-structure (per-bucket narrowing) Planner / Architect planner, architect include-structure, active-modules, customization-lookup, field-typing-rule Analyst / Writer analyst, writer active-modules Doc Specialist doc-specialist (none — task-driven) Module Consultant 14 module consultants spro-lookup, customization-lookup, active-modules, configs/{MODULE}/*.md Basis Consultant bc-consultant transport-client-rule, configs/common/*.md Tier 3 (Triggered) — unchanged from v0.5.0 (ALV, paradigm, CALL SCREEN, ECC, Cloud, module, industry, country, DDIC, FM, text, constant).
Tier 4 (Per-Task Kit) — unchanged (skill phase / Wave / reviewer bucket declaration).
Added — Response Prefix Convention
Every
/sc4sap:*skill-triggered response now begins with[Model: <main-model> · Dispatched: <sub-summary>]so the user sees at a glance which model is doing the work. Defined inmodel-routing-rule.md§ Response Prefix Convention; each of the 15/sc4sap:*SKILL.md files has a<Response_Prefix>block pointing to the convention.Changed
common/context-loading-protocol.md— rewritten around the 4-tier model with role-mandatory tables.- 25
agents/*.mdfiles — each gained a<Mandatory_Baseline>block identifying its role group and Tier 2 additions (at<Agent_Prompt>entry, before<Role>). - 15
skills/*/SKILL.mdfiles —<Response_Prefix>block after</Purpose>. common/model-routing-rule.md— added § Response Prefix Convention (88 → 128 lines).CLAUDE.md— top intro now names the 4 tiers + the 5 Tier-1 files explicitly.
Expected effect
- Tier 1/2 reads happen once per session, not once per turn → cache friendly.
- Tier 4 kit declarations remain minimal (narrow per wave/bucket).
- Per-dispatch token savings vs v0.5.0: additional ~15% on consultant dispatches (configs/{MODULE}/*.md no longer ambiguously loaded).
- Response prefix gives the user real-time visibility into model routing without opening transcripts.
Features 1, Changed 3, Other
Notes
Added — Multi-Executor Split for Phase 4 bulk work
skills/create-program/multi-executor-split.md(new, 71 lines) — Threshold table + 3 split strategies (A: by program range, B: by object class, C: within single program) + shared-transport / single-activation coordination rules. Planner decides single vs 2-way vs 3-way at Phase 2 sizing; Phase 4 skill reads the recommendation and dispatches accordingly.
Changed — Phase 2 planner emits sizing; Phase 4 triggers split
skills/create-program/agent-pipeline.mdPhase 2 — planner now MUST emit § Execution Sizing intoplan.mdwithprograms_count/includes_count/total_mcp_writes/text_elements_count/ddic_objects_countand asplit_recommendation+split_strategy. Phase 4 reads these to pick single vs parallel dispatch.skills/create-program/phase4-parallel.md— new "Multi-Executor Split" intro section points to the companion file; Waves 3 and 4 inherit the split decision from Phase 2.skills/create-program/spec-approval-gate.md— spec.md template gains § 8 Execution Sizing so the user sees the scale + split plan before approving.
Why
The ZMMR00010–ZMMR00200 repair sweep (20 programs, ~150 MCP writes) ran as a single
sap-executordispatch that blew past its session budget mid-way. Thresholds + pre-computed sizing + disjoint-scope split let the same workload run as 3 parallel executors sharing a transport — faster wall-clock, lower per-call attention load, cleaner failure isolation (one blocked executor doesn't poison the other two's work).Features 2, Changed 6, Other 3
Notes
Added — Context Loading Protocol + Model Routing Rule
Two cross-cutting architectural rules that change how every
Agent(...)dispatch in sc4sap consumes context and selects a model. Result: lower per-dispatch tokens, higher enforcement accuracy, cheaper repetitive bulk work.common/context-loading-protocol.md(new, 85 lines) —CLAUDE.mdis an index, not a payload. Every dispatch declares a Context kit (minimal file set) + optional triggered reads. Agents read only the kit; expansion requires a logged on-demand fetch orBLOCKEDreturn. Kills the implicit "load 25 rule files just in case" anti-pattern observed in past runs.common/model-routing-rule.md(new, 88 lines) — 3-tier heuristic (Sonnet for reads + repetitive bulk + template writes; Opus for novel code + cross-file reasoning + ambiguity; Haiku for trivial lookups). Per-phase / per-Wave routing table for/sc4sap:create-program. Sonnet → Opus escalation pattern for hard blockers.
Changed — Every phase now declares kit + model
skills/create-program/phase4-parallel.md— Each Wave (1 DDIC, 2 Classes/FMs/Text, 3 Includes+Main, 4 Screen/GUI, Final Activation) now lists its**Context kit**:+**Model**:at the top of its section. Wave 2 G4-prep explicitly routes to Sonnet forCreateTextElement× N bulk; Wave 4 Screen/GUI to Sonnet for template-based Create/Update/Verify.skills/create-program/phase6-review.md— Convention Checklist header mandates that each §1–§12 is an independent bucket with its own narrow kit. Bucket-scoped reads replace the "read everything, skim checks" pattern.skills/create-program/agent-pipeline.md— Top paragraph anchors the discipline to the two rule files.agents/sap-executor.md— New<Context_Kit_Protocol>+<Model_Selection>sections. The large<Shared_Conventions>table is demoted to a LOOKUP INDEX (not a preload list).agents/sap-code-reviewer.md— Same two sections; explicit per-bucket kit rule (no preloading across §1–§12).CLAUDE.md— Top intro now flags the index-not-payload semantics; index adds rows for the two new rules.
Why
The
/sc4sap:create-programpipeline was running every agent with the implicit "load every common/*.md referenced by CLAUDE.md" behavior. Two measured costs: (1) per-dispatch token overhead of ~40–60% on simple repetitive tasks, (2) reviewer attention dilution — 12-bucket checklist gets skimmed because all 12 rule files are in context at once. The context kit + model routing fix both in the same release.Expected effects
- Per-dispatch tokens: −40 to −60% on Sonnet-tier work.
- Opus usage share: −50% across
/sc4sap:create-program(previously all Opus; now only Waves that need reasoning). - Phase 6 reviewer consistency: MAJOR-finding detection improves because each bucket runs with only its relevant rule in context.
Features 1, Changed 6, Other
Notes
Added — OK_CODE Binding Pattern for Procedural Screens
common/ok-code-pattern.md(new, 104 lines) — Authoritative 3-step contract for wiring screen user commands: (1) TOP declaresDATA: gv_okcode TYPE sy-ucomm., (2) Screen'sfields_to_containers[]OKCODE entry hasNAME=GV_OKCODE, (3) PAIuser_command_xxxxFORM copiesgv_okcodeto a local,CLEAR gv_okcode,CASEon the local. Blocks the silent-failure mode whereCASE sy-ucomm.works on the main screen but breaks on the first popup / ALV toolbar event because the popup runtime overwritessy-ucomm.
Changed — Reviewer and Phase-4 Wave 4
skills/create-program/phase4-parallel.mdWave 4 —UpdateScreenpayload MUST setfields_to_containers[].NAME=GV_OKCODEfor the OKCODE field; Verify step now checks NAME binding in addition to flow-logic uncommenting.skills/create-program/phase6-review.md§1 — New reviewer check for the 3-step contract;CASE sy-ucomm.inside auser_command_xxxxFORM is a MAJOR finding.skills/create-program/phase6-output-format.md— Added OK_CODE-broken pattern to the enumerated false-positive list.common/include-structure.mdTOP row — Link took-code-pattern.md+ explicitCASE sy-ucommwarning.common/clean-code-procedural.md— PAI user-command routing rule references the new pattern file.CLAUDE.mdindex — Added row linking took-code-pattern.md.
Motivation
Observed during the ZMMR00010–ZMMR00200 batch fix: every
user_command_xxxxFORM readssy-ucommdirectly, none bindgv_okcode. Programs work today on the single main screen but are time-bombs the first time a popup is introduced. The rule was missing from the plugin so first-time users could ship this bug unchallenged.Changed 6, Fixes 1, Other 1
Notes
Changed — Phase 4 / Phase 6 Hardening
Phase 4 and Phase 6 of
/sc4sap:create-programnow block a class of silent-failure regressions where the SAP MCPCreate*call returned 200 but the resulting object was an empty shell, and where reviewer reported "완료" without re-verifying activation state.common/text-element-rule.md— Four pool types (I/S/R/H) defined explicitly. TypeS(Selection Text) is now mandatory for everySELECT-OPTIONS/PARAMETERSname — previously missing, which made selection screens render technical names (S_BUDAT,P_FILE) at runtime.common/include-structure.md— Activation protocol made explicit (UpdateProgram(activate=true)does NOT cascade to sub-includes; every include must be activated individually or via batchActivateObjects). Six anti-patterns enumerated as MAJOR Phase 6 findings, including Procedural{PROG}Epresence and "5/5 활성화 OK" reports that leave sub-includes inactive.common/procedural-sample/main-program.abap— Promoted to source-of-truth template for every Procedural program: 6-field header comment block, canonical include order, event-block-to-PERFORMdelegation. Deviation now requires written justification inspec.md.skills/create-program/phase4-parallel.md- Wave 2 G4-prep: emit all applicable text-pool types with
ReadTextElementsBulkverify before Wave 3 starts. - Wave 4: enforced
Create → Update(body) → Get*(verify)3-step protocol for every screen and every GUI Status.CreateScreen+CreateGuiStatusalone produce empty shells and are no longer considered success. - Final Step: mandatory post-
ActivateObjectsGetInactiveObjects({PROG}*) == 0verification. Blocks "programs activated" reports that leave sub-includes inactive.
- Wave 2 G4-prep: emit all applicable text-pool types with
skills/create-program/phase6-review.md- §1 ALV: reviewer must verify
flow_logiccontains uncommentedMODULE ... OUTPUT./INPUT.lines and GUI Status has populated PFKEYS/toolbar — not justSTA+TITshells. - §2 Text elements:
counts.R/counts.I/counts.S/counts.Hcross-checked against source declarations. - §6 Include structure: Main program must contain
INCLUDEstatements (reject inlined Main); Procedural paradigm with{PROG}Einclude present is MAJOR.
- §1 ALV: reviewer must verify
skills/create-program/phase6-output-format.md(new) — Split fromphase6-review.mdto stay under the 200-line-per-MD hard limit. Holds thereview.mdtemplate, failure-fix loop, and the enumerated false-positive patterns reviewer must reject.
Fixed
- Reviewer false positives on the ZMMR00010–00200 batch build (shell-only Screen 0100, empty GUI STATUS_0100,
counts.S == 0across all programs, ZMMR00060 and ZMMR00110 sub-includes inactive after "활성화 완료", forbidden{PROG}Ein ZMMR00120/130/140/150, inlined-Main in ZMMR00110) motivated this change. Future regenerations of programs in this pattern will fail Phase 6 before the user sees them.
Notes
package-lock.jsonversion field was stale at0.1.0(inconsistent withpackage.json0.3.3) and is now aligned to0.4.0.
Others providing
- abap2UI5 for VS Codeabap2UI5 for VS CodeA VS Code extension for abap2UI5 apps: F9 starts the app class in a preview beside the source, Ctrl+F3 activates the class and reloads it, and the abap2UI5 linter runs in the editor while you type.community org, abapVS Code extension to preview, activate and lint abap2UI5 apps
- sap-basis-opssap-basis-opsBasis and technical operations at the OS and database layer — the sysadmin plane every other SAP skill set skips — as runbook skills that emit a source-cited command sequence with its pre- and post-checks.independent, abapRunbook skills for Basis operations at the OS and database layer
- abap-offstack-aunitabap-offstack-aunitAn agent skill that bootstraps off-stack ABAP Unit tests and an abaplint gate onto an abapGit-serialised repository, with no live SAP system.independent, abapAgent skill for off-stack ABAP Unit tests and an abaplint gate
- ARC-1 SkillsARC-1 SkillsTwenty-two SKILL.md files shipped in arc-1's own skills/ directory for RAP scaffolding, unit test generation, clean-core audits and migration paths, loaded on demand by description and namespaced /arc-1:<skill> when installed through the Claude Code plugin.independent, abapTwenty-two agent skills shipped with arc-1
- sapskillssapskillsThree agent skills in one repository: Clean ABAP guidance, ADT in VS Code against the Private Cloud Edition, and general guardrails for a coding agent.independent, abapAgent skills for Clean ABAP, ADT in VS Code and guardrails
- claude-abap-devclaude-abap-devFive ABAP workflows for Claude Code — ATC fixing, a clean-core audit, a Clean ABAP review, ABAP Unit and debugging — that ship no system access of their own and run on whichever community MCP servers are already configured.independent, abapFive ABAP workflows for Claude Code on existing MCP servers
- DanKromp/skillOverflowDanKromp/skillOverflowA collection of 41 agent skills, 37 for CAP, Fiori, BTP, UI5, ABAP, Integration Suite and HANA work and four for creating, reviewing and retiring skills, each with its own eval.independent, capCollection of 41 agent skills, 37 for SAP development tasks
- sap-ai-dev-toolkitsap-ai-dev-toolkitAn MCP proxy that pins an agent's ABAP tools to one SAP system: setup reads the BAS destinations or the local SAP GUI landscape and writes one stdio server per system, leaving the credentials in the destination or in the editor's own login prompts.independent, abapMCP proxy pinning an agent's ABAP tools to one SAP system
- sapcli Claude Code Pluginsapcli Claude Code PluginTwo agents and two skills for Claude Code that drive sapcli, the long-standing command line to SAP products, to explore and develop classic ABAP objects rather than speaking ADT directly.independent, abapAgents and skills that drive sapcli instead of ADT
- sap-odata-explorersap-odata-explorerA Rust CLI and desktop app for exploring and testing SAP OData services against real systems — catalog discovery, metadata browsing, an F4 value-help picker and a Fiori-readiness linter — with an agent skill shipped beside it.independent, btpRust CLI and desktop app for exploring SAP OData services
- abap-skillsabap-skillsSeventeen agent skills for ABAP development in one repository: RAP, CDS view entities, ABAP SQL and AMDP, unit testing, authorisation, eventing, abapGit, ABAP Cloud and the clean core levels.independent, abapSeventeen agent skills for ABAP development
- ABAP remote filesystemABAP remote filesystemA Visual Studio Code extension that opens an ABAP system over ADT as an editable filesystem and exposes system tools to GitHub Copilot and external MCP clients.independent, abapVS Code extension editing ABAP systems over ADT as a filesystem
- WerkbankWerkbankA local desktop workspace for AI conversations, attached files and generated HTML Spaces, run by a goose agent and offering a catalog of SAP MCP connectors and ABAP, CAP and UI5 skills.independent, umbrellaLocal desktop workspace for AI conversations with SAP connectors
- claude-abap-skillsclaude-abap-skillsTwo Claude Code plugins of always-on Clean ABAP rules, templates and slash commands — deliberately not an MCP server, and explicit about routing each capability to the server that should answer it.independent, abapClaude Code plugins with Clean ABAP rules and templates
- SAP Power for KiroSAP Power for KiroA set of thirty-five-plus SAP skills packaged as a power for Kiro IDE rather than Claude Code, spanning BTP, UI5, data and analytics, ABAP, CAP and CLI tooling, with automatic context activation in Kiro.independent, btpSAP skills for the Kiro IDE
- SAP Developers MCPSAP Developers MCPThe hosted MCP server of developers.sap.com, over which an agent searches SAP's tutorials, reads missions and queries the site's knowledge graph of tutorials and concepts.sap official, umbrellaHosted MCP server of developers.sap.com tutorials and missions
- secondsky/sap-skillssecondsky/sap-skillsForty SAP development plugins installed through the skills command line or the Claude Code and Codex marketplaces, with a record per plugin of what its claims were checked against.independent, btpForty SAP development plugins for coding agents
- claude-sap-kitclaude-sap-kitA Claude Code plugin of three skills that extends arc-1 with five Custom_* tools for an on-premise ABAP system: running a report and reading its ALV as JSON, previewing a NAST message as PDF, and reading, writing and replacing SmartForms as XML.independent, abapClaude Code plugin adding Custom_* tools to arc-1
- rap-skillsrap-skillsRAP skills delivered branch-per-target, so the playbook you check out only references patterns valid for your deployment — managed on BTP, unmanaged with BAPI wrappers, and S/4HANA Cloud editions planned.independent, abapRAP skills delivered branch-per-target for each deployment
- KlystronKlystronAn MCP server written in ABAP that runs inside the application server behind an ICF service and exposes typed tools for ABAP development, quality, transports, customizing, roles, Basis operations and integration, with a client-side plugin of SAP skills.independent, abapMCP server in ABAP inside the application server, with agent skills
- arc-mcp-hubarc-mcp-hubA hub on SAP BTP that puts several arc-1 instances, one per SAP system, behind one login and a route each, exchanging the caller's token through a destination so each system still sees the real user.independent, btpHub on SAP BTP putting several arc-1 instances behind one login
- bw-modeling-mcpbw-modeling-mcpReads, creates and modifies BW/4HANA modelling objects through the same internal APIs Eclipse BWMT and the BW/4HANA Cockpit use — and can run centrally on BTP with each caller reaching BW as themselves.independent, btpMCP server for BW/4HANA modelling objects
- Maherd18/sap-mcp-serverMaherd18/sap-mcp-serverAn MCP server for ABAP development over the ADT resources: eight tools, each checked against a JSON policy file before the call reaches the system, with activation and transport release held for a person to approve.independent, abapPolicy-checked MCP server for ABAP development over ADT
- SAP API Policy Evidence SkillSAP API Policy Evidence SkillAssesses whether a described SAP API usage aligns with the SAP API Policy, gathering live evidence from SAP's own sources and returning a sourced assessment with a stated confidence — and routing the legal questions away from itself.independent, btpSkill assessing API usage against the SAP API Policy
- pyrfc-mcppyrfc-mcpAn MCP server for calling an SAP system's RFC-enabled function modules from an agent, built so that discovering a function does not authorise calling it: a read or a write is denied unless the function name matches an allowlist the server is configured with.independent, abapMCP server calling RFC-enabled function modules behind an allowlist
Details
Sources
Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.
Compatibility and provenance
Flavors
“Claude Code plugin for SAP ABAP development — SAP ECC / S/4HANA On-Premise / S/4HANA Cloud (Public & Private)” — babamba2/superclaude-for-sap — README
“Claude Code plugin for SAP ABAP development — SAP ECC / S/4HANA On-Premise / S/4HANA Cloud (Public & Private)” — babamba2/superclaude-for-sap — README
Contributors
History in the atlas
- installs_into: Claude Code; system_reach: Supplied with it
- Triaged out of data/crawled/mcp-candidates.json, the sap-ai-mcp-servers sweep. Written from the repository's own README; the catalogue is credited as where it was found and its words are not reused. Hard rule 7: skills are indexed, never authored here.
- First seen.
For your agent
- Ref
artifact:babamba2-superclaude-for-sap- JSON
- /artifacts/babamba2-superclaude-for-sap.json
- MCP
- Connecting an agent