К основному содержанию
скилл Claude Code CX Codex Cursor GitHub Copilot официальный · OpenAI

security-ownership-map — скилл для Claude Code: карта владения кодом

Строит карту «люди — файлы» из git-истории, считает bus factor и находит чувствительный код, за который отвечает слишком мало людей.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add openai/skills --skill security-ownership-map -a claude-code
Открыть на GitHub

Что делает security-ownership-map

Скилл разбирает git-историю репозитория и строит двудольный граф: кто какие файлы трогал. Из этого графа он считает bus factor по каждому файлу и определяет, какие участки чувствительного кода остались без активного владельца. Второй граф — файл-файл: Jaccard-похожесть по общим коммитам показывает, какие файлы меняются вместе, а крупные шумные коммиты и glue-файлы вроде lockfile отбрасываются по умолчанию.

На выходе — CSV с людьми, файлами и рёбрами касаний, summary.json с находками (осиротевший чувствительный код, скрытые владельцы, горячие точки с низким bus factor), JSON для Neo4j и Gephi. В people.csv скилл определяет часовой пояс автора по смещениям его коммитов: primary_tz_offset, primary_tz_minutes, timezone_offsets.

Для работы нужен Python 3 и библиотека networkx (pip install networkx). Запуск — через scripts/run_ownership_map.py, окно истории ограничивается флагами --since и --until. Чувствительные пути по умолчанию — auth, crypto, секреты, но их можно переопределить CSV-конфигом через --sensitive-config.

Какие задачи решает

  • Найти чувствительный код, у которого остался один активный владелец
  • Вычислить bus factor по файлам из git-истории
  • Кластеризовать файлы по совместным изменениям
  • Экспортировать граф владения для Neo4j или Gephi
  • Проверить, совпадает ли реальное владение с CODEOWNERS

Примеры запросов агенту

  • Построй карту владения для этого репозитория за последний год, выведи осиротевший чувствительный код
  • Найди файлы с bus factor не больше 1 среди auth и crypto
  • Кто чаще всех трогает чувствительный код в этом репозитории?

Как установить security-ownership-map

1Через Skills CLI (Vercel)

npx skills add openai/skills --skill security-ownership-map -a claude-code

2Вручную: положить файлы

~/.claude/skills/security-ownership-map/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/security-ownership-map/

Из того же набора20

Весь набор →
pdf официальный openai Скилл для чтения, создания и проверки PDF, где важно, как выглядит страница. Пригодится, когда агент собирает документ и должен сам увидеть результат. Claude Code CX Codex Cursor +1 13 400установок gh-fix-ci официальный openai Находит упавшие проверки GitHub Actions в пулл-реквесте, собирает логи ошибок и готовит план исправлений. Скилл применяет правки только после подтверждения. Claude Code CX Codex Cursor +1 11 400установок openai-docs официальный openai Скилл ищет актуальные материалы OpenAI и помогает отвечать по API, Codex, моделям и обновлению промптов с опорой на официальную документацию. Claude Code CX Codex Cursor +1 6 100установок imagegen официальный openai Скилл создаёт и редактирует растровые изображения: иллюстрации, текстуры, спрайты и мокапы. Нужен, когда результатом должен стать bitmap-файл. Claude Code CX Codex Cursor +1 5 700установок jupyter-notebook официальный openai Создаёт чистые Jupyter-ноутбуки для экспериментов и пошаговых руководств через готовые шаблоны и вспомогательный скрипт. Помогает избежать ручной сборки сырого JSON. Claude Code CX Codex Cursor +1 5 600установок skill-creator официальный openai Руководство по созданию и обновлению скиллов для ИИ-агентов. Помогает упаковать рабочие процессы, скрипты и документацию без лишней траты токенов. Claude Code CX Codex Cursor +1 4 900установок gh-address-comments официальный openai Скилл помогает найти открытый pull request текущей ветки, разобрать комментарии ревью и применить выбранные исправления через gh. Claude Code CX Codex Cursor +1 4 800установок cloudflare-deploy официальный openai Скилл помогает выбрать сервис Cloudflare и подготовить деплой приложения или инфраструктуры через Workers, Pages и связанные продукты. Claude Code CX Codex Cursor +1 4 300установок

Похожие

sql-code-review официальный github Проверяет SQL-код на проблемы безопасности, производительности и поддержки. Пригодится перед ревью запросов или схемы базы данных. GitHub Copilot 14 060установок gcloud официальный Google LLC Проверяет команды gcloud перед запуском, ограничивает объём вывода и задаёт правила для операций в Google Cloud. Нужен при работе с CLI. Claude Code Gemini CLI CX Codex 10 974установок postgresql-code-review официальный github Проверяет SQL и схему на ошибки, характерные для PostgreSQL. Пригодится перед ревью миграций, функций и запросов с JSONB. GitHub Copilot 12 608установок code-review-excellence Seth Hobson Скилл помогает разбирать pull request по этапам, находить ошибки и давать конкретную обратную связь. Подойдёт для ревью кода и настройки командных стандартов. Claude Code CX Codex Cursor 30 193установок make-repo-contribution официальный github Скилл проверяет правила репозитория перед issue, веткой, коммитом или PR и помогает пройти процесс контрибьюции без пропуска обязательных шагов. GitHub Copilot 11 073установок agent-governance официальный github Добавляет шаблоны политик и проверок для ИИ-агентов с доступом к API, базам данных и файловой системе. Нужен, когда действия агента требуется ограничивать и журналировать. GitHub Copilot 9 623установок git-guardrails-claude-code Matt Pocock Скилл ставит хук Claude Code, который останавливает опасные Git-команды до их запуска. Нужен, если агент не должен делать push или удалять изменения. Claude Code 499 069установок ponytail-review DietrichGebert Скилл проверяет изменения глубже обычного diff: читает связанный код, ищет ошибки, риски, проблемы нагрузки и недостающие тесты. Пригодится для ревью PR и коммитов. Claude Code CX Codex Cursor +1 56 300установок

Вопросы о security-ownership-map

Как установить security-ownership-map в Claude Code?

Выполните npx skills add openai/skills --skill security-ownership-map -a claude-code. Скилл появится в ~/.claude/skills/security-ownership-map/SKILL.md.

Что делает security-ownership-map?

Анализирует git-историю, строит граф «люди — файлы», считает bus factor и находит чувствительный код с низким покрытием владельцами. Также кластеризует файлы по совместным изменениям через Jaccard-похожесть.

Какие зависимости нужны для работы?

Python 3 и библиотека networkx. Устанавливается командой pip install networkx.

Исходный текст

SKILL.md · Apache-2.0
---
name: "security-ownership-map"
description: "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 non-security ownership questions."
---

# 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:

```bash
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:

```bash
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:

```bash
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):

```bash
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:

```bash
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:

```bash
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:

```bash
# 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:

```json
{
  "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.

© openai · Apache-2.0 · openai/skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой