agentsclimarketplace

Strm mapping

Skill austinsonger/GRC-Mapping-Analyst/.qoder/skills/strm-mapping

GRC Mapping Analyst is a NIST IR 8477-based toolkit for AI-assisted cybersecurity crosswalks, producing deterministic set-theory mappings (equal, subset_of, superset_of, intersects_with, not_related) and 12-column STRM CSV outputs across frameworks, regulations, and control catalogs.

Install
npx -y skills add austinsonger/GRC-Mapping-Analyst --skill strm-mapping

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Use when asked to map, crosswalk, align, compare, or gap-analyze any two cybersecurity frameworks, control catalogs, or regulatory requirements using NIST IR 8477 Set-Theory Relationship Mapping (STRM). Triggers on terms like "map controls", "crosswalk", "framework alignment", "gap analysis", or producing a STRM CSV output file.

The file declares its own license as Apache-2.0. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

9.8 KB, as published. Nobody here has run it

NIST IR 8477 STRM Mapping — GRC Toolkit Skill

When to Activate

Activate this skill whenever the user asks to:

  • Map, crosswalk, align, or compare any two frameworks, catalogs, or control sets
  • Create a STRM CSV output file between any two documents
  • Perform a gap analysis between any source and target document
  • Extend or verify an existing STRM mapping file

Working Directory

All work must be performed inside the working-directory/ folder at the repository root. Open Qoder from the repository root so relative paths resolve correctly.

  • Read input files from working-directory/, knowledge/, or examples/
  • Write all in-progress and output files to working-directory/
  • Never write output to the repo root or any other location

Saving Completed Mappings

When a mapping is fully complete, create a dated artifact folder:

working-directory/mapping-artifacts/YYYY-MM-DD_<FocalFramework>-to-<TargetFramework>/

Place the completed CSV inside the dated folder.


Runtime Parameters

Before beginning any work, confirm both parameters with the user:

ParameterDescriptionExample
Source (Focal) DocumentThe framework being mapped FROMFFIEC CAT, ISO/IEC 27001:2022
Target (Reference) DocumentThe framework being mapped TOCIS Controls v8, NIST CSF 2.0

Step-by-Step Workflow

Scripts to Call (by Step)

StepScript to call
Step 1 (Gather)node scripts/bin/strm-check-existing-mapping.mjs --focal "<Focal>" --target "<Target>" --working-dir working-directory
Step 1 (JSON input)node scripts/bin/strm-extract-json.mjs <file.json>
Step 4 (Write CSV)node scripts/bin/strm-init-mapping.mjs --focal "<Focal>" --target "<Target>" --working-dir working-directory, then node scripts/bin/strm-generate-filename.mjs --focal "<Focal>" --target "<Target>" [--bridge "<Bridge>"]
Post-completion (required)node scripts/bin/strm-validate-csv.mjs --file "<output.csv>"
Post-completionnode scripts/bin/strm-gap-report.mjs --file "<output.csv>" --focal "<Focal>" --target "<Target>" --working-dir working-directory

1. Gather Source Files

Read before generating output:

knowledge/ir8477-strm-reference.md                                 ← STRM methodology rules
working-directory/<source-document>.csv/.pdf/.md/.json/.yml/.toml  ← Focal document
working-directory/<target-document>.csv/.pdf/.md/.json/.yml/.toml  ← Reference document

Search order: working-directory/ → repo root → knowledge/

When an input is JSON and uses HTML-tagged descriptions, run:

node scripts/bin/strm-extract-json.mjs <input.json> [output.csv]

Default output is working-directory/<framework>-extracted.csv with columns: controlId,title,family,description.

Write all intermediate files (extracted control lists, partial drafts) to working-directory/scratch/. Do not use system temp directories.

Check for an existing STRM file for this source→target pair before starting.

2. Identify FDE and RDE

  • FDE (Focal Document Element) = one control from the source document
  • RDE (Reference Document Element) = one control from the target document

For each document: record full name, URL/citation, control ID format.

3. Assign STRM Attributes per Mapping Row

AttributeAllowed ValuesScoring Rule
Confidence Levelshigh, medium, lowhigh=+0, medium=−1, low=−2
NIST IR-8477 Rationalsemantic, functional, syntacticsyntactic=−1, others=+0
STRM Relationshipequal, subset_of, superset_of, intersects_with, not_relatedequal=10, subset/superset=7, intersects=4, not_related=0
Strength of RelationshipInteger 1–10base + confidence adj + rationale adj, clamped to [1,10]
STRM RationaleFree textExplain both FDE and RDE, then why the relationship holds
NotesFree textFlag scope differences, partial overlaps, or gaps

