sap-activate-object
Activates an inactive SAP repository object via SAP GUI Scripting. Routes to the correct transaction by object type: SE38 for reports/programs/function- group…
Keyed, row-level RFC diff of ONE customizing table or view across two saved connection profiles (or two clients of one system) — the shareable answer to "it works in QAS but not in DEV/PRD". Resolves the object on both sides, computes the compared-field set (drops the technical
$ npx -y skills add sapdev-ai/sap-dev --skill sap-config-compare --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/sap-config-compareContext preview
The summary Claude sees to decide when to auto-load this skill.
Keyed, row-level RFC diff of ONE customizing table or view across two saved connection profiles (or two clients of one system) — the shareable answer to "it works in QAS but not in DEV/PRD". Resolves the object on both sides, computes the compared-field set (drops the technical
name: sap-config-compare description: | Keyed, row-level RFC diff of ONE customizing table or view across two saved connection profiles (or two clients of one system) — the shareable answer to "it works in QAS but not in DEV/PRD". Resolves the object on both sides, computes the compared-field set (drops the technical client key for client-dependent tables, excludes unreadable/too-wide columns honestly), guards against an unbounded read, does a chunked offset-based read of each side, and runs the ONE shared keyed-diff engine to classify every key LEFT_ONLY / RIGHT_ONLY / CHANGED. Claude then translates the raw deltas into functional meaning using DDIC texts. Output is a diffable diff.tsv + summary, registered for /sap-evidence-pack. Read-only. Prerequisites: two profiles via /sap-login (pinned LEFT + --against RIGHT); SAP NCo 3.1 (32-bit). No GUI, no Z-object, no dev-init. argument-hint: "<TABLE|VIEW> --against <profile-hint> [--where \"F=V,F=A..B\"] [--fields F1,F2] [--keys-only] [--max-rows N]"
You answer **"why does this work there but not here?"** with a keyed, row-level diff of one customizing table/view between two systems (or two clients), read-only over RFC. SCU0/SCMP are GUI-bound and unshareable; two SE16 windows miss rows. This does the join deterministically and narrates the deltas in functional language.
Task: $ARGUMENTS
**You are read-only against BOTH systems.** No confirm gates, no TR, no GUI. All output stays local under `{work_dir}`.
---
| File | Token / call | Purpose | |---|---|---| | `<SAP_DEV_CORE_SHARED_DIR>/rules/skill_operating_rules.md` | *(rule)* | Mandatory operating rules — read-only here | | `<SKILL_DIR>/references/sap_config_compare_read.ps1` | `-Object -Against [-Where -Options -Fields -KeysOnly -MaxRows] -OutDir` | Dual-connect, object resolution, metadata, unbounded guard, chunked offset read | | `<SKILL_DIR>/references/sap_config_compare_diff.ps1` | `-LeftTsv -RightTsv -MetaJson -OutDir` | Offline keyed diff (dot-sources the shared engine) | | `<SAP_DEV_CORE_SHARED_DIR>/scripts/sap_keyed_diff_lib.ps1` | `%%KEYED_DIFF_LIB_PS1%%` | The ONE keyed row-diff engine (shared with /sap-se16n snapshot diff, /sap-compare) | | `<SAP_DEV_CORE_SHARED_DIR>/scripts/sap_connection_lib.ps1` / `sap_rfc_lib.ps1` / `sap_dpapi.ps1` | dot-sourced / subprocess | Profile resolution, RFC connect, RIGHT-password decrypt | | `<SAP_DEV_CORE_SHARED_DIR>/scripts/sap_artifact_lib.ps1` | Step 9 | Artifact index for /sap-evidence-pack |
---
powershell -NoProfile -ExecutionPolicy Bypass -Command ". '<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_settings_lib.ps1'; . '<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_connection_lib.ps1'; Write-Output ('WORK_DIR=' + (Get-SapWorkDir))"Set `{RUN_TEMP}` via `Get-SapRunTemp`. `{OUT}` = `Get-SapArtifactDir -ScopeKey CFG_<OBJECT> -Skill sap-config-compare` (manual scope key — the compared object is a TABL/VIEW).
powershell -ExecutionPolicy Bypass -File "<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_log_helper.ps1" -Action start -StateFile "{RUN_TEMP}\sap_config_compare_run.json" -Skill sap-config-compare -ParamsJson "{}"---
Positional `<OBJECT>` (table or view, uppercased). Required `--against <hint>` (a /sap-login profile hint — `<SID>`, `<SID>/<CLIENT>`, description substring). Flags: `--where "F=V,F2=A..B"` (F=V → EQ, F=A..B → BETWEEN, comma = AND), `--options "<raw OPTIONS>"` (escape hatch; read-only predicate only — the engine refuses write keywords), `--fields F1,F2` (restrict compared columns; keys always included), `--keys-only` (diff key existence only; cap ×5), `--max-rows N` (default 10000, ceiling 100000). `--client NNN` (cross-client sugar — resolves `<LEFT_SID>/NNN`) and `preset <name>` are **v1.5/v2 (not implemented)** → say so and STOP.
LEFT = pinned profile; RIGHT = `--against`. The engine self-connects LEFT and resolves+connects RIGHT (DPAPI decrypt in-process). Identity per side is read LIVE (RFC_SYSTEM_INFO → SID, USR02 MANDT → logon client) — the profile store can be stale.
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "<SKILL_DIR>\references\sap_config_compare_read.ps1" -Object "<OBJECT>" -Against "<hint>" -SharedDir "<SAP_DEV_CORE_SHARED_DIR>" -OutDir "{OUT}"Add `-Where`, `-Options`, `-Fields`, `-KeysOnly`, `-MaxRows` as parsed. Parse:
IDENT: side=<L|R> sid=.. client=.. release=.. OBJECT: kind=<TABLE|VIEW_DB|VIEW_MAINT_BASE> read_target=<tbl> note="<..>" FIELDS: keys=.. compared=.. excluded=.. only_left=.. only_right=.. READ: side=<L|R> rows=.. capped=<Y|N> groups=.. STATUS: OK | CFG_OBJECT_NOT_FOUND | CFG_NO_COMMON_KEY | CFG_UNBOUNDED_READ | CFG_SAME_IDENTITY | RFC_LOGON_FAILED | RFC_ERROR
**Refusals (fail loud, STOP, log the class):**
re-run with `--where <field>=..` (echo the suggestion). Never a partial read.
The engine writes `left.tsv`, `right.tsv`, `meta.json`, `texts.tsv` into `{OUT}`. `kind=VIEW_MAINT_BASE` means a maintenance view was decomposed to its **primary base table** (RFC_READ_TABLE cannot read a maintenance view) — the `note`/`scope_notes` list the base tables NOT diffed; carry that caveat into the summary.
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "<SKILL_DIR>\references\sap_config_compa
SAP development automation skills for AI coding assistants. Windows-only — the skills drive SAP GUI for Windows via GUI Scripting (plus optional RFC via SAP NCo); there is no macOS/Linux path.
Repo: sapdev-ai/sap-dev
Activates an inactive SAP repository object via SAP GUI Scripting. Routes to the correct transaction by object type: SE38 for reports/programs/function- group…
Natural-language SAP API discovery over RFC (no GUI): turn a goal like "create a sales order" or "post a goods movement" into a ranked, trap-annotated,…
Runs the SAP ABAP Test Cockpit (ATC) end-to-end as a quality gate: builds an SCI Object Set scoped to the target object(s), creates an ATC Run Series bound to…
Executes BDC (Batch Data Communication) sessions in SAP via RFC. Reads SHDB recording files from the bdc/ folder, connects via SAP NCo 3.1, calls…
Changes the package (TADIR-DEVCLASS) assignment of an SAP repository object via the "Object Directory Entry" dialog (Goto > Object Directory Entry). Routes by…
Validates ABAP source (report / program / FM / class / include) before deployment — one skill, dimension-dispatched: naming (variable conventions), type (DDIC…