# mantis-structural-index

Строит по исходникам индекс смысловых единиц кода и отвечает на вопросы «кто вызывает эту функцию» и «где кончается её тело». Пригодится до того, как агент пойдёт читать незнакомый код.

- скилл · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 1500 установок · ★ 2534
- Автор: google · официальный репозиторий Google
- Лицензия: Apache-2.0 · policy=mirror · начало файла — в конце страницы
- Исходник: https://github.com/google/mantis/tree/HEAD/skills/mantis-structural-index/SKILL.md
- Обновлён: 2026-10-25
- HTML: https://affpapa.org/nevibecode/skills/mantis-structural-index

## Что делает

Скилл разбирает все файлы под `CODE_ROOT`, режет код на независимые смысловые единицы, каждой считает ключ по содержимому и складывает результат в `workspace/kb/structural_index/`. На выходе манифест, каталог `catalog.sqlite` и два скрипта: `build_structural_index.py` собирает, `query_structural_index.py` отвечает. Запросы дают `find_callers(symbol)` и `get_function_boundary(file, line)` — места вызова и границы тела функции приходят агенту как данные, а не угадываются по выводу grep. Если бэкенд для раздела недоступен, скилл откатывается на grep и продолжает работу.

Ему нужны `CODE_ROOT` и `SNAPSHOT_ID`. Оба необязательны: без аргументов он читает текущую папку, ставит `snapshot_id` в значение `unknown` и пишет индекс в `./workspace/kb/structural_index/`. Повторный запуск на том же снапшоте не пересобирает индекс, а берёт готовый манифест, а неизменившиеся единицы переиспользуются между снапшотами по ключам содержимого. Сам `CODE_ROOT` только читается.

Пока скилл не вызовет харнесс, `mantis-plan` или `mantis-researcher`, он отдаёт пустой индекс. Молча. Значит, стоит проверить, что цепочка вызовов вообще до него доходит, иначе агент рассуждает без структурных данных.

## Установка

### Claude Code (родная платформа)

1. **Через Skills CLI (Vercel)**
```bash
npx skills add google/mantis --skill mantis-structural-index -a claude-code
```

2. **Вручную: положить файлы**
- Файл: `~/.claude/skills/mantis-structural-index/SKILL.md` — Папка скилла целиком; для одного проекта — .claude/skills/mantis-structural-index/

### Codex

1. **Через Skills CLI (Vercel)**
```bash
npx skills add google/mantis --skill mantis-structural-index -a codex
```

2. **Вручную: положить файлы**
- Файл: `.agents/skills/mantis-structural-index/SKILL.md` — Для всех проектов — ~/.agents/skills/

### Cursor

1. **Через Skills CLI (Vercel)**
```bash
npx skills add google/mantis --skill mantis-structural-index -a cursor
```

2. **Вручную: положить файлы**
- Файл: `.cursor/skills/mantis-structural-index/SKILL.md` — Cursor читает и .agents/skills/, и .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install google/mantis mantis-structural-index
```

2. **Вручную: положить файлы**
- Файл: `.github/skills/mantis-structural-index/SKILL.md`

### Gemini CLI

1. **Через Skills CLI (Vercel)**
```bash
npx skills add google/mantis --skill mantis-structural-index -a gemini-cli
```

2. **Командой платформы**
```bash
gemini skills install https://github.com/google/mantis --path skills/mantis-structural-index
```

### Windsurf (Devin Desktop)

**Вручную: положить файлы**
- Файл: `.devin/skills/mantis-structural-index/SKILL.md` — Старый путь .windsurf/skills/ тоже читается

### OpenCode

**Через Skills CLI (Vercel)**
```bash
npx skills add google/mantis --skill mantis-structural-index -a opencode
```

### Claude.ai

**Claude.ai**
- Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/google/mantis/tree/HEAD/skills/mantis-structural-index/SKILL.md

## Когда брать
- найти все места вызова функции до правки
- отдать агенту границы функции вместо диапазона строк
- пересобрать индекс только по изменившимся единицам
- проиндексировать код без готового снапшота
- подключить предсобранный индекс в формате SCIP, Kythe или LSIF

## Примеры запросов агенту
- \`/mantis-structural-index` — собери индекс для активного снапшота
- построй структурный индекс и покажи через `find_callers(<symbol>)`, кто вызывает эту функцию
- какие границы у функции? возьми `get_function_boundary(<file>, <line>)`

## Похожие
- [code-deduplication](https://affpapa.org/nevibecode/skills/code-deduplication.md) — скилл · 581 установка
- [trailmark-structural](https://affpapa.org/nevibecode/skills/trailmark-structural.md) — скилл · 3900 установок
- [morph-search](https://affpapa.org/nevibecode/skills/morph-search.md) — скилл · 489 установок
- [estimate](https://affpapa.org/nevibecode/skills/estimate.md) — скилл · 478 установок
- [file-operations](https://affpapa.org/nevibecode/skills/file-operations.md) — скилл · 414 установок
- [codebase-search](https://affpapa.org/nevibecode/skills/codebase-search.md) — скилл · 392 установки

Из того же набора: [google/mantis](https://affpapa.org/nevibecode/by/google/mantis.md) — 19 карточек

_Часть страницы не вошла по размеру — она есть в HTML-версии._

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
