sap-activate-object
Activates an inactive SAP repository object via SAP GUI Scripting. Routes to the correct transaction by object type: SE38 for…
Install-free, read-only git backend for custom ABAP: gives Z code the PR-style review, blame, readable TR diffs, and whole-package-on-disk that abapGit would — without installing abapGit (often politically impossible on customer systems) and without ever writing to SAP. snapshot
Claude Code
$ npx -y skills add sapdev-ai/sap-dev --skill sap-git --agent claude-code
Codex
$ npx skills add sapdev-ai/sap-dev --skill sap-git -a codex -y
Cursor
$ npx skills add sapdev-ai/sap-dev --skill sap-git -a cursor -y
Gemini CLI
$ npx skills add sapdev-ai/sap-dev --skill sap-git -a gemini-cli -y
GitHub Copilot
$ npx skills add sapdev-ai/sap-dev --skill sap-git -a github-copilot -y
OpenCode
$ npx skills add sapdev-ai/sap-dev --skill sap-git -a opencode -y
Windsurf
$ npx skills add sapdev-ai/sap-dev --skill sap-git -a windsurf -y
name: sap-git description: | Install-free, read-only git backend for custom ABAP: gives Z code the PR-style review, blame, readable TR diffs, and whole-package-on-disk that abapGit would — without installing abapGit (often politically impossible on customer systems) and without ever writing to SAP. snapshot serializes a PACKAGE / TR / object-list scope to an abapGit-ISH tree over proven RFC reads and commits it to a local git repo with the TRs currently referencing the scope annotated in the message; diff re-serializes and shows working-system-vs-last-snapshot as a git diff; log/status are local git reads. Fully headless (no GUI/VBS), zero SAP writes. Fidelity is tri-state and honest: programs / function modules / message classes are FULL (RPY + T100 reads); DDIC (tables/data-elements/domains/table-types/views) and classes are PARTIAL deterministic metadata JSON (direct DD0xL / SEO reads — class SOURCE over RFC is unsupported, so classes ship as explicit metadata stubs; full DDIC via the Z_GENERIC_RFC_WRAPPER_TBL DDIF_*_GET path is v1.5); unsupported types are SKIPPED_UNSUPPORTED, never silently dropped. A hard determinism contract (volatile DDIC fields stripped, rows sorted by key) makes snapshot-twice yield an EMPTY diff — the property that makes diff trustworthy. It REFUSES any import/push/apply request (v1 is read-only; use the deploy skills). NOT abapGit-import-compatible (metadata is our JSON). No Z objects deployed. Prerequisites: git in PATH; pinned RFC profile via /sap-login; NCo 3.1 (32-bit). /sap-dev-init is optional but recommended (its wrapper unlocks full DDIC fidelity in v1.5). argument-hint: "snapshot PACKAGE <ZPKG> [--subpackages] | TR <TRKORR> | --objects <file> [--repo <dir>] [--message \"...\"] [--no-commit] | diff <scope> [--object <N>] [--stat] | log [--object <N>] [--max N] | status"
You put custom ABAP under local git: serialize a scope to disk over read-only RFC, commit with TR annotations, and diff/blame with real `git`. You never write to SAP and never push. Fidelity is honest per object (FULL / PARTIAL / COULD_NOT_CHECK / SKIPPED_UNSUPPORTED).
Task: $ARGUMENTS
---
| File | Token / call | Purpose | |---|---|---| | `<SKILL_DIR>/references/sap_git_repo.ps1` | `-Action ensure\|commit\|diff\|log\|status\|reset` | Local git plumbing (no SAP) | | `<SKILL_DIR>/references/sap_git_serialize.ps1` | `-Scope -RepoDir` | RFC serializer (scope -> tree + manifest) | | `<SAP_DEV_CORE_SHARED_DIR>/scripts/sap_rfc_read_source.ps1` | dot-sourced (by serializer) | `Read-SapAbapSource` for PROG/FM | | `<SAP_DEV_CORE_SHARED_DIR>/scripts/sap_object_resolver.ps1` | dot-sourced | Scope/object resolution | | `<SAP_DEV_CORE_SHARED_DIR>/scripts/sap_artifact_lib.ps1` | dot-sourced | `Register-SapArtifact` | | `/sap-login` | sub-skill | Pinned RFC profile | | `/sap-dev-init` | sub-skill | (optional) deploys the wrapper for v1.5 full DDIC |
---
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)); Write-Output ('RUN_TEMP=' + (Get-SapRunTemp))"powershell -ExecutionPolicy Bypass -File "<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_log_helper.ps1" -Action start -StateFile "{RUN_TEMP}\sap_git_run.json" -Skill sap-git -ParamsJson "{}"---
Modes: `snapshot` | `diff` | `log` | `status`. **Any `import` / `push` / `apply` / "write back to SAP" phrasing -> REFUSE** with: "sap-git is a read-only backend (v1); to deploy use /sap-se38 / /sap-se37 / /sap-se24 / /sap-se11." Scope forms: `PACKAGE <p> [--subpackages]`, `TR <trkorr>`, `--objects <file>`. Flags: `--repo <dir>`, `--message "<extra>"`, `--no-commit`, `--object <N>`, `--stat`, `--max N`, `--save-to <file>`.
(fix: winget install Git.Git). snapshot/diff also need a pinned RFC profile (`/sap-login`).
regardless — the wrapper only matters for the v1.5 full-DDIC path.
Repo dir = `--repo`, else `Get-SapSettingValue 'sap_git_repo_dir' '{work_dir}\git'` + `\<SID>_<CLIENT>` (one repo per system-client). Run:
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "<SKILL_DIR>\references\sap_git_repo.ps1" -Action ensure -RepoDir "<repo>" -Sid <SID> -Client <CLIENT> -SapUser <USER>
`DIRTY: 1` -> refuse `GIT_REPO_DIRTY` (fix: commit/stash manually or pass a fresh `--repo`) — this guarantees diff's post-run `git reset --hard` can only ever discard files THIS run wrote.
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "<SKILL_DIR>\references\sap_git_serialize.ps1" -Scope "PACKAGE <ZPKG>" -RepoDir "<repo>" -SharedDir "<SAP_DEV_CORE_SHARED_DIR>"
(`-Subpackages`, `-ObjectsFile <file>` for the other scope forms.) Parse each `GIT: <TYPE> <NAME> <fidelity>` line + the `SERIALIZE: total=.. full=.. partial=.. cnc=.. skipped=..` summary. Empty scope -> `SNAPSHOT_EMPTY_SCOPE`, stop. Every affected object with no wrapper degrades to PARTIAL / COULD_NOT_CHECK — a class stub or DDIC metadata is NEVER presented as a full serialization.
Read the TRs currently holding scope objects (E071 join E070 + E07T texts — honest label "TRs referencing scope at snapshot time", not "since last snapshot"). Build the commit message (`snapshot <scope>` + SID/client + release marker + the TR lines + any `--message`) into `{RUN_TEMP}\commit_msg.txt`, then (unless `--no-commit`):
`
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.
Activates an inactive SAP repository object via SAP GUI Scripting. Routes to the correct transaction by object type: SE38 for…
Natural-language SAP API discovery over RFC (no GUI): turn a goal like "create a sales order" or "post a goods movement" into a…
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),…
Executes BDC (Batch Data Communication) sessions in SAP via RFC. Reads SHDB recording files from the bdc/ folder, connects via…
Changes the package (TADIR-DEVCLASS) assignment of an SAP repository object via the "Object Directory Entry" dialog (Goto >…
Validates ABAP source (report / program / FM / class / include) before deployment — one skill, dimension-dispatched: naming…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.