Strength Score Formula

strength = base_score + confidence_adj + rationale_adj
base_score  : equal=10  subset_of=7  superset_of=7  intersects_with=4  not_related=0
confidence  : high=0    medium=-1    low=-2
rationale   : syntactic=-1   semantic=0   functional=0
result      : clamp(strength, 1, 10)

Calibration Defaults

AttributeDefaultOverride Condition
Confidence Levelshighmedium for ambiguity; low for significant inference
NIST IR-8477 Rationalsemanticfunctional for same outcome via different mechanisms. When mapping across different regulatory domains (for example healthcare → law enforcement, financial → defense), default to functional unless control wording and scope are substantially identical. Use syntactic only for word-for-word similarity (<1%).

4. Write the Output CSV

File Naming Convention

Set Theory Relationship Mapping (STRM)_ [(<Focal>-to-<Bridge>)-to-<Target>] - <Focal> to <Target>.csv

For direct mappings, repeat the focal name as bridge.

CSV Structure

Copy TEMPLATE_Set Theory Relationship Mapping (STRM).csv and add data from Row 2:

Row 1: FDE#,FDE Name,Focal Document Element (FDE),Confidence Levels,NIST IR-8477 Rational,STRM Rationale,STRM Relationship,Strength of Relationship,<Target> Requirement Title,Target ID #,<Target> Requirement Description,Notes
Row 2+: <data rows>

Column definitions:

ColHeaderContent
AFDE#Source control ID
BFDE NameShort label for the source control
CFocal Document Element (FDE)Full source control text
DConfidence Levelshigh / medium / low
ENIST IR-8477 Rationalsemantic / functional / syntactic
FSTRM RationaleNarrative explaining both controls and the relationship
GSTRM Relationshipequal / subset_of / superset_of / intersects_with / not_related
HStrength of RelationshipInteger 1–10 (computed)
I<Target> Requirement TitleTarget document short title (replace <Target> with actual target name)
JTarget ID #Target control ID
K<Target> Requirement DescriptionFirst sentence of target control text (replace <Target> with actual target name)
LNotesScope differences, gaps, or caveats

5. Rationale Writing Pattern

<Source> <FDE#> requires <what FDE requires>. <Target> <Target ID#> requires <what RDE requires>. Both <shared objective>.

For intersects_with: append "Both address <overlap>. <Source> additionally covers <A>; <Target> additionally covers <B>."


Transitivity Rules

A→BB→CDerived A→C
equalequalequal
equalXX
XequalX
subset_ofsubset_ofsubset_of
superset_ofsuperset_ofsuperset_of
not_relatedanythingnot_related
intersects_withanythingindeterminate — flag for manual review

Inverse Relationships

ForwardInverse
equalequal
subset_ofsuperset_of
superset_ofsubset_of
intersects_withintersects_with
not_relatednot_related

Quality Rules

  1. Never leave Rationale (Column F) empty — every row needs a narrative.
  2. Strength score must match the formula — compute explicitly, do not guess.
  3. One FDE can map to multiple target controls — one row per target control.
  4. not_related is rare — only when there is genuinely zero overlap.
  5. Do not invent target control IDs — every Target ID# must come from the actual target document.
  6. Confidence defaults to high — lower only when ambiguity or inference is required.
  7. Focus on Baseline maturity first — prioritize baseline/foundational controls.
  8. Adapt column header labels — replace <Target> in columns I and K with the actual target document name (e.g., ISO 27001 Requirement Title, ISO 27001 Requirement Description).
  9. Run a relationship distribution self-check after all rows are complete:
    • If subset_of + superset_of = 0%, review equal rows; many may actually be subset_of.
    • If equal > 50%, review each equal row and confirm neither control explicitly requires more than the other.
    • If one control says "SHALL" and the other says "SHOULD", this is typically subset_of, not equal.

Optional: Risk and Threat-Enriched Mappings

Load these files only when explicitly requested by the user:

FileContents
knowledge/library/risks.jsonSCF 2025.4 risk catalog
knowledge/library/threats.jsonThreat catalog

Trigger phrases: "include risk data", "add threat context", "risk-to-control mapping", "threat-to-control", "use the risk library".

Chain: Threat → Risk → Control — apply transitivity rules when traversing.


Key Resources

ResourcePurpose
TEMPLATE_Set Theory Relationship Mapping (STRM).csvBlank template — copy, never modify
knowledge/ir8477-strm-reference.mdFull NIST IR 8477 methodology
examples/Worked examples for each mapping type
knowledge/library/risks.jsonRisk catalog (opt-in only)
knowledge/library/threats.jsonThreat catalog (opt-in only)

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.