sap-activate-object
Activates an inactive SAP repository object via SAP GUI Scripting. Routes to the correct transaction by object type: SE38 for…
Owns the S/4HANA custom-code migration campaign workspace and is the orchestration entry point for the sap-migrate engine. Five subcommands: init — create a campaign workspace from the migration Customer Brief (source/target release, in-scope packages, decommission policy,
Claude Code
$ npx -y skills add sapdev-ai/sap-dev --skill sap-cc-campaign --agent claude-code
Codex
$ npx skills add sapdev-ai/sap-dev --skill sap-cc-campaign -a codex -y
Cursor
$ npx skills add sapdev-ai/sap-dev --skill sap-cc-campaign -a cursor -y
Gemini CLI
$ npx skills add sapdev-ai/sap-dev --skill sap-cc-campaign -a gemini-cli -y
GitHub Copilot
$ npx skills add sapdev-ai/sap-dev --skill sap-cc-campaign -a github-copilot -y
OpenCode
$ npx skills add sapdev-ai/sap-dev --skill sap-cc-campaign -a opencode -y
Windsurf
$ npx skills add sapdev-ai/sap-dev --skill sap-cc-campaign -a windsurf -y
name: sap-cc-campaign
description: |
Owns the S/4HANA custom-code migration campaign workspace and is the
orchestration entry point for the sap-migrate engine. Five subcommands:
init — create a campaign workspace from the migration Customer Brief
(source/target release, in-scope packages, decommission policy,
connection profiles, human gates) + the empty state ledger.
status — per-state / per-tier counts + headline metrics.
report — render reports/dashboard.md: state/tier/pattern rollup + five KPIs
(decommission savings, ATC-clean rate, auto-fix rate, unmatched-finding
backlog, business sign-off); every percentage honest ("n/a", not 0%,
when the ledger isn't produced yet).
next — recommend the next pipeline skill, honouring the human-approval gates.
signoff— record a business-owner sign-off in campaign.json.
Pure workspace/state/reporting skill — OFFLINE (no SAP GUI, no RFC, no NCo); it
only reads/writes the campaign files the other sap-cc-* skills produce.
Prerequisites: none (the downstream skills it sequences do need SAP access).
argument-hint: "<init|status|report|next|signoff> --campaign <id> [--brief <path>] [--source <profile>] [--sandbox <profile>] [--check-system <profile>] [--target-release <rel>] [--gate <gate>] [--owner <name>] [--signoff-status APPROVED|PENDING|REJECTED] [--note <text>]"You own the **campaign workspace** for an S/4HANA custom-code migration and act as the pipeline's orchestration brain. Every other `sap-cc-*` skill writes into and reads from the workspace you create here; this skill never touches the SAP system itself. It is fast, offline, and safe to call as often as you like.
Task: $ARGUMENTS
---
| File | Token | Purpose | |---|---|---| | `<SAP_DEV_CORE_SHARED_DIR>/rules/skill_operating_rules.md` | *(rule)* | Mandatory operating rules (applies to the downstream skills this one sequences). | | `<SAP_DEV_CORE_SHARED_DIR>/rules/settings_lookup.md` | *(rule)* | Settings/`work_dir` resolution contract. | | `<SAP_DEV_CORE_SHARED_DIR>/scripts/sap_settings_lib.ps1` | *(dot-source)* | `Get-SapSettingValue` — settings merge. | | `<SAP_DEV_CORE_SHARED_DIR>/scripts/sap_connection_lib.ps1` | *(dot-source)* | `Get-SapWorkDir` — env-aware `work_dir`. | | `<SAP_DEV_CORE_SHARED_DIR>/scripts/sap_log_helper.ps1` | *(invoke)* | Start/step/end JSONL logging across bash blocks. | | `<SAP_DEV_CORE_SHARED_DIR>/templates/migration_brief.md` | *(read)* | Migration Campaign Brief (+ `migration_brief_sample.md`); supplies the campaign profile for `init` (resolved via the standard Template Language Resolution order). Distinct from the build-time `customer_brief.md`. | | `<SKILL_DIR>/references/sap_cc_campaign.ps1` | *(invoke)* | **Companion helper (v1, shipped).** Offline aggregator: performs the atomic `init` write (campaign.json + `state.tsv`), and for `status` / `report` / `next` reads `state.tsv` (+ the triage pattern summary) and emits parseable count / recommendation lines. | | `<SKILL_DIR>/references/sap_cc_drift_read.ps1` | *(invoke, RFC)* | **Landscape-drift reader** (optional `report` pre-step). Reads the source system's `E070`/`E071` for transports touching in-scope objects since the campaign start (`--MaxTrs`-bounded) + `SMODILOG` (SPDD/SPAU exposure), writes `drift\drift.tsv`. Read-only. Emits `DRIFT:` / `DRIFT_OBJ:` / `WINDOW_WARN:` / `STATUS: OK\|NO_DRIFT\|ERROR`. |
> This skill drives no SAP GUI, so — unlike the deploy skills — it does NOT > include `language_independence_rules.md`, the session broker, the attach > library, or any RFC lib. Keep it that way: campaign state is plain files.
---
**Resolve `work_dir` via the env-aware helper** — do NOT read `work_dir` from `settings.json` directly (that ignores `SAPDEV_AI_WORK_DIR` and `userconfig.json`). Parse the `WORK_DIR=` line from:
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 ('CUSTOM_URL=' + (Get-SapSettingValue 'custom_url' ((Get-SapWorkDir) + '\custom')))"Set `{WORK_TEMP}` = `{work_dir}\temp` and ensure it exists:
cmd /c if not exist "{WORK_TEMP}" mkdir "{WORK_TEMP}"Set `{RUN_TEMP}` = the per-run scratch dir (`Get-SapRunTemp` mints + creates `{work_dir}\temp\run_<id>`):
powershell -NoProfile -ExecutionPolicy Bypass -Command ". '<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_connection_lib.ps1'; Write-Output ('RUN_TEMP=' + (Get-SapRunTemp))"Per the CLAUDE.md "Two-bucket temp model" write this skill's per-run scratch (the log state file below) under `{RUN_TEMP}`, never at a fixed name under the `{WORK_TEMP}` root.
`{custom_url}` (from the same command) is needed only by `init` to resolve a customer-overridden migration brief.
---
State file: `{RUN_TEMP}\sap_cc_campaign_run.json`. Best-effort.
powershell -ExecutionPolicy Bypass -File "<SAP_DEV_CORE_SHARED_DIR>\scripts\sap_log_helper.ps1" -Action start -StateFile "{RUN_TEMP}\sap_cc_campaign_run.json" -Skill sap-cc-campaign -ParamsJson "{}"(Pass the parsed args into `-ParamsJson` when convenient, e.g. `{"sub":"init","campaign":"CCMIG01"}`.)
---
Parse `$ARGUMENTS`:
`signoff`. If missing or unrecognised → print usage (the `argument-hint`) and exit `2`.
`^[A-Za-z0-9_-]{1,40}$` (it becomes a folder name). On violation exit `2`.
`--sandbox <profile>`, `--check-system <profile>`, `--target-release <rel>`. These o
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.