Deliver pending skills on session_compact when agent is not idle, and skip before_agent_start consume when steer already ran for compaction. Co-authored-by: Cursor <cursoragent@cursor.com>
pi-skill-reinject
Pi Coding Agent extension: отслеживает вызванные skills и повторно инжектит их после auto compaction.
Статус: реализовано (v1)
Установка
# из клона репозитория
pi -e ./src/index.ts
# или абсолютный путь
pi -e ~/Documents/repos/pi-auto-reinjection/src/index.ts
Для постоянной установки укажите путь к src/index.ts в ~/.pi/agent/settings.json → extensions (нужен весь каталог src/, не один файл). См. Pi extensions.
По умолчанию extension выключен. Включение:
/skill-reinject on # эта сессия
/skill-reinject global on # навсегда (~/.pi/agent/settings.json)
Команда /skill-reinject
/skill-reinject # статус (enabled, delivery, tracked, pending)
/skill-reinject on | off | reset # session override
/skill-reinject global on | off # глобальный default
/skill-reinject list | clear # tracked skills
/skill-reinject now # принудительный re-inject (debug)
/skill-reinject integration auto|defer|immediate|off
Алиасы: /sr, /skills-reinject. Footer status: on·N / off·N.
Полный синтаксис и настройки — SPEC.md §7.
Как это работает
Pi хранит в контексте только описания skills; полный SKILL.md теряется при compaction. Extension отслеживает вызванные skills (/skill:name, skill-блоки, read на SKILL.md при trackReadPaths: true) и после auto compaction повторно инжектит отсутствующие в kept window блоки — тем же форматом, что /skill:name.
Skills via --skill and discovery paths
| Источник skill | Трекинг | Re-inject после compact |
|---|---|---|
Discovery (~/.pi/agent/skills, .pi/skills) |
Да | По имени в resourceLoader |
CLI --skill /path/to/SKILL.md |
Да (slash / skill-блок) |
Да, если SKILL.md ещё на диске по tracked.filePath |
--resume без повторного --skill |
Восстанавливается из state entry / rescan | Да при requireRegistered: false (default) |
По умолчанию skillReinject.requireRegistered — false: tracked skill re-injectится с диска, даже если resourceLoader его не знает (типично для --skill вне discovery paths). Уведомление: re-injected "<name>" from disk.
Строгий режим — только skills из resourceLoader:
{
"skillReinject": {
"requireRegistered": true
}
}
Полезно при --no-skills или осознанном отключении skill через pi config, когда re-inject с диска нежелателен.
Совместимость с pi-auto-compact
Рассчитан на совместную работу с @capyup/pi-auto-compact. При обнаружении команды auto-compact re-inject идёт через defer + before_agent_start, чтобы не конкурировать с follow-up pi-auto-compact (см. SPEC.md §16).
Coexistence с Pi default auto-compaction: оба механизма могут сработать в одной сессии. При использовании pi-auto-compact можно отключить встроенный compaction Pi ("compaction.enabled": false в settings) или оставить оба — skill-reinject отработает после каждого auto compaction. Extension не отключает чужой compaction; при первом обнаружении обоих механизмов показывает одноразовый hint.
Разработка
npm run typecheck # tsc --noEmit
npm test # vitest
Документация
- SPEC.md — полное ТЗ
- Pi extensions
- Pi skills
- Pi compaction
- pi-auto-compact