abap-code-review-helper

abap-code-review-helper is a skill for Claude Code, Codex from marcellourbani/vscode_abap_remote_fs. It costs 142 tokens per session (8,616 once invoked), scanned A, original, MIT.

A set of review and coding rules for ABAP, the programming language used widely with SAP business software. It focuses on errors that can produce wrong results, crashes, lost updates, or slow processing even when the code passes syntax checks.

In plain words
What is it for?
Use it when writing, changing, debugging, or reviewing ABAP reports, classes, function modules, interfaces, and other ABAP objects.
Why use it?
It helps reviewers distinguish real, reachable defects from guesses and avoid reporting issues already prevented by the code. It also requires unknown facts and unperformed checks to remain clearly marked.

Skill for Claude CodeCodex

Written for no agent in particular: nothing here depends on one.

Good fit Use it when writing, changing, debugging, or reviewing ABAP reports, classes, function modules, interfaces, and other ABAP objects.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/marcellourbani/vscode_abap_remote_fs/abap-code-review-helper
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add marcellourbani/vscode_abap_remote_fs --skill abap-code-review-helper
Clone the repo
git clone --depth 1 https://github.com/marcellourbani/vscode_abap_remote_fs

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for abap-code-review-helper

README.md
[![agentmods](https://agentmods.dev/badge/skills/marcellourbani/vscode_abap_remote_fs/abap-code-review-helper/github.svg)](https://agentmods.dev/skills/marcellourbani/vscode_abap_remote_fs/abap-code-review-helper)
Your own site
<a href="https://agentmods.dev/skills/marcellourbani/vscode_abap_remote_fs/abap-code-review-helper"><img src="https://agentmods.dev/badge/skills/marcellourbani/vscode_abap_remote_fs/abap-code-review-helper/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for abap-code-review-helper

Your own site · 80×15
<a href="https://agentmods.dev/skills/marcellourbani/vscode_abap_remote_fs/abap-code-review-helper"><img src="https://agentmods.dev/badge/skills/marcellourbani/vscode_abap_remote_fs/abap-code-review-helper.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 142 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 8,616 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00142 $0.08616
Opus 5.5 $0.00057 $0.03446
Sonnet 5.5 $0.00028 $0.01723
Haiku 4.5 $0.00014 $0.00862

Measured 27d ago against content hash 16bc58f76056, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

abap-code-review-helper scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 27d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

client/media/skills/abap-code-review-helper/SKILL.md · 301 lines

How it starts

The opening of the file, as written. The whole thing — 301 lines — stays where its author put it; the contents beside it link to each section on GitHub.

ABAP Coding Pitfalls

These requirements describe what the code must do. For reviews, report violations; for authorized changes, make the code meet the applicable requirements. Report important unknowns, not passed-check lists unless asked. Never claim checks or tests that were not performed.

Review safeguards

  1. A finding must describe a reachable failure in the current code. A hypothetical future change is not a current defect.
  2. Existing protections must be traced before reporting a missing check. An enclosing branch, earlier exit, full assignment, or earlier compatible sort can already satisfy the requirement.
  3. A safe equivalent must be accepted. The code need not use the reviewer's preferred syntax.
  4. A claim disproved during investigation must be removed from the findings and severity totals.
  5. Quoted code, types, keys, and signatures must match inspected source. Missing information must remain unknown.
  6. Security findings require an actual input/control path to a security-sensitive operation. Dynamic ABAP conditions are not automatically SQL injection.
  7. Correctness defects, conditional risks, measured performance problems, and maintainability suggestions must be kept separate.

Examples of mistakes that pass syntax checks

These are examples, not the complete list. The later requirements also apply wherever relevant to the code.

  • Old data must not be used after a failed read. After READ TABLE ... INTO or SELECT SINGLE, sy-subrc must be checked or saved before another operation can overwrite it. The result must be checked before the target is used. If no row was found, the target work area must not be used as a successful result: it may still hold data from the previous read. The return code must determine whether a row was found, not whether the work area is initial; a real row can contain blank or zero values.
  • Temporary loop variables must be cleared or fully assigned before use on each iteration. A skipped assignment must not leave the previous row's value in use. Running totals and other values needed across iterations must not be cleared prematurely. Clearing is unnecessary when the value is always replaced completely before use.
  • Internal-table inserts and updates must use the statement that matches the intended action.
    • INSERT ... INTO TABLE adds a row. MODIFY TABLE changes an existing row found by the primary table key; it must not be used to insert a missing row. MODIFY ... INDEX changes the row at that index.
    • Duplicate handling must match the actual statement and table keys. A duplicate can set a failure return code, raise an exception, or cause a dump. sy-subrc must be checked when the statement sets it; exceptions must be handled where required. This also applies to bulk inserts, constructors, and unique secondary keys.
    • INSERT must not be replaced with MODIFY just to hide duplicates. The business rule must determine whether a duplicate is rejected, skipped, merged, or updated.
  • Database INSERT, UPDATE, and MODIFY must match the allowed create/change behavior.
    • INSERT is for create-only and UPDATE for change-only. Database MODIFY must be used only when insert-or-update by primary key is intended. Unlike internal-table MODIFY TABLE, it can insert a missing row.
    • Duplicate primary keys and conflicts with unique secondary indexes must be handled. Depending on the statement, these can return a failure code, raise an exception, or cause a dump. MODIFY can still fail on a unique secondary index.
    • A duplicate must not be ignored unless the business rule allows it. A preceding existence check is not enough: another session can insert the row before this session does.
  • The table must be sorted correctly before BINARY SEARCH. On a standard table, the search fields must be the leading sort fields, in ascending order and in the same sequence as the search key. A descending sort or AS TEXT sort is not a substitute. Appends or changes must not break that order before the search. A suitable declared sorted or hashed key is preferable when it removes the need to maintain this order manually.
  • An index-based parallel cursor must have the correct sort, start index, and exit check.
    • The tables must be ordered by the grouping fields as required by the algorithm. The first matching inner row's sy-tabix must be saved before another operation can overwrite it, and the inner loop must start FROM that saved index.
    • The inner loop must exit when any grouping field differs (NE/<>). Comparing only part of a composite group key or continuing into the next group is incorrect.
    • Duplicate keys in both tables must be handled. An inner group must remain available to any later outer row that also needs it. The last successful index must not be reused after a failed search.
  • The FAE table must be checked for empty before the SELECT. SELECT ... FOR ALL ENTRIES IN @lt_keys must be guarded by IF lt_keys IS NOT INITIAL or an earlier return/skip when it is empty. With an empty FAE table, the entire explicit WHERE condition can be ignored, not just conditions using lt_keys. The query can then read every row allowed by implicit restrictions such as the current client. A skipped SELECT must not leave its previous result in use accidentally.
  • An empty range in WHERE field IN @range_table means no restriction on that field." If empty input should return no rows, the SELECT must be skipped or an empty result returned explicitly.
  • The number of keys passed through IN range must stay within the database's limits.
    • A large range in WHERE field IN @lt_range can exceed SQL statement-size or parameter limits and cause a database error or dump.
    • Large exact-key lists must use an approach suitable for the expected volume, such as FAE with a nonempty-table check, a supported join, or smaller key batches. Neither FAE nor a hardcoded batch size is safe at every size on every system.
    • The selection must keep its intended meaning. FAE removes duplicate result rows. Exclusions, intervals, and patterns must not be replaced blindly with equality checks or split into separate queries whose results are combined.
  • SELECT SINGLE must not choose the latest or preferred row from several matches. It is suitable when the key is unique or any matching row is acceptable, including an existence check. Selecting the first, latest, or top-N rows must use ORDER BY with an extra sort field when needed to resolve ties. Database result order must not be relied on without ORDER BY.
  • Database reads inside loops must be avoided unless their number and cost are justified. This includes SELECTs inside methods and function modules called by the loop. Reading needed rows together and looking them up by table key is preferable. Per-row reads may be appropriate for a justified buffered lookup or another bounded access pattern.
  • SELECTs must retrieve only needed columns by default. SELECT * must not be the default: extra columns increase transfer and memory use. Whole-row reads are acceptable when the complete row is needed and the expected row count and row size are acceptable.
  • A field symbol must be assigned before it is used. When assignment can fail or be skipped, access must be guarded by IF <row> IS ASSIGNED or an equivalent successful-assignment check. The unassigned case must skip, return, or raise an error before dereferencing; otherwise the code can dump with GETWA_NOT_ASSIGNED. Inside a successful LOOP ... ASSIGNING, another check is unnecessary unless later code unassigns the symbol or invalidates its row.
  • The result of dynamic ASSIGN must be checked before the field symbol is used. sy-subrc must be checked or saved before another operation can overwrite it. A failed assignment can leave the field symbol pointing at an older object. IS ASSIGNED alone does not establish that the new assignment worked. When an old assignment must not survive, the symbol must be unassigned before the attempt. Failure must be handled before the symbol is used.
  • Missing rows in table expressions must be handled. itab[ ... ] can raise CX_SY_ITAB_LINE_NOT_FOUND. Where absence is expected, that exception must be handled or an appropriate default used. A missing mandatory row must produce an error rather than silently becoming a blank value. Unrelated errors must not be hidden by a broad catch.
  • A helper, exit, or BAdI must not commit the caller's work without permission from the calling application. COMMIT WORK can save unrelated pending changes made by the caller. It is allowed only where the application or framework explicitly permits that routine to end the transaction.
  • Database changes must be protected against conflicting changes by other sessions. Between reading a row and acting on it, another session can change it. The code must use the appropriate lock, a single conditional database operation, or a version/value check that rejects a conflicting update. An existence check alone does not make concurrent creation safe.

Read the full file on GitHub · 301 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 27d ago Changed · +32 tokens per session 16bc58f76056
  2. 1mo ago First seen · 301 lines · 110 tokens per session scan A e98a733b3e04

Subscribe to this mod's changes

abap-code-review-helper is a skill published in the GitHub repository marcellourbani/vscode_abap_remote_fs (399 stars, last pushed 4d ago), licensed MIT. It adds 142 tokens to every session and 8,616 once invoked, about $0.0006 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-15.

Related

Other skills, from other repositories

code-review

Review pull requests for repository fit, meaningful value, trustworthy provenance, differentiation, and maintainability in awesome-copilot.

github/awesome-copilot · 27 tokens

code-changes

Workflow for any task that ends in code changes: issue analysis or triage, pull request review comments, features, bug fixes, refactors. Invoke at the start of such a task, before reading or writing code.

JanDeDobbeleer/oh-my-posh · 48 tokens

sap-transport-gate

Use for SAP Transport Request pre-release gate review (QAS/PRD). Triggers on any TR number in input (pattern: uppercase letters + K + 6 digits, e.g., DEVK900123, ECDK943668). Asks user: code-quality-only or functional+code review. Performs 10-dimension risk review of ABAP/CDS/DDIC source, object list, dependencies…

shrek-abaper/sap-engineering-skill · 185 tokens

abap-code-review

Performs structured pre-release security and quality review of SAP ABAP programs across 9 dimensions (SEC, AUTH, DATA, PERF, STD, INTERFACE, CHANGE, COMP, FUNC), producing a formal sign-off-ready Markdown assessment report. Trigger when the user asks to review, audit, assess, or check ABAP code before release …

shrek-abaper/sap-engineering-skill · 162 tokens

atc-cloudification

Configure ATC clean core and Cloud Readiness checks using the SAP Cloudification Repository, and map ATC findings to clean core levels (A, B, C, D). Use when users ask about ATC check variants for cloud readiness, clean core compliance, clean core levels, released/classic/internal/noAPI object classification…

likweitan/abap-skills · 187 tokens

abap

Comprehensive ABAP code quality checking using abaplint (automated static analysis) and Clean ABAP principles (manual code review). Use when users ask to check, lint, validate, review, or analyze ABAP code for syntax errors, clean code compliance, code quality, best practices, or adherence to Clean ABAP guidelines.…

likweitan/abap-skills · 144 tokens