Source profileQuality 74/100Review permissions

openai/skills/skills/.curated/security-ownership-map/SKILL.md

security-ownership-map

Analyze git repositories to build a security ownership topology (people-to-file), compute bus factor and sensitive-code ownership, and export CSV/JSON for graph databases and visualization. Trigger only when the user explicitly wants a security-oriented ownership or bus-factor analysis grounded in git history (for example: orphaned sensitive code, security maintainers, CODEOWNERS reality checks for risk, sensitive hotspots, or ownership clusters). Do not trigger for general maintainer lists or n

Source repository stars
24,265
Declared platforms
0
Static risk flags
1
Last source update
2026-07-14
Source checked
2026-07-28

Decision brief

What it does—and where it fits

Analyze git repositories to build a security ownership topology (people-to-file), compute bus factor and sensitive-code ownership, and export CSV/JSON for graph databases and visualization. Trigger only when the user explicitly wants a security-oriented ownership or bus-factor analysis grounded in git history (for example: orphaned sensitive code, security…

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/openai/skills --skill "skills/.curated/security-ownership-map"
    Safe inspection promptEditorial

    Inspect the Agent Skill "security-ownership-map" from https://github.com/openai/skills/blob/49f948faa9258a0c61caceaf225e179651397431/skills/.curated/security-ownership-map/SKILL.md at commit 49f948faa9258a0c61caceaf225e179651397431. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Workflow

      1. Scope the repo and time window (optional --since/--until). 2. Decide sensitivity rules (use defaults or provide a CSV config). 3. Build the ownership map with scripts/runownershipmap.py (co-change graph is on by default; use --cochange-max-files to ignore supernode commits).…

      Scope the repo and time window (optional --since/--until).Decide sensitivity rules (use defaults or provide a CSV config).Build the ownership map with scripts/runownershipmap.py (co-change graph is on by default; use --cochange-max-files to ignore supernode commits).
    2. 02

      Quick start

      Defaults: author identity, author date, and merge commits excluded. Use --identity committer, --date-field committer, or --include-merges if needed.

      Defaults: author identity, author date, and merge commits excluded. Use --identity committer, --date-field committer, or --include-merges if needed.Example (override co-change excludes):Communities are computed by default. To disable:
    3. 03

      Requirements

      Python 3

      Python 3networkx (required; community detection is enabled by default)- Python 3 - networkx (required; community detection is enabled by default)
    4. 04

      Sensitivity rules

      By default, the script flags common auth/crypto/secret paths. Override by providing a CSV file:

      By default, the script flags common auth/crypto/secret paths. Override by providing a CSV file:
    5. 05

      pattern,tag,weight

      /auth/,auth,1.0 /crypto/,crypto,1.0 /.pem,secrets,1.0 bash python skills/skills/security-ownership-map/scripts/queryownership.py --data-dir ownership-map-out people --limit 10 python skills/skills/security-ownership-map/scripts/queryownership.py --data-dir ownership-map-out file…

      /auth/,auth,1.0 /crypto/,crypto,1.0 /.pem,secrets,1.0 bash python skills/skills/security-ownership-map/scripts/queryownership.py --data-dir ownership-map-out people --limit 10 python skills/skills/security-ownership-map…

    Permission review

    Static risk signals and limitations

    Runs scripts

    medium · line 32

    The documentation asks the agent to run terminal commands or scripts.

    python skills/skills/security-ownership-map/scripts/run_ownership_map.py \

    Runs scripts

    medium · line 43

    The documentation asks the agent to run terminal commands or scripts.

    python skills/skills/security-ownership-map/scripts/run_ownership_map.py \

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score74/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars24,265SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    openai/skills
    Skill path
    skills/.curated/security-ownership-map/SKILL.md
    Commit
    49f948faa9258a0c61caceaf225e179651397431
    License
    Not declared
    Collected
    2026-07-28
    Default branch
    main
    View the original SKILL.md

    Security Ownership Map

    Overview

    Build a bipartite graph of people and files from git history, then compute ownership risk and export graph artifacts for Neo4j/Gephi. Also build a file co-change graph (Jaccard similarity on shared commits) to cluster files by how they move together while ignoring large, noisy commits.

    Requirements

    • Python 3
    • networkx (required; community detection is enabled by default)

    Install with:

    pip install networkx
    

    Workflow

    1. Scope the repo and time window (optional --since/--until).
    2. Decide sensitivity rules (use defaults or provide a CSV config).
    3. Build the ownership map with scripts/run_ownership_map.py (co-change graph is on by default; use --cochange-max-files to ignore supernode commits).
    4. Communities are computed by default; graphml output is optional (--graphml).
    5. Query the outputs with scripts/query_ownership.py for bounded JSON slices.
    6. Persist and visualize (see references/neo4j-import.md).

    By default, the co-change graph ignores common “glue” files (lockfiles, .github/*, editor config) so clusters reflect actual code movement instead of shared infra edits. Override with --cochange-exclude or --no-default-cochange-excludes. Dependabot commits are excluded by default; override with --no-default-author-excludes or add patterns via --author-exclude-regex.

    If you want to exclude Linux build glue like Kbuild from co-change clustering, pass:

    python skills/skills/security-ownership-map/scripts/run_ownership_map.py \
      --repo /path/to/linux \
      --out ownership-map-out \
      --cochange-exclude "**/Kbuild"
    

    Quick start

    Run from the repo root:

    python skills/skills/security-ownership-map/scripts/run_ownership_map.py \
      --repo . \
      --out ownership-map-out \
      --since "12 months ago" \
      --emit-commits
    

    Defaults: author identity, author date, and merge commits excluded. Use --identity committer, --date-field committer, or --include-merges if needed.

    Example (override co-change excludes):

    python skills/skills/security-ownership-map/scripts/run_ownership_map.py \
      --repo . \
      --out ownership-map-out \
      --cochange-exclude "**/Cargo.lock" \
      --cochange-exclude "**/.github/**" \
      --no-default-cochange-excludes
    

    Communities are computed by default. To disable:

    python skills/skills/security-ownership-map/scripts/run_ownership_map.py \
      --repo . \
      --out ownership-map-out \
      --no-communities
    

    Sensitivity rules

    By default, the script flags common auth/crypto/secret paths. Override by providing a CSV file:

    # pattern,tag,weight
    **/auth/**,auth,1.0
    **/crypto/**,crypto,1.0
    **/*.pem,secrets,1.0
    

    Use it with --sensitive-config path/to/sensitive.csv.

    Output artifacts

    ownership-map-out/ contains:

    • people.csv (nodes: people)
    • files.csv (nodes: files)
    • edges.csv (edges: touches)
    • cochange_edges.csv (file-to-file co-change edges with Jaccard weight; omitted with --no-cochange)
    • summary.json (security ownership findings)
    • commits.jsonl (optional, if --emit-commits)
    • communities.json (computed by default from co-change edges when available; includes maintainers per community; disable with --no-communities)
    • cochange.graph.json (NetworkX node-link JSON with community_id + community_maintainers; falls back to ownership.graph.json if no co-change edges)
    • ownership.graphml / cochange.graphml (optional, if --graphml)

    people.csv includes timezone detection based on author commit offsets: primary_tz_offset, primary_tz_minutes, and timezone_offsets.

    LLM query helper

    Use scripts/query_ownership.py to return small, JSON-bounded slices without loading the full graph into context.

    Examples:

    python skills/skills/security-ownership-map/scripts/query_ownership.py --data-dir ownership-map-out people --limit 10
    python skills/skills/security-ownership-map/scripts/query_ownership.py --data-dir ownership-map-out files --tag auth --bus-factor-max 1
    python skills/skills/security-ownership-map/scripts/query_ownership.py --data-dir ownership-map-out person --person alice@corp --limit 10
    python skills/skills/security-ownership-map/scripts/query_ownership.py --data-dir ownership-map-out file --file crypto/tls
    python skills/skills/security-ownership-map/scripts/query_ownership.py --data-dir ownership-map-out cochange --file crypto/tls --limit 10
    python skills/skills/security-ownership-map/scripts/query_ownership.py --data-dir ownership-map-out summary --section orphaned_sensitive_code
    python skills/skills/security-ownership-map/scripts/query_ownership.py --data-dir ownership-map-out community --id 3
    

    Use --community-top-owners 5 (default) to control how many maintainers are stored per community.

    Basic security queries

    Run these to answer common security ownership questions with bounded output:

    # Orphaned sensitive code (stale + low bus factor)
    python skills/skills/security-ownership-map/scripts/query_ownership.py --data-dir ownership-map-out summary --section orphaned_sensitive_code
    
    # Hidden owners for sensitive tags
    python skills/skills/security-ownership-map/scripts/query_ownership.py --data-dir ownership-map-out summary --section hidden_owners
    
    # Sensitive hotspots with low bus factor
    python skills/skills/security-ownership-map/scripts/query_ownership.py --data-dir ownership-map-out summary --section bus_factor_hotspots
    
    # Auth/crypto files with bus factor <= 1
    python skills/skills/security-ownership-map/scripts/query_ownership.py --data-dir ownership-map-out files --tag auth --bus-factor-max 1
    python skills/skills/security-ownership-map/scripts/query_ownership.py --data-dir ownership-map-out files --tag crypto --bus-factor-max 1
    
    # Who is touching sensitive code the most
    python skills/skills/security-ownership-map/scripts/query_ownership.py --data-dir ownership-map-out people --sort sensitive_touches --limit 10
    
    # Co-change neighbors (cluster hints for ownership drift)
    python skills/skills/security-ownership-map/scripts/query_ownership.py --data-dir ownership-map-out cochange --file path/to/file --min-jaccard 0.05 --limit 20
    
    # Community maintainers (for a cluster)
    python skills/skills/security-ownership-map/scripts/query_ownership.py --data-dir ownership-map-out community --id 3
    
    # Monthly maintainers for the community containing a file
    python skills/skills/security-ownership-map/scripts/community_maintainers.py \
      --data-dir ownership-map-out \
      --file network/card.c \
      --since 2025-01-01 \
      --top 5
    
    # Quarterly buckets instead of monthly
    python skills/skills/security-ownership-map/scripts/community_maintainers.py \
      --data-dir ownership-map-out \
      --file network/card.c \
      --since 2025-01-01 \
      --bucket quarter \
      --top 5
    

    Notes:

    • Touches default to one authored commit (not per-file). Use --touch-mode file to count per-file touches.
    • Use --window-days 90 or --weight recency --half-life-days 180 to smooth churn.
    • Filter bots with --ignore-author-regex '(bot|dependabot)'.
    • Use --min-share 0.1 to show stable maintainers only.
    • Use --bucket quarter for calendar quarter groupings.
    • Use --identity committer or --date-field committer to switch from author attribution.
    • Use --include-merges to include merge commits (excluded by default).

    Summary format (default)

    Use this structure, add fields if needed:

    {
      "orphaned_sensitive_code": [
        {
          "path": "crypto/tls/handshake.rs",
          "last_security_touch": "2023-03-12T18:10:04+00:00",
          "bus_factor": 1
        }
      ],
      "hidden_owners": [
        {
          "person": "alice@corp",
          "controls": "63% of auth code"
        }
      ]
    }
    

    Graph persistence

    Use references/neo4j-import.md when you need to load the CSVs into Neo4j. It includes constraints, import Cypher, and visualization tips.

    Notes

    • bus_factor_hotspots in summary.json lists sensitive files with low bus factor; orphaned_sensitive_code is the stale subset.
    • If git log is too large, narrow with --since or --until.
    • Compare summary.json against CODEOWNERS to highlight ownership drift.

    Alternatives

    Compare before choosing

    Computed 9831,966

    K-Dense-AI/scientific-agent-skills

    dask

    Distributed computing for larger-than-RAM pandas/NumPy workflows. Use when you need to scale existing pandas/NumPy code beyond memory or across clusters. Best for parallel file processing, distributed ML, integration with existing pandas code. For out-of-core analytics on single machine use vaex; for in-memory speed use polars.

    Computed 9631,966

    K-Dense-AI/scientific-agent-skills

    scanpy

    Standard single-cell RNA-seq analysis pipeline. Use for QC, normalization, dimensionality reduction (PCA/UMAP/t-SNE), clustering, differential expression, visualization, and converting R-friendly single-cell formats such as Seurat or SingleCellExperiment RDS files into h5ad for Scanpy. Best for exploratory scRNA-seq analysis with established workflows. For deep learning models use scvi-tools; for data format questions use anndata.

    Computed 9031,966

    K-Dense-AI/scientific-agent-skills

    astropy

    Core Python library for astronomy and astrophysics workflows that need Astropy APIs, including units/quantities, coordinates, FITS I/O, tables, time systems, WCS, and cosmology. Use when implementing or debugging astronomical data analysis code with Astropy.

    Computed 8837,126

    github/awesome-copilot

    security-review

    AI-powered codebase security scanner that reasons about code like a security researcher — tracing data flows, understanding component interactions, and catching vulnerabilities that pattern-matching tools miss. Use this skill when asked to scan code for security vulnerabilities, find bugs, check for SQL injection, XSS, command injection, exposed API keys, hardcoded secrets, insecure dependencies, access control issues, or any request like "is my code secure?", "review for security issues", "audi