indexion-kgf — скилл для Claude Code: отладка KGF-спек
Показывает токены, события парсинга и извлечённые рёбра зависимостей из файлов, чтобы разобраться, как indexion обрабатывает исходники.
npx skills add trkbt10/indexion-skills --skill indexion-kgf -a claude-codeЧто делает indexion-kgf
Скилл даёт доступ к подкомандам indexion kgf: list показывает установленные спеки, update скачивает свежие с GitHub, add ставит одну спеку по имени. Для разбора конкретного файла есть inspect (всё сразу), tokens, events и edges — по отдельности. Опция --spec=NAME задаёт спеку вручную, иначе она определяется автоматически; --kgf-dir=PATH указывает каталог спек, по умолчанию это kgfs.
Пригодится, когда indexion grep не находит то, что вы ждёте. Паттерны grep опираются на KGF-токенизацию, а алиасы вроде pub → KW_pub берутся из секции === lex в спеке. Сначала смотрите реальные токены файла через kgf tokens, потом правите паттерн под фактические виды токенов. Скилл также описывает типичные ошибки при написании спек: порядок альтернатив в PEG (срабатывает первое совпадение), пропущенный NL? между доккомментарием и ключевым словом, конфликты приоритета токенов и порядок событий снизу вверх с передачей данных через bind/$scope.
Проверка после правки спеки — обязательный шаг: убедитесь, что доккомментарий попал в рёбра declares, иначе смотрите events и ищите, куда ушёл DocComment. Скилл рассчитан на работу с CLI indexion, поэтому без него команды ничего не покажут.
Какие задачи решает
- посмотреть, как токенизируется конкретный файл
- найти, куда пропал доккомментарий при извлечении рёбер
- починить grep-паттерн, который не совпадает с кодом
- разобрать порядок альтернатив в PEG-правиле спеки
- проверить, что после правки KGF рёбра
declaresсодержат doc
Примеры запросов агенту
- покажи токены файла
src/config/paths.mbt - почему grep не находит
KW_pub KW_fnв этом файле? - сравни события парсинга
test_file.tsсо спекой typescript
Как установить indexion-kgf
1Через Skills CLI (Vercel)
npx skills add trkbt10/indexion-skills --skill indexion-kgf -a claude-code2Вручную: положить файлы
~/.claude/skills/indexion-kgf/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/indexion-kgf/
1Через Skills CLI (Vercel)
npx skills add trkbt10/indexion-skills --skill indexion-kgf -a codex2Вручную: положить файлы
.agents/skills/indexion-kgf/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add trkbt10/indexion-skills --skill indexion-kgf -a cursor2Вручную: положить файлы
.cursor/skills/indexion-kgf/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install trkbt10/indexion-skills indexion-kgf2Вручную: положить файлы
.github/skills/indexion-kgf/SKILL.md1Через Skills CLI (Vercel)
npx skills add trkbt10/indexion-skills --skill indexion-kgf -a gemini-cli2Командой платформы
gemini skills install https://github.com/trkbt10/indexion-skills --path skills/indexion-kgfВручную: положить файлы
.devin/skills/indexion-kgf/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add trkbt10/indexion-skills --skill indexion-kgf -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о indexion-kgf
Как установить indexion-kgf в Claude?
Выполните npx skills add trkbt10/indexion-skills --skill indexion-kgf -a claude-code. Скилл появится в ~/.claude/skills/indexion-kgf/SKILL.md.
Что делает indexion-kgf?
Показывает токены, события парсинга и извлечённые рёбра для файла через подкоманды indexion kgf. Нужен при разработке спек и когда вывод анализа выглядит неправильно.
Чем kgf tokens отличается от kgf inspect?
inspect выводит токены, события и рёбра сразу, а tokens — только токенизацию. Для точечной отладки удобнее отдельные подкоманды.
Исходный текст
SKILL.md · Apache-2.0
---
name: indexion-kgf
description: Debug and inspect KGF specs — view tokenization results, parse trees, and extracted edges from source files. Use when adding/fixing language support or when indexion's analysis output looks wrong.
---
# indexion kgf
Inspect and debug KGF language specs by viewing tokens, parse events, and extracted edges.
## When to Use
- User wants to debug how indexion processes a specific file
- User is developing or modifying a KGF spec
- User asks "how does indexion parse this file?"
- Verifying that tokenization/parsing works correctly for a language
- **Debugging grep patterns**: when a grep pattern doesn't match, use
`kgf tokens` to see the actual token kinds
## Subcommands
### `indexion kgf list` — List Installed Specs
```bash
indexion kgf list
```
### `indexion kgf update` — Update All Specs
Download the latest specs from GitHub.
```bash
indexion kgf update
```
### `indexion kgf add` — Install a Single Spec
```bash
indexion kgf add <spec-name>
```
### `indexion kgf inspect` — Full Inspection
Show tokens, events, and edges all at once.
```bash
indexion kgf inspect <file>
indexion kgf inspect --spec=typescript src/app.ts
```
### `indexion kgf tokens` — Tokenization Only
Show how a file is tokenized.
```bash
indexion kgf tokens <file>
indexion kgf tokens --spec=go-mod go.mod
```
### `indexion kgf events` — Parse Events Only
Show parse events generated from tokens.
```bash
indexion kgf events <file>
```
### `indexion kgf edges` — Extracted Edges Only
Show the dependency edges extracted from a file.
```bash
indexion kgf edges <file>
indexion kgf edges fixtures/project/npm/package.json
```
## Options
| Option | Default | Description |
|--------|---------|-------------|
| `--spec=NAME` | auto-detect | KGF spec name to use |
| `--kgf-dir=PATH` | kgfs | KGF specs directory |
## Relationship to grep
`indexion grep` uses KGF tokenization under the hood. Pattern aliases
(`pub` → `KW_pub`) are derived from the `=== lex` section of KGF specs.
When a grep pattern doesn't match as expected:
```bash
# 1. See the actual tokens for a file
indexion kgf tokens src/config/paths.mbt
# 2. Check which token kinds exist
indexion kgf tokens src/config/paths.mbt | head -20
# 3. Then adjust your grep pattern to match the actual token kinds
indexion grep "KW_pub KW_fn Ident" src/config/paths.mbt
```
Common token kinds (MoonBit):
- `KW_pub`, `KW_fn`, `KW_struct`, `KW_enum`, `KW_type`, `KW_trait`, `KW_let`, `KW_for`
- `Ident` (lowercase identifiers), `TypeIdent` (PascalCase type names)
- `LPAREN`, `RPAREN`, `LBRACE`, `RBRACE`, `LBRACKET`, `RBRACKET`
- `NL` (newline), `SKIP` (whitespace — filtered from grep patterns)
- `DocComment`, `DocLine`, `DocSection`, `LineComment`, `BlockComment`
- `String`, `Number`, `Char`
## Workflow
1. Run `indexion kgf inspect <file>` to see the full processing pipeline
2. If something looks wrong, drill down with `tokens`, `events`, or `edges`
3. Compare with the KGF spec file (`kgfs/<lang>.kgf`) to diagnose issues
## KGF Development Pitfalls
Common bugs found when writing or modifying KGF specs:
### PEG Item Ordering (first-match-wins)
KGF uses PEG parsing. In `Item -> A / B / C`, if A matches, B and C are
never tried. DocComment as a standalone alternative **before** declaration
rules will consume doc comments that should be attached to declarations.
```
# BAD: DocComment before FuncDecl — doc is consumed as standalone item
Item -> NL / DocComment / FuncDecl / Other
# GOOD: DocComment after declarations — FuncDecl's doc:DocComment? gets it
Item -> NL / FuncDecl / DocComment / Other
```
### NL Between Doc and Keyword
Source code has newlines between doc comments and declarations. Without
`NL?` or `NL*`, the optional doc capture fails silently:
```
# BAD: DocComment immediately followed by keyword — NL breaks the match
FuncDecl -> doc:DocComment? KW_fn id:Ident ...
# GOOD: NL? allows the typical newline between doc and keyword
FuncDecl -> doc:DocComment? NL? KW_fn id:Ident ...
```
### Bottom-Up Event Order (bind/scope)
Events fire bottom-up: child rules before parent rules. If ExportDecl
wraps FunctionDecl, FunctionDecl fires first. Use `bind`/`$scope` to
pass data from child to parent:
```
on FunctionDecl {
bind ns "value" name "child_decl_id" to $id
edge declares from $file to sym_id attrs obj(...)
}
on ExportDecl when $doc {
let id = $scope("value", "child_decl_id")
edge declares from $file to sym_id attrs obj("doc", $doc, ...)
}
```
### Token Priority Conflicts
Tokens defined earlier take priority. A generic `Operator /[=+\-*]+/`
before `EQ /=/` will consume `=` as Operator. Define specific tokens first:
```
# BAD: Operator matches = before EQ can
TOKEN Operator /[!$%&*+\-.\/:<=>?@^|~]+/
TOKEN EQ /=/
# GOOD: EQ defined first, takes priority
TOKEN EQ /=/
TOKEN Operator /[!$%&*+\-.\/:<=>?@^|~]+/
```
### Verifying Doc Extraction
After modifying a KGF, always verify doc appears in declares edges:
```bash
# Must show doc="..." in the declares edge
indexion kgf edges test_file.ts --spec=typescript | grep declares
# If doc is missing, check events to see where the DocComment went
indexion kgf events test_file.ts --spec=typescript | grep DocComment
```
© trkbt10 · Apache-2.0 · trkbt10/indexion-skills