Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 0.27.0 · метрики 1.13.0 · 2026-07-23 00:49 UTC

nicobailon / pi-subagents

Pi extension for async subagent delegation with truncation, artifacts, and session sharing

TypeScriptЛіцензію не виявлено★ 2 683 зірки⑂ 412 форківз січ. 2026 р.Переглянути на GitHub ↗

nicobailon/pi-subagents має індекс здоров’я 67 зі 100, що відповідає смузі «Помірний». Найвищий показник — Vitality (90/100), найнижчий — Security (49/100). Останнє оновлення було 1 день тому. Більшість нещодавньої роботи виконує один учасник.

67
загалом / 100
Помірний

Індекс здоров'я програмного забезпечення

Метрики згруповано у зважені категорії на шкалі 1–100. Загальна оцінка починається як їхнє середнє; коли публічні дані активують Політику юрисдикцій високого ризику, рейтинг коригується й отримує верхню межу 49 («Під ризиком»). Готовність до ШІ не входить до індексу.

67
Відмінний85-100Зразковий; відповідає практично всім перевіреним критеріям
Добрий70-84Здоровий; незначні прогалини
Помірний50-69Прийнятний, але з помітними прогалинами; рекомендовано перевірку
У зоні ризику30-49Суттєві слабкі місця; впровадження потребує обережності
Критичний1-29Серйозні проблеми (покинутий, єдиний мейнтейнер, без базової гігієни)
ЖиттєздатністьСпільнота тавпровадженняСталість таврядуванняІнженернаякістьБезпекаГотовність доШІ

Профіль оцінок

Кожна вісь — окрема категорія. Форма важить більше, ніж середнє: здоровий об'єкт заповнює всю фігуру, тоді як профіль із піками та провалами означає, що сила в одному вимірі маскує ризик в іншому.

Власність

Nico BailonОсобистий обліковий запис
1 752 підписники130 публічних репозиторіївз груд. 2012 р.Pika Labs

Цей репозиторій належить особистому обліковому запису. Проєкт з єдиним власником несе більший ризик безперервності, ніж підтримуваний організацією.

Пакетні екосистеми

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікаціяТеги
npmpi-subagents0.35.1124 332914 дні томуpi-packagepipi-coding-agentsubagentsaiagentscli

Метрики за категоріями

Життєздатність

Чи живий проєкт — чи пишеться код і чи виходять релізи?

90Відмінний · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 1 дн. тому
18.7/36Ритм комітів — 27/52 тижнів із комітами
18/18Обсяг комітів — 532 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year532
human_commit_share1
days_since_last_push1
active_weeks_last_year27
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 89 релізів
36/36Свіжість релізів — останній реліз 4 дн. тому
27/27Ритм релізів — реліз кожні ~3,1 дн.
0/10OpenSSF Scorecard: Signed-Releases — немає даних
Використані вхідні дані
releases_count89
latest_release_tagv0.35.1
releases_from_tagsні
days_since_latest_release4
mean_days_between_releases3,1
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: Signed-Releases. Залишкові ваги перенормовано.

Спільнота та впровадження

Чи має проєкт користувачів, завантаження, увагу та влаштовані умови для контриб’юторів?

62Помірний · 18% загального індексу
Як обчислюється оцінка
55.6/60Зірки — 2 683 зірок
21.8/25Форки — 412 форків
3.9/15Спостерігачі — 6 спостерігачів
Використані вхідні дані
forks412
stars2 683
watchers6
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
0/22.5Ліцензія — файлу ліцензії не виявлено
0/18Настанови CONTRIBUTING
0/13.5Кодекс поведінки
0/7.2Шаблон issue
0/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseні
has_contributingні
has_issue_templateні
has_code_of_conductні
has_pull_request_templateні
Як обчислюється оцінка
67.9/80Щомісячні завантаження — 124 332 завантажень/місяць у npm
0/20Залежні пакети в реєстрі — ця екосистема цього не повідомляє
Використані вхідні дані
packagespi-subagents
dependents
ecosystemsnpm
total_downloads
monthly_downloads124 332
Виключено з оцінювання (немає даних або не застосовно): Залежні пакети в реєстрі. Залишкові ваги перенормовано.

Сталість та врядування

Чи переживе проєкт своїх людей — бас-фактор, реактивність, хто за ним стоїть і як супроводжуються пакети?

66Помірний · 24% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
4.1/22.5Розподіл комітів — головний контриб’ютор — автор 82% комітів
13.5/13.5Широта контриб’юторів — 47 контриб’юторів
10/10OpenSSF Scorecard: Contributors — project has 4 contributing companies or organizations
Використані вхідні дані
bus_factor1
contributors_sampled47
top_contributor_share0,816
Як обчислюється оцінка
44.7/46.8Вирішення issue — закрито 96% issue
19.7/38.3Прийняття PR — злито 166/322 вирішених PR
3/15OpenSSF Scorecard: Code-Review — Found 7/30 approved changesets -- score normalized to 2
Використані вхідні дані
merged_prs166
open_issues11
closed_issues242
issue_closed_ratio0,957
closed_unmerged_prs156
Як обчислюється оцінка
10/30Підтримка власника — особистий (користувацький) обліковий запис
0/20Верифікований домен — не застосовно до користувацьких облікових записів
23.3/25Охоплення власника — 1 752 підписників у nicobailon
25/25Послужний список — 130 публічних репозиторіїв, вік облікового запису ~13 р.
Використані вхідні дані
followers1 752
owner_typeUser
is_verified
owner_loginnicobailon
public_repos130
account_age_days4 978
Виключено з оцінювання (немає даних або не застосовно): Верифікований домен. Залишкові ваги перенормовано.

Супровід пакетів

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 1 пакет(ів) у npm
35/35Свіжість публікацій — остання публікація 4 дн. тому
20/20Історія версій — 91 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagespi-subagents
ecosystemsnpm
any_deprecatedні
min_days_since_publish4

Інженерна якість

Чи наявні базові інженерні практики та документація?

60Помірний · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 2 процес(ів) CI
24/24Наявні тести
0/16Конфігурація лінтера
0/9.6Pre-commit-хуки
0/6.4.editorconfig
18/20OpenSSF Scorecard: CI-Tests — 27 out of 28 merged PRs checked by a CI test -- score normalized to 9
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configні
has_precommit_configні

Документація

50Помірний
Як обчислюється оцінка
30/30README
0/25Каталог документації
0/15Сайт документації / домашня сторінка
10/10Опис репозиторію
0/10Теми
10/10Wiki
Використані вхідні дані
topics
has_wikiтак
homepage
has_readmeтак
has_docs_dirні
has_descriptionтак

Безпека

Чи міцні видимі практики безпеки й ланцюга постачання, без непослабленої пов’язаності з юрисдикціями високого ризику?

49У зоні ризику · 16% загального індексу

Стан безпеки

49У зоні ризику
Як обчислюється оцінка
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — немає даних
2.2/2.5CI-Tests — 27 out of 28 merged PRs checked by a CI test -- score normalized to 9
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
1.5/7.5Code-Review — Found 7/30 approved changesets -- score normalized to 2
2.5/2.5Contributors — project has 4 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5Ліцензія — license file not detected
7.5/7.5Maintained — 30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
1.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — немає даних
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6/7.5Vulnerabilities — 2 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4,9
Виключено з оцінювання (немає даних або не застосовно): branch_protection, signed_releases. Залишкові ваги перенормовано.

Готовність до ШІ

Наскільки репозиторій оснащений для розробки та супроводу за участі ШІ-агентів? Незалежний, експериментальний бейдж — вага 0.0, тож він подається окремо і не впливає на загальний індекс здоров'я.

53Помірний · 0% загального індексу
Як обчислюється оцінка
0/45Інструкції для агентів — немає CLAUDE.md / AGENTS.md / правил редактора
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 99 з 100 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,99
agent_instruction_files
agent_instruction_max_bytes
Як обчислюється оцінка
0/18Розгортання однією командою
22/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
11/11Статична перевірка типів — TypeScript (статично типізована)
10/10Відтворюване середовище — lockfile
0/10Підтверджена практика роботи з агентами — серед останніх 100 комітів немає створених агентом
0/8Автоматизоване супроводження — автоматичних оновлень залежностей не виявлено
3/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
Використані вхідні дані
has_nixні
has_testsтак
lockfilespackage-lock.json
has_dockerfileні
typed_languageтак
bootstrap_files
has_devcontainerні
has_linter_configні
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — TypeScript (статично типізована)
53.2/55Керовані розміри файлів — 9/268 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageTypeScript
largest_source_bytes178 651
source_files_sampled268
oversized_source_files9

Ключові факти

2 683зірок GitHub
47контриб'юторів
532комітів за останні 12 місяців
1днів від останнього пушу
89релізів
1бас-фактор
11відкритих issue
npmпакетних екосистем

Попередження щодо збору даних

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index npm:pi-subagents@0.35.1; advisories assessed against the repository dependency graph instead

Докладніше

Історія зірок і форків 0 ★ / 412 ⇿
0Зірки
412Форки
85Релізи

Коли додано кожну зірку й форк — зібрано з GitHub і згруповано за днями. Кумулятивне зростання розміщено просто над денними додаваннями, з яких воно складається, тож їх видно одне проти одного: рівномірне органічне накопичення виглядає зовсім інакше, ніж різкий короткочасний сплеск. Там, де цю різницю можна виміряти, її подано як автентичність росту.

0100200300400500410122026-012026-042026-07
Мажорні 0Мінорні 31Патчі 54
OpenSSF Scorecard 4.9 / 10
4.9сукупно

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).Scorecard v5.5.0 · 2026-07-23 00:48 UTC

10Binary-Artifactsno binaries found in the repo
н/дBranch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
9CI-Tests27 out of 28 merged PRs checked by a CI test -- score normalized to 9
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
2Code-ReviewFound 7/30 approved changesets -- score normalized to 2
10Contributorsproject has 4 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not detected
10Maintained30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
3Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 3
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
н/дSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
8Vulnerabilities2 existing vulnerabilities detected
Прямі залежності 2
РеєстрПакетОбмеження версіїМаніфест
npmjiti2.7.0package.json
npmyaml2.8.3package.json
Усі залежності не зібрано

Не вдалося зібрати розв'язаний набір залежностей для цього звіту: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 4094,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "JavaScript": 25872,
        "TypeScript": 4065055
      },
      "pushed_at": "2026-07-21T22:29:28Z",
      "created_at": "2026-01-07T00:01:57Z",
      "owner_type": "User",
      "updated_at": "2026-07-22T23:41:02Z",
      "description": "Pi extension for async subagent delegation with truncation, artifacts, and session sharing",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": null,
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "https://pika.art",
      "name": "Nico Bailon",
      "type": "User",
      "login": "nicobailon",
      "company": "Pika Labs",
      "location": "Vancouver, BC",
      "followers": 1752,
      "avatar_url": "https://avatars.githubusercontent.com/u/2958133?v=4",
      "created_at": "2012-12-04T04:29:28Z",
      "is_verified": null,
      "public_repos": 130,
      "account_age_days": 4978
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.35.1",
          "kind": "patch",
          "published_at": "2026-07-18T02:45:18Z"
        },
        {
          "tag": "v0.35.0",
          "kind": "minor",
          "published_at": "2026-07-18T00:07:40Z"
        },
        {
          "tag": "v0.34.0",
          "kind": "minor",
          "published_at": "2026-07-07T05:07:03Z"
        },
        {
          "tag": "v0.33.1",
          "kind": "patch",
          "published_at": "2026-07-03T19:18:16Z"
        },
        {
          "tag": "v0.33.0",
          "kind": "minor",
          "published_at": "2026-07-03T17:29:39Z"
        },
        {
          "tag": "v0.32.0",
          "kind": "minor",
          "published_at": "2026-07-01T23:04:34Z"
        },
        {
          "tag": "v0.31.1",
          "kind": "patch",
          "published_at": "2026-06-30T19:59:15Z"
        },
        {
          "tag": "v0.31.0",
          "kind": "minor",
          "published_at": "2026-06-24T03:37:55Z"
        },
        {
          "tag": "v0.30.0",
          "kind": "minor",
          "published_at": "2026-06-20T07:08:56Z"
        },
        {
          "tag": "v0.29.0",
          "kind": "minor",
          "published_at": "2026-06-19T19:12:56Z"
        },
        {
          "tag": "v0.28.0",
          "kind": "minor",
          "published_at": "2026-06-03T20:38:01Z"
        },
        {
          "tag": "v0.27.0",
          "kind": "minor",
          "published_at": "2026-05-30T22:17:34Z"
        },
        {
          "tag": "v0.26.0",
          "kind": "minor",
          "published_at": "2026-05-29T22:49:18Z"
        },
        {
          "tag": "v0.25.0",
          "kind": "minor",
          "published_at": "2026-05-21T16:35:15Z"
        },
        {
          "tag": "v0.24.4",
          "kind": "patch",
          "published_at": "2026-05-20T20:10:12Z"
        },
        {
          "tag": "v0.24.3",
          "kind": "patch",
          "published_at": "2026-05-15T03:05:25Z"
        },
        {
          "tag": "v0.24.2",
          "kind": "patch",
          "published_at": "2026-05-10T19:01:28Z"
        },
        {
          "tag": "v0.24.1",
          "kind": "patch",
          "published_at": "2026-05-10T18:25:22Z"
        },
        {
          "tag": "v0.24.0",
          "kind": "minor",
          "published_at": "2026-05-03T05:37:07Z"
        },
        {
          "tag": "v0.23.1",
          "kind": "patch",
          "published_at": "2026-05-02T21:49:01Z"
        },
        {
          "tag": "v0.23.0",
          "kind": "minor",
          "published_at": "2026-05-02T17:52:20Z"
        },
        {
          "tag": "v0.22.0",
          "kind": "minor",
          "published_at": "2026-05-02T06:07:45Z"
        },
        {
          "tag": "v0.21.5",
          "kind": "patch",
          "published_at": "2026-05-02T01:21:48Z"
        },
        {
          "tag": "v0.21.4",
          "kind": "patch",
          "published_at": "2026-05-01T18:56:34Z"
        },
        {
          "tag": "v0.21.3",
          "kind": "patch",
          "published_at": "2026-04-30T18:37:48Z"
        },
        {
          "tag": "v0.21.2",
          "kind": "patch",
          "published_at": "2026-04-30T18:15:08Z"
        },
        {
          "tag": "v0.21.1",
          "kind": "patch",
          "published_at": "2026-04-30T00:04:58Z"
        },
        {
          "tag": "v0.21.0",
          "kind": "minor",
          "published_at": "2026-04-29T23:16:58Z"
        },
        {
          "tag": "v0.20.1",
          "kind": "patch",
          "published_at": "2026-04-27T19:55:26Z"
        },
        {
          "tag": "v0.20.0",
          "kind": "minor",
          "published_at": "2026-04-27T19:26:07Z"
        },
        {
          "tag": "v0.19.3",
          "kind": "patch",
          "published_at": "2026-04-27T07:05:25Z"
        },
        {
          "tag": "v0.19.2",
          "kind": "patch",
          "published_at": "2026-04-27T06:48:13Z"
        },
        {
          "tag": "v0.19.1",
          "kind": "patch",
          "published_at": "2026-04-26T19:47:54Z"
        },
        {
          "tag": "v0.19.0",
          "kind": "minor",
          "published_at": "2026-04-26T18:27:41Z"
        },
        {
          "tag": "v0.18.1",
          "kind": "patch",
          "published_at": "2026-04-26T06:06:38Z"
        },
        {
          "tag": "v0.18.0",
          "kind": "minor",
          "published_at": "2026-04-24T04:36:53Z"
        },
        {
          "tag": "v0.17.5",
          "kind": "patch",
          "published_at": "2026-04-23T19:22:02Z"
        },
        {
          "tag": "v0.17.4",
          "kind": "patch",
          "published_at": "2026-04-23T06:12:18Z"
        },
        {
          "tag": "v0.17.3",
          "kind": "patch",
          "published_at": "2026-04-23T05:10:40Z"
        },
        {
          "tag": "v0.17.2",
          "kind": "patch",
          "published_at": "2026-04-21T23:02:44Z"
        },
        {
          "tag": "v0.17.1",
          "kind": "patch",
          "published_at": "2026-04-20T04:55:09Z"
        },
        {
          "tag": "v0.17.0",
          "kind": "minor",
          "published_at": "2026-04-16T23:16:12Z"
        },
        {
          "tag": "v0.16.1",
          "kind": "patch",
          "published_at": "2026-04-16T20:28:35Z"
        },
        {
          "tag": "v0.16.0",
          "kind": "minor",
          "published_at": "2026-04-16T19:55:30Z"
        },
        {
          "tag": "v0.15.0",
          "kind": "minor",
          "published_at": "2026-04-16T18:11:41Z"
        },
        {
          "tag": "v0.14.1",
          "kind": "patch",
          "published_at": "2026-04-14T18:12:23Z"
        },
        {
          "tag": "v0.14.0",
          "kind": "minor",
          "published_at": "2026-04-14T07:09:56Z"
        },
        {
          "tag": "v0.13.4",
          "kind": "patch",
          "published_at": "2026-04-13T20:41:14Z"
        },
        {
          "tag": "v0.13.3",
          "kind": "patch",
          "published_at": "2026-04-13T07:26:22Z"
        },
        {
          "tag": "v0.13.2",
          "kind": "patch",
          "published_at": "2026-04-13T04:40:26Z"
        },
        {
          "tag": "v0.13.1",
          "kind": "patch",
          "published_at": "2026-04-13T04:29:50Z"
        },
        {
          "tag": "0.13.0",
          "kind": "minor",
          "published_at": "2026-04-12T01:08:02Z"
        },
        {
          "tag": "v0.12.5",
          "kind": "patch",
          "published_at": "2026-04-09T06:24:25Z"
        },
        {
          "tag": "v0.12.4",
          "kind": "patch",
          "published_at": "2026-04-04T19:12:39Z"
        },
        {
          "tag": "v0.12.2",
          "kind": "patch",
          "published_at": "2026-04-04T02:09:22Z"
        },
        {
          "tag": "v0.12.1",
          "kind": "patch",
          "published_at": "2026-04-03T22:21:39Z"
        },
        {
          "tag": "v0.12.0",
          "kind": "minor",
          "published_at": "2026-04-01T21:31:20Z"
        },
        {
          "tag": "v0.11.12",
          "kind": "patch",
          "published_at": "2026-03-28T18:52:18Z"
        },
        {
          "tag": "v0.11.11",
          "kind": "patch",
          "published_at": "2026-03-23T06:33:34Z"
        },
        {
          "tag": "v0.11.10",
          "kind": "patch",
          "published_at": "2026-03-21T14:49:04Z"
        },
        {
          "tag": "v0.11.9",
          "kind": "patch",
          "published_at": "2026-03-21T06:11:11Z"
        },
        {
          "tag": "v0.11.8",
          "kind": "patch",
          "published_at": "2026-03-21T02:20:36Z"
        },
        {
          "tag": "v0.11.7",
          "kind": "patch",
          "published_at": "2026-03-20T17:48:36Z"
        },
        {
          "tag": "v0.11.6",
          "kind": "patch",
          "published_at": "2026-03-20T06:11:19Z"
        },
        {
          "tag": "v0.11.5",
          "kind": "patch",
          "published_at": "2026-03-20T05:53:25Z"
        },
        {
          "tag": "v0.11.4",
          "kind": "patch",
          "published_at": "2026-03-19T18:57:25Z"
        },
        {
          "tag": "v0.11.3",
          "kind": "patch",
          "published_at": "2026-03-17T06:31:11Z"
        },
        {
          "tag": "v0.11.2",
          "kind": "patch",
          "published_at": "2026-03-12T03:20:09Z"
        },
        {
          "tag": "v0.11.1",
          "kind": "patch",
          "published_at": "2026-03-08T18:40:38Z"
        },
        {
          "tag": "v0.11.0",
          "kind": "minor",
          "published_at": "2026-02-23T21:49:48Z"
        },
        {
          "tag": "v0.10.0",
          "kind": "minor",
          "published_at": "2026-02-23T20:58:44Z"
        },
        {
          "tag": "v0.9.2",
          "kind": "patch",
          "published_at": "2026-02-20T03:39:50Z"
        },
        {
          "tag": "v0.9.1",
          "kind": "patch",
          "published_at": "2026-02-18T03:20:58Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2026-02-18T02:31:38Z"
        },
        {
          "tag": "v0.8.5",
          "kind": "patch",
          "published_at": "2026-02-16T14:51:52Z"
        },
        {
          "tag": "v0.8.4",
          "kind": "patch",
          "published_at": "2026-02-13T19:40:06Z"
        },
        {
          "tag": "v0.8.3",
          "kind": "patch",
          "published_at": "2026-02-12T06:34:06Z"
        },
        {
          "tag": "v0.8.2",
          "kind": "patch",
          "published_at": "2026-02-11T23:49:06Z"
        },
        {
          "tag": "v0.8.1",
          "kind": "patch",
          "published_at": "2026-02-10T18:30:45Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2026-02-10T05:48:30Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-02-09T23:27:51Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-02-02T07:16:08Z"
        },
        {
          "tag": "v0.5.3",
          "kind": "patch",
          "published_at": "2026-02-02T00:41:27Z"
        },
        {
          "tag": "v0.5.1",
          "kind": "patch",
          "published_at": "2026-01-28T06:53:43Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2026-01-27T18:42:10Z"
        },
        {
          "tag": "v0.4.1",
          "kind": "patch",
          "published_at": "2026-01-26T19:50:04Z"
        },
        {
          "tag": "v0.3.2",
          "kind": "patch",
          "published_at": "2026-01-25T06:19:59Z"
        },
        {
          "tag": "v0.3.1",
          "kind": "patch",
          "published_at": "2026-01-25T00:00:07Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-01-24T21:22:11Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "e658b40fe72d599df231b5d59ffec40d66f576fa",
          "body": "Document the existing chain-output contract for #529 and stabilize the async revival lease test that was racing on Windows CI.",
          "is_bot": false,
          "headline": "docs: clarify chain output persistence",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-21T01:12:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93dead2cc7b633da99ea575a6f8237e144b10dc6",
          "body": "Bound main-watchdog repository signatures so enabled watchdog checks avoid recursively hashing nested Git worktrees and generated dependency trees. This keeps startup and agent-end checks predictable in large repos while preserving content sensitivity for in-budget changes.",
          "is_bot": false,
          "headline": "fix: bound watchdog repo signatures",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-21T00:45:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bff97221f271df1a2edcd1c2e7bb474af982a631",
          "body": "Adds advisor as an oracle-compatible bundled agent alias for users switching between Claude Code and Pi naming.\\n\\nFixes #552.",
          "is_bot": false,
          "headline": "feat: add advisor alias for oracle",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-21T00:26:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "038070fd5877747108366ef51cf8dc87fd5fe7f5",
          "body": "Raises the child stdout pending-line guard so Pi-sized image read events can pass through the subagent protocol.\\n\\nFixes #538.",
          "is_bot": false,
          "headline": "fix: allow larger child protocol lines",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-21T00:14:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0d3bf7db3cbfe64af2ae47ec99df29893d3bf00",
          "body": "Failed child runs that produce no output now write explanatory stubs into advertised output artifacts.\\n\\nFixes #547.",
          "is_bot": false,
          "headline": "fix: write failure stubs for empty output artifacts",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-21T00:04:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2842823d421ed01619f6cc58c15dab850cef7eaa",
          "body": "Route main watchdog reviews through matching provider-scoped stream handlers before falling back to compat dispatch.",
          "is_bot": false,
          "headline": "fix: use provider streams for watchdog reviews",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-20T23:28:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "318b7751f48f4e8330c23868bea6b2ea1895c3a7",
          "body": "Keep async recovery descriptors on the public acceptance input contract and tolerate older resolved acceptance metadata during resume.",
          "is_bot": false,
          "headline": "fix: preserve async resume acceptance metadata",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-20T23:14:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "738d610f95ea7b2d44240293773790bcfb8b81b6",
          "body": null,
          "is_bot": false,
          "headline": "fix: wake detached waits on attention (#557)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-20T22:57:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20df5b4d7de6366fe0e73cfe6423a926ff92416f",
          "body": null,
          "is_bot": false,
          "headline": "fix: redact run history prompts (#556)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-20T22:17:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "071dbc165086d17c3a1c25f147d680cbaa7753fa",
          "body": "Avoid full-content hashing for very large changed or untracked files, degrade per-file read failures, and keep watchdog repo signature computation non-fatal. Includes changelog credit for #553, #535, #536, and #551.",
          "is_bot": false,
          "headline": "fix: avoid watchdog crashes on large repo files",
          "author_name": "axelbaumlisto",
          "author_login": "axelbaumlisto",
          "committed_at": "2026-07-20T15:19:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2cf96150bc14d56eb16ad92271bc10c6b4fdcddb",
          "body": "Credit #548's watchdog startup measurements and validation after the #532 fix landed.",
          "is_bot": false,
          "headline": "docs: credit watchdog startup validation",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-20T08:35:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f82060a30f71dda129b125519a8ff9ea30cf96bf",
          "body": "Forward subagent_wait pending updates and stream bounded detached foreground transcript activity while waiting after supervisor handoff. Includes changelog credit for #544.",
          "is_bot": false,
          "headline": "fix: stream detached subagent progress while waiting",
          "author_name": "Dominic",
          "author_login": "DevDominic",
          "committed_at": "2026-07-20T08:29:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbf4446bea123ee9a7c54b04fb24e4edd3cf701c",
          "body": "Credit the superseded #528 watchdog startup contribution in the changelog after #532 landed.",
          "is_bot": false,
          "headline": "docs: credit watchdog startup contributor",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-20T08:15:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7719cd782b9b3303938c9f69c71fa9778b79e283",
          "body": "Skip repository change signatures while the watchdog is disabled and represent modified nested Git worktrees through Git-filtered signatures. Includes maintainer follow-up for session binding and portable test coverage.",
          "is_bot": false,
          "headline": "fix: avoid watchdog startup scans when disabled",
          "author_name": "傅洋",
          "author_login": "4ier",
          "committed_at": "2026-07-20T08:01:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9684deeb7e8a1b24eeccfd1c86fe54071722fc7b",
          "body": "Recognize Cursor edit/write thinking traces and replay tool calls as mutation evidence so Cursor-provider workers do not false-fail after real edits. Includes maintainer changelog credit for #539.",
          "is_bot": false,
          "headline": "fix: count Cursor edit traces as mutations",
          "author_name": "Mikhail Wijanarko",
          "author_login": "mwijanarko1",
          "committed_at": "2026-07-20T07:43:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd32df2cc1a951b588f6f93f67f3b9adac406303",
          "body": "Resolve host-provided TypeBox compiler lookup for detached async runners and structured-output validation. Includes maintainer follow-up to forward the Pi package root to child runs and changelog credit for #526/#545.",
          "is_bot": false,
          "headline": "fix: resolve TypeBox host peer for async runners",
          "author_name": "Kim Mingyu",
          "author_login": "96tommykim",
          "committed_at": "2026-07-20T07:22:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f4de1b48793408d0cc87e3c17e0221a1e73ebfd",
          "body": "Add the missing context field to the fork-context example in the bundled pi-subagents skill and credit Kier (@kierr) in the changelog for #540.",
          "is_bot": false,
          "headline": "docs: fix fork context skill example",
          "author_name": "Kier",
          "author_login": "kierr",
          "committed_at": "2026-07-20T07:03:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7318b3fc311d6a5817465411a4632a88e2935c96",
          "body": "Treat oracle review tasks as read-only for task intent and acceptance inference so review-only oracle runs are not failed for missing edits.",
          "is_bot": false,
          "headline": "fix: classify oracle reviews as read-only",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-20T06:46:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3136ef51e00de312ed685efa80d2090f43a3ec7b",
          "body": "Register native child intercom tools before strict allowlist diagnostics and avoid false unavailable-tool failures for Pi core builtins.",
          "is_bot": false,
          "headline": "fix: register child intercom before diagnostics",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-20T06:30:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c24f732e98aba40c8589791f8812c1aaa380db13",
          "body": "Show each subagent's resolved launch context in foreground and async surfaces, including mixed-run summaries.",
          "is_bot": false,
          "headline": "feat: show subagent context badges",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-20T06:03:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6e8005e3958adea634bf27c615abac7407aedc4",
          "body": null,
          "is_bot": false,
          "headline": "chore: release v0.35.1",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-18T02:43:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "88c5de159f09f7875ed69e7c44077a7b66ebdc02",
          "body": "Collapse structured multiline management and status output behind a concise preview and configured expand-key hint while preserving full errors and expanded output. Fixes #523. Thanks to Nikolay Panov (@niksite).",
          "is_bot": false,
          "headline": "fix: collapse management output by default (#524)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-18T02:12:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eed01ccd0d25fa59e234dcbd2fc040ae429fca49",
          "body": null,
          "is_bot": false,
          "headline": "chore: release v0.35.0",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-18T00:05:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8bbb7c253a686896c678ec2e2058fb588ec597e",
          "body": "Update Pi development SDK dependencies to 0.80.10, migrate real-session SDK harnesses to ModelRuntime, retain extension-facing modelRegistry, and remove known audit findings. Fixes #520. Thanks to dmg (@dmg-egg).",
          "is_bot": false,
          "headline": "fix: update Pi SDK dependencies (#522)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-17T23:49:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b703c6622bc3c609d75571d9356bdfc87374e06c",
          "body": "Honor effective agent precedence and agentScope for agent and chain detail lookup while retaining package-chain visibility. Preserves Kyle (@kylegl) authorship and changelog credit.",
          "is_bot": false,
          "headline": "fix: respect scope in agent detail (#519)",
          "author_name": "Kylegl",
          "author_login": "kylegl",
          "committed_at": "2026-07-17T23:31:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea9b72f2e5bc0e0cbaacdab589576e858b12c03f",
          "body": "Stop foreground subagent results from invalidating the entire Pi TUI every 80ms. Keep running indicators event-driven and clear any legacy renderer timer when results render.",
          "is_bot": false,
          "headline": "fix: remove timer-driven foreground redraws (#521)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-17T22:30:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f105582883ed315a2c62053a36b2a00917f1e8e",
          "body": "Co-authored-by: James Wood <james@aykua.com>",
          "is_bot": false,
          "headline": "feat(tui): timestamp nested subagent activity (#518)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-17T18:44:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab9e7ee5ea3e2ada111c652f6ba3e58fe4b5eee5",
          "body": "Expose per-session spawn budget usage, preflight declared work before launch, and let the settled root interactive parent confirm bounded additive grants without resetting consumption.\n\nReported-by: Mati Gummá <794606+matigumma@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add controlled spawn budget grants (#517)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-17T17:59:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd34530acf1f58dc60b3a601e2b42df0f658aa1b",
          "body": "Avoid optional npm root discovery for agents and skills in Pi offline mode while retaining normal local and online package discovery. Thanks to Rafiq Rashid (@rrvsh) for #506.",
          "is_bot": false,
          "headline": "fix: skip global discovery while offline (#516)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-17T16:59:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f335da386125f6618fe380abf2434c34589ab21",
          "body": "Wait for the deferred turn-budget lifecycle state before delivering the authoritative timeout request, removing scheduler dependence from the precedence regression.",
          "is_bot": false,
          "headline": "test: synchronize deferred timeout precedence (#515)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-17T16:20:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d2dce4833a3a165f5c6700d3c47222d0bc5c826",
          "body": "Invalidate stale status-cache entries across atomic file replacement and keep lifecycle timeout tests synchronized with production behavior.",
          "is_bot": false,
          "headline": "fix: invalidate replaced async status cache (#514)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-17T16:03:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77e4b3d4835b753112176a4e47af30764c1db187",
          "body": "Fixes #510. Pi-owned TUI and TypeBox packages are optional wildcard peers, while exact dev versions keep local and CI tests deterministic.\n\nReported-by: Alexei Ledenev <1898375+alexei-led@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: use Pi host package peers (#513)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-17T15:43:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "abad0da68eb0c13934d2a57978a4e483b78bf0bd",
          "body": null,
          "is_bot": false,
          "headline": "fix: parse frontmatter block lists (#512)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-17T15:18:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd24e35b9c0d79b58493d6282c75687eb8f654d2",
          "body": "Synchronize steering acknowledgment recovery tests at durable request and pre-claim boundaries, and give Windows hard-kill coverage enough process-start allowance to exercise the intended lifecycle.",
          "is_bot": false,
          "headline": "fix: synchronize async lifecycle regression tests (#509)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-17T10:56:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b480cc96cd5cb99f8b7b037c1cca1fd33abd6486",
          "body": "Adds ownership-safe interactive agent administration with portable external-editor handling. Thanks to Benedict Evert (@dt-benedict) for the implementation.",
          "is_bot": false,
          "headline": "feat: add interactive subagent administration (#498)",
          "author_name": "Benedict Evert",
          "author_login": "dt-benedict",
          "committed_at": "2026-07-17T10:08:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "944155e0a622b32979f37247f65e7141e1e838a7",
          "body": "Thanks to Luis Cinco (@tekniko24) for the implementation and #488.",
          "is_bot": false,
          "headline": "fix: support YAML folded frontmatter scalars (#488)",
          "author_name": "tekniko24",
          "author_login": "tekniko24",
          "committed_at": "2026-07-17T08:52:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8875e243296ca76aa8cc7fc4f1a732c5b23bcc57",
          "body": "Thanks to Luke Chen (@lukechen526) for the implementation and #480.",
          "is_bot": false,
          "headline": "fix: distinguish interactive async wait guidance (#480)",
          "author_name": "Yupo \"Luke\" Chen",
          "author_login": "lukechen526",
          "committed_at": "2026-07-17T08:21:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aebe89337821c7b5a6bf148a3cd94777571093f2",
          "body": null,
          "is_bot": false,
          "headline": "fix: dispose completion notifications on shutdown (#489)",
          "author_name": "Alexander Penkin",
          "author_login": "SSS135",
          "committed_at": "2026-07-17T07:53:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "43aa6cf893fe14e0547940595dd7e5d4fe5f7f3d",
          "body": "Record pending termination when a hard turn limit coincides with active or starting tool work, then enforce it at the next safe assistant boundary. Preserve timeout and stop precedence, surface deferred status, and document conservative writer budget guidance.",
          "is_bot": false,
          "headline": "fix: defer turn-budget aborts at tool boundaries (#505)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-17T07:23:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a2096d8092c968650a06ff9e2b96e8d1186034e",
          "body": "Treat active tool execution as work rather than idleness, and reserve top-level live guidance for steering without destructive resume side effects. Keep revival session-scoped and stopped runs non-resumable.",
          "is_bot": false,
          "headline": "fix: correct live subagent control semantics (#500)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-17T06:37:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "315e1eb1482c4ac2d912a8d95aac4287dc7e60ac",
          "body": "Add a versioned exact-identity provider contract, provider-aware subagent waits, and safe headless draining across parent and child runtimes. Propagate effective wait configuration through all child launch paths while preserving strict tool allowlists and explicit provider loading.\\n\\nThanks to RoboBryce (@robobryce) for #472 and #473.",
          "is_bot": false,
          "headline": "feat: integrate background work with subagent wait",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-16T07:08:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0950718e45b63dcc34ad735aa0fbdf050365cb63",
          "body": "Expose a canonical typed v1 foreground delegation contract through pi-subagents/delegation while preserving the existing prompt-template transport and compatibility behavior. Add strict runtime parsing, cancellation ownership, stable terminal results, docs, package exports, and full tests.\\n\\nThanks to JT (@juicetin) for #465, PR #467, the reference implementation, and the test plan.",
          "is_bot": false,
          "headline": "feat: add typed extension delegation API (#485)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-16T05:50:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78cdd2c75ba83568c8df76e4e60f26641c153234",
          "body": "Default and explicit zero now mean unlimited cumulative session launches; positive caps remain opt-in. Thanks to @Maverobot, @KawaiiNahida, and @markng for the #239 follow-up reports.",
          "is_bot": false,
          "headline": "fix: remove default session spawn limit (#484)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-16T05:18:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c635cc104c091fe7c5d731c71f9b69127a2bc03",
          "body": "Adds explicit read-only and writer acceptance roles across agent metadata, settings overrides, management, and every execution mode while preserving task-intent precedence and existing omitted-role behavior. Includes materialized-template regressions and complete documentation. Thanks to Taylor C Jensen (@taylorcjensen) for reporting #466.",
          "is_bot": false,
          "headline": "feat: add per-agent acceptance roles (#481)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-16T03:37:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "58e53393f66136b16bdc30ca04bbf8f94dce0e7a",
          "body": "Resolve forked child models after Clarify and inheritance, classify provider/API metadata conservatively, preserve model-scope provenance across foreground and async paths, and report forced thinking downgrades on failures.\\n\\nThanks to Jeff (@jefftheai) for #476.",
          "is_bot": false,
          "headline": "fix: keep thinking for non-Anthropic forked children (#476)",
          "author_name": "Jeff",
          "author_login": "jefftheai",
          "committed_at": "2026-07-16T02:22:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "47fbe7d78470d7e0cd7d088aae1bd80cbc3a9358",
          "body": "Fixes #475. Thanks to Ramin Hazegh (@rhazegh) for the report and proposed package-side fix.",
          "is_bot": false,
          "headline": "fix: expose package-root extension entry (#479)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-16T00:57:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "505de6a06c3f289d74f5c511db785f228d1b8cf7",
          "body": "Accepts empty optional note strings without weakening the manual-notes evidence gate. Thanks to Nick Tripp (@nicholastripp) for #474.",
          "is_bot": false,
          "headline": "fix: accept empty acceptance note strings (#478)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-16T00:32:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4d764305030942e66d0feb84ed2211435446e3d",
          "body": "Adds correlated steering acknowledgments, bounded lifecycle ledgers, exact target capture, and fail-closed single-run recovery with finalization, deadline, budget, session, and shutdown-race safeguards.",
          "is_bot": false,
          "headline": "feat: acknowledge async subagent steering (#477)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-16T00:12:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d2c05e51ce58923dea504b4530dc2643cb25c54",
          "body": "Add the live inspection-only fleet alongside companion async display hooks, while preserving explicit mutation commands and subagent_wait naming.\\n\\nThanks to Jakub Neumann (@neumie) for the companion implementation and Manfred Liiv (@manfredlift) for reporting #412.",
          "is_bot": false,
          "headline": "feat: add native fleet and companion display hooks (#454)",
          "author_name": "Jakub Neumann",
          "author_login": "neumie",
          "committed_at": "2026-07-15T08:56:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5d8fa45b2f1af1c24fca0fda6772a65bdce6a94",
          "body": "Preserve strict child tool allowlists, admit structured_output only for active schema contracts, and fail direct or chained children with actionable provider-loading guidance when requested names are absent from Pi’s final registry.\n\nThanks to DesertThief (@DesertThief) for #429 and Chris-Kode (@Chris-Kode) for confirming the structured-output case.",
          "is_bot": false,
          "headline": "fix: diagnose unavailable child tools (#471)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-15T08:12:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a2f554a71341970d0cc0322e88bd7d7e1b01a7e",
          "body": "Agent definitions can discover invocation-private skills from paths relative to their defining file while retaining explicit `skills` selection and global fallback. Preserve the field through management and all launch routes, with isolation and safety regressions.\n\nThanks to Kylegl (@kylegl) for the original feature and tests in #428.",
          "is_bot": false,
          "headline": "feat: add agent-local skill paths (#470)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-15T07:42:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b9344365ae3afb8ccdeed9ce9822ae5d3eccc55",
          "body": "Prevent model fallback from rerunning tasks after trailing child tool failures whose details resemble provider outages. Retry the verified Pi provider error emitted when a stream ends without finish_reason.\n\nThanks to 虚妄IlluDelu (@XWIlluDelu) for #436.",
          "is_bot": false,
          "headline": "fix(fallback): stop retries on child tool failures (#436)",
          "author_name": "虚妄IlluDelu",
          "author_login": "XWIlluDelu",
          "committed_at": "2026-07-15T07:16:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "747de756f64f9610342d246f6e8534c294b967cc",
          "body": "Recognize Pi’s max thinking level across child model suffixes, Clarify, watchdog settings, and status formatting. Clarify exposes max only when model metadata explicitly supports it, while legacy metadata retains the existing levels through xhigh.\n\nThanks to mapleluv (@mapleluvr) for #423.",
          "is_bot": false,
          "headline": "fix: support max thinking level (#423)",
          "author_name": "mapleluv",
          "author_login": "mapleluvr",
          "committed_at": "2026-07-15T06:59:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c28f54b2493813999ef9ae5e75c8b293e40db279",
          "body": "Label every clarify-dialog shortcut with its action, surface the current background state, and separate primary actions while preserving the fixed 84-column overlay.\n\nThanks to GonzaloRocca (@gonzalonicolasr) for #430.",
          "is_bot": false,
          "headline": "fix: label clarify dialog shortcuts (#430)",
          "author_name": "GonzaloRocca",
          "author_login": "gonzalonicolasr",
          "committed_at": "2026-07-15T06:41:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f612a44296fb721adaa0da599d1d0228216c0c5",
          "body": "Add strict acceptance defaults to agent frontmatter and management for single-agent launches, with explicit-call precedence and YAML map support. Parallel and chain acceptance remain task or step configuration.\\n\\nThanks to ConjugativeIndicator (@CovetingEpiphany2152) for #453.\\n\\nFixes #453",
          "is_bot": false,
          "headline": "feat: add agent acceptance defaults (#469)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-15T06:18:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2acd14bd0c8a9a14b478db97bab0f54a5b7ee93",
          "body": "Prevent independent parent Pi processes from directly reviving the same persisted child session concurrently. Canonical-session leases now cover startup, the Pi writer lifecycle, finalization, and conservative stale-owner recovery.\\n\\nThanks to Luke Parke (@LukasParke) for reporting and scoping #446.\\n\\nFixes #446",
          "is_bot": false,
          "headline": "feat: lease revived child sessions (#468)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-15T05:56:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "300fe1d57f58bd7215b6e54f4f57125e08ee8595",
          "body": "Canonicalize known acceptance-report variants while rejecting unknown or ambiguous values, align empty evidence and criterion examples with the prompt, and persist parsed reports plus ledgers in child metadata across foreground, detached, and async lifecycle paths.\n\nThanks to Nick Tripp (@nicholastripp) for #442, maxsturmb (@maxsturmb) for #452, and techmodv90 (@techmodv90) for #449 and #450.",
          "is_bot": false,
          "headline": "fix: harden acceptance report contracts",
          "author_name": "EpYix",
          "author_login": "maxsturmb",
          "committed_at": "2026-07-15T05:01:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da1ba8b486202ffbc21037220e3c50e7a7c99782",
          "body": "Share one negation-aware task-intent classifier between acceptance inference and the completion guard. Read-only worker wording no longer receives write-evidence gates, while scoped constraints and surviving implementation clauses remain write-capable.\n\nThanks to 虚妄IlluDelu (@XWIlluDelu) for the implementation.",
          "is_bot": false,
          "headline": "fix: share task intent across acceptance gates",
          "author_name": "虚妄IlluDelu",
          "author_login": "XWIlluDelu",
          "committed_at": "2026-07-15T04:22:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee4fc3a5c1fa5714376d91f28829492cbb32b724",
          "body": "Reject explicit `reviewed` acceptance before launch across direct, nested, scheduled, append, and resume paths while preserving inferred and `auto` review behavior.\n\nThanks to Theodor Hillmann (@t0dorakis) for the report and implementation.\n\nFixes #440.",
          "is_bot": false,
          "headline": "fix: reject explicit reviewed acceptance before launch",
          "author_name": "Theodor Hillmann",
          "author_login": "t0dorakis",
          "committed_at": "2026-07-15T03:55:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad8614e80f867e4a99bcf77c7bfb26bfcead4061",
          "body": "Reject bare `acceptance: \"none\"` before spawning and require the reason-bearing object form. Keep deprecated `false` behavior documented consistently across the public schema, types, README, and packaged skill.\n\nThanks to 虚妄IlluDelu (@XWIlluDelu) for #435.",
          "is_bot": false,
          "headline": "fix: reject bare none acceptance (#435)",
          "author_name": "虚妄IlluDelu",
          "author_login": "XWIlluDelu",
          "committed_at": "2026-07-15T02:59:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83f357ec494c7f6a1aa493ba25b45763212b6064",
          "body": "Canonicalizes Windows watcher registration paths. Authored by NahidaChan (@KawaiiNahida), with contributor credit retained in the changelog.",
          "is_bot": false,
          "headline": "fix: canonicalize native watcher paths",
          "author_name": "NahidaChan",
          "author_login": "KawaiiNahida",
          "committed_at": "2026-07-15T02:41:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "933f8441383e6de42b794f32c41757cc60e58a6a",
          "body": "Makes output instructions capability-aware and credits Alexander Gerdes (@Avg8888) for #426 in the changelog.",
          "is_bot": false,
          "headline": "fix: support read-only output persistence",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-15T02:26:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a748c1e00dbd2d46dfbb4e716c3a1c97f1a4078b",
          "body": "Bounds child protocol memory and makes completion retry-aware. Credits Luke Parke (@LukasParke) for #444 and #445 in the changelog.",
          "is_bot": false,
          "headline": "fix: harden child protocol lifecycle",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-15T02:04:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e0c3be91628feb99cdd5824b35503a7d428bcba8",
          "body": "Fixes #456\n\nDetached foreground children remain waitable through subagent_wait({ id }) after supervisor coordination. Acceptance stays pending until exit, recovered output and failures remain available through session-scoped notifications and status, and unsafe cross-session or sibling resume paths are blocked.\n\nThanks to Ramin Hazegh (@rhazegh) for reporting #456.",
          "is_bot": false,
          "headline": "fix: wait for detached foreground runs (#462)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-15T01:30:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9245034d4f5e8d3c0a2cc9c55653c892ba92a49e",
          "body": "Fixes #437\n\nThe parent blocking tool is now subagent_wait. The legacy wait name is not registered, avoiding startup conflicts with unrelated extension tools. The namespaced waitTool config and PI_SUBAGENT_WAIT_TOOL_ENABLED override remain supported for subagent_wait behavior.\n\nThanks to DesZhang (@DesZhang) for reporting #437 and Nate Rutman (@nrutman) for confirming the conflict and clarifying the incompatible semantics.",
          "is_bot": false,
          "headline": "fix: rename wait tool to subagent_wait (#461)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-15T00:41:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcd63eab2540a56407fee32f0586a66efa1b6f8f",
          "body": "Fixes #443\n\nChild launches now prefer the explicit override, then a canonical verified current Pi entry, then the installed package bin, with bare pi as the final fallback. Canonical ownership checks prevent embedded hosts from masquerading through symlink locations.\n\nThanks to Luke Parke (@LukasParke) for the report and resolution contract in #443.",
          "is_bot": false,
          "headline": "fix: reuse verified Pi CLI on POSIX (#460)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-15T00:19:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26c070f1aebaf6022bc38b831430f8c2718ea5f5",
          "body": "Fixes #427\n\nAsync single tasks now preserve {outputs.name} as literal text while real chains retain named-output validation and substitution.\n\nThanks to Tristan Storch (@tstorch) for the report and reproduction in #427.",
          "is_bot": false,
          "headline": "fix: preserve named output refs in async single tasks (#459)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-14T23:33:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "825999581c2dc5546cda8196700c2bca148102d1",
          "body": "… (#434)\n\nFixes #442\n\nPR #434 by XWIlluDelu (虚妄IlluDelu). Recovers acceptance reports from child-written configured output files via transcript inspection, with source precedence (file-only primary, inline secondary). Malformed primary reports reject instead of falling back. Background run summaries\n[…]\ntrip acceptance-report fences. Windows case-insensitive path matching added. Tests reproduce the exact saved-report/receipt-only false-failure regression.\n\nThanks to 虚妄IlluDelu (@XWIlluDelu) for #434.",
          "is_bot": false,
          "headline": "fix(acceptance): recover reports from child-written configured output…",
          "author_name": "虚妄IlluDelu",
          "author_login": "XWIlluDelu",
          "committed_at": "2026-07-14T23:11:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2e40631506d94cfe74a580ac95844f626c90fbe5",
          "body": null,
          "is_bot": false,
          "headline": "fix: isolate async parallel outputs (#458)",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-14T22:48:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90c25857311ba4bdceb2840e7ad604a904ec935f",
          "body": "…xamples (#425)\n\n* fix(extension): friendly chain schema errors with allowed props and examples\n\nWhen an agent passes a disallowed property to the subagent tool's chain\nparameter, the runtime emits raw TypeBox diagnostics like\n'chain.1: must not have additional properties' that do not name the\noffen\n[…]\nin validation contributor\n\n* fix: align chain errors with schema strictness\n\n---------\n\nCo-authored-by: solar-heron-7 <solar-heron-7@pi-agent.local>\nCo-authored-by: Nico Bailon <nico.bailon@gmail.com>",
          "is_bot": false,
          "headline": "fix(extension): friendly chain schema errors with allowed props and e…",
          "author_name": "Nicolas Marchildon",
          "author_login": "elecnix",
          "committed_at": "2026-07-14T22:05:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "786f36a7f8ae060148725adb9153e2ca7d92a5a4",
          "body": "Add sequential, parallel fan-out, and mixed chain examples to the full and compact subagent tool descriptions. Thanks to Nicolas Marchildon (@elecnix) for #417 and #424.",
          "is_bot": false,
          "headline": "docs: add chain quick-reference",
          "author_name": "Nicolas Marchildon",
          "author_login": "elecnix",
          "committed_at": "2026-07-14T21:43:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c940fe20e86d9ba429eebcac809ec79d478ef206",
          "body": "Agent frontmatter can now default single-agent async mode, runtime deadlines, and turn budgets while preserving explicit-call and forced-async precedence. Includes management round trips, documentation, and regressions. Thanks to ConjugativeIndicator (@CovetingEpiphany2152) for #410.",
          "is_bot": false,
          "headline": "feat: add agent launch defaults",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-10T01:08:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f9d6ae40f03aa082bbb8aa7b21581837cc2f200",
          "body": "Uses the runtime's existing agent-selection precedence so list output only shows the effective agent definition.\\n\\nThanks to Kylegl (@kylegl) for #415.",
          "is_bot": false,
          "headline": "fix: hide shadowed agents from list output",
          "author_name": "Kylegl",
          "author_login": "kylegl",
          "committed_at": "2026-07-10T00:46:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1142b5cb091a0a99f25cf49b083271b903ce933a",
          "body": "Validates inherited Windows entry points against the Pi package before spawning and preserves realistic portable test shims.\\n\\nThanks to Marc Kassubeck (@CompN3rd) for #413.",
          "is_bot": false,
          "headline": "fix: resolve Pi CLI inside embedded Windows hosts",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-10T00:40:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f8419e152fd89e6c7ea18851cd997205a8926a3",
          "body": "Avoids rendering active subagent activity as `now ago` and adds regression coverage.\\n\\nThanks to Viktor Chernodub (@chernodub) for #414.",
          "is_bot": false,
          "headline": "fix: avoid now ago in activity status",
          "author_name": "Viktor Chernodub",
          "author_login": "chernodub",
          "committed_at": "2026-07-10T00:09:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96d0bd8e3580c76aef3509fa8f47dd7fedd1d9dd",
          "body": "Adds opt-in edit-gated watchdog reviews with TypeScript/JavaScript LSP diagnostics, child status plumbing, docs, and regression coverage.",
          "is_bot": false,
          "headline": "feat: add edit-gated subagent watchdogs",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-08T16:04:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "48488c87eedf120bef55543df236af94520685ee",
          "body": "Add a first-class stopped lifecycle for async subagents, selector-based /subagents-stop UX, RPC/tool stop handling, scheduled-run cancel routing, and non-resumable stopped status handling.",
          "is_bot": false,
          "headline": "feat: add selector-first subagent stop",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-08T14:22:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4fb627d1fdae90e18e9f5c744a9853e3231bed19",
          "body": null,
          "is_bot": false,
          "headline": "docs: credit async resume contributor",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-07T17:31:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2edc8a2d752015b2d97e9fd65572711dc9a659b9",
          "body": null,
          "is_bot": false,
          "headline": "docs: refresh fable orchestration guidance",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-07T17:25:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e416f3fae19c9a10a3581c0db16f3c0cb9ee762c",
          "body": "* fix: preserve async resume model\n\n* fix: preserve async resume result metadata\n\n---------\n\nCo-authored-by: boxai <boxai@boxai.local>",
          "is_bot": false,
          "headline": "fix: preserve async resume result metadata",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-07T17:20:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9dfe3dfddac162719ece88f5efebea484fcc223d",
          "body": null,
          "is_bot": false,
          "headline": "fix: gate foreground supervisor detaches",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-07T17:20:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ccb5645000709fc7856b1a9e3048009f19afaaf",
          "body": null,
          "is_bot": false,
          "headline": "docs: credit v0.33.0 contributors",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-07T05:22:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ced63d6c6e47956421eb93c3215d3999e2b85660",
          "body": null,
          "is_bot": false,
          "headline": "docs: credit v0.34.0 contributors",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-07T05:17:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "12a157d2a70b2f4cbc004c020c5f9213b6d8eea8",
          "body": null,
          "is_bot": false,
          "headline": "chore: release v0.34.0",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-07T05:03:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87fe44628f0f5f73b406fb2db29af9ffe6c39033",
          "body": null,
          "is_bot": false,
          "headline": "fix: honor disabled agent thinking frontmatter",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-07T04:51:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1688a1a0606d9ad5144d5c76723ab563f713986",
          "body": "Rebased onto current main and validated locally with unit, integration, and e2e suites.",
          "is_bot": false,
          "headline": "fix: prune stale supervisor channel dirs",
          "author_name": "koenvg",
          "author_login": "koenvg",
          "committed_at": "2026-07-07T04:29:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "840b51472d5eb858b9d706301bd1e6dc709e87dc",
          "body": null,
          "is_bot": false,
          "headline": "fix: avoid completion guard drafting false positives",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-07T04:22:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37bc262061d3a7eda77b70ca5f55abee08a28776",
          "body": "Adds waitTool config and PI_SUBAGENT_WAIT_TOOL_ENABLED so users can keep the wait tool registered while making it return immediately.",
          "is_bot": false,
          "headline": "feat: add wait tool opt-out",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-07T04:13:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68fb52882ad1bdf86b69e3142f8f062fc21530c8",
          "body": null,
          "is_bot": false,
          "headline": "fix: suppress stale supervisor intercom asks",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-07T04:03:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0a65aeec322e5f24c14f136ade3421007a90c29",
          "body": null,
          "is_bot": false,
          "headline": "chore: release v0.33.1",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-03T19:08:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c8710e10caa25207c33095a172e317ab6faeebd",
          "body": null,
          "is_bot": false,
          "headline": "fix: avoid native supervisor intercom conflicts",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-03T19:04:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bee5ea048c25f4e0786dc23f8e2d4f811007e2e4",
          "body": null,
          "is_bot": false,
          "headline": "chore: release v0.33.0",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-03T17:26:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2541659642ad8df523c0effb058f50101321665f",
          "body": null,
          "is_bot": false,
          "headline": "feat: add subagent tool budgets",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-03T17:19:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d05eebb225972d4df41bdc5a6006d9f886c5dba",
          "body": null,
          "is_bot": false,
          "headline": "fix: tolerate execution action aliases",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-03T17:14:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "589e51ee83ce0530e041ebadb7aa9a433795cd5e",
          "body": null,
          "is_bot": false,
          "headline": "fix: recover detached foreground run status",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-03T17:03:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aaa9519b98e15a61927990d84431161cc1f804c2",
          "body": null,
          "is_bot": false,
          "headline": "fix: require explicit clarify for chains",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-03T17:01:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ac0ef57115584b77bab1882033056af720d79c2",
          "body": null,
          "is_bot": false,
          "headline": "Make supervisor coordination native",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-03T15:42:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6acfc595c073312ca421a65f33796b6a3582ec41",
          "body": null,
          "is_bot": false,
          "headline": "feat: add fuzzy model resolution and optional scope enforcement",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-03T08:12:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "95035da8bff3cbf42328ed50a0acfd6d69b4534d",
          "body": null,
          "is_bot": false,
          "headline": "feat: add agent eject/disable/enable/reset management actions",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-03T08:06:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9dcfd78e6a3515b18de05581fbcf1c135623593d",
          "body": null,
          "is_bot": false,
          "headline": "feat: add per-agent persistent memory scopes with read-only fallback",
          "author_name": "Nico Bailon",
          "author_login": "nicobailon",
          "committed_at": "2026-07-03T08:00:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 89,
      "commits_last_year": 532,
      "latest_release_at": "2026-07-18T02:45:18Z",
      "latest_release_tag": "v0.35.1",
      "releases_from_tags": false,
      "days_since_last_push": 1,
      "active_weeks_last_year": 27,
      "days_since_latest_release": 4,
      "mean_days_between_releases": 3.1
    },
    "community": {
      "has_readme": true,
      "has_license": false,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 28,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "pi-subagents",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "pi-package",
            "pi",
            "pi-coding-agent",
            "subagents",
            "ai",
            "agents",
            "cli"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/pi-subagents",
          "is_deprecated": false,
          "latest_version": "0.35.1",
          "repository_url": "https://github.com/nicobailon/pi-subagents",
          "versions_count": 91,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 124332,
          "first_published_at": "2026-01-24T21:21:46.039000Z",
          "latest_published_at": "2026-07-18T02:43:57.784000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "popularity": {
      "forks": 412,
      "stars": 2683,
      "watchers": 6,
      "fork_history": {
        "days": [
          {
            "date": "2026-01-27",
            "count": 1
          },
          {
            "date": "2026-01-28",
            "count": 2
          },
          {
            "date": "2026-02-08",
            "count": 1
          },
          {
            "date": "2026-02-09",
            "count": 1
          },
          {
            "date": "2026-02-10",
            "count": 3
          },
          {
            "date": "2026-02-11",
            "count": 4
          },
          {
            "date": "2026-02-14",
            "count": 2
          },
          {
            "date": "2026-02-15",
            "count": 1
          },
          {
            "date": "2026-02-18",
            "count": 3
          },
          {
            "date": "2026-02-21",
            "count": 2
          },
          {
            "date": "2026-02-22",
            "count": 4
          },
          {
            "date": "2026-02-24",
            "count": 2
          },
          {
            "date": "2026-02-26",
            "count": 1
          },
          {
            "date": "2026-02-27",
            "count": 1
          },
          {
            "date": "2026-02-28",
            "count": 1
          },
          {
            "date": "2026-03-01",
            "count": 2
          },
          {
            "date": "2026-03-02",
            "count": 1
          },
          {
            "date": "2026-03-03",
            "count": 2
          },
          {
            "date": "2026-03-04",
            "count": 1
          },
          {
            "date": "2026-03-05",
            "count": 2
          },
          {
            "date": "2026-03-07",
            "count": 1
          },
          {
            "date": "2026-03-08",
            "count": 1
          },
          {
            "date": "2026-03-09",
            "count": 4
          },
          {
            "date": "2026-03-11",
            "count": 1
          },
          {
            "date": "2026-03-12",
            "count": 1
          },
          {
            "date": "2026-03-13",
            "count": 1
          },
          {
            "date": "2026-03-14",
            "count": 1
          },
          {
            "date": "2026-03-15",
            "count": 1
          },
          {
            "date": "2026-03-16",
            "count": 3
          },
          {
            "date": "2026-03-17",
            "count": 1
          },
          {
            "date": "2026-03-18",
            "count": 4
          },
          {
            "date": "2026-03-19",
            "count": 1
          },
          {
            "date": "2026-03-21",
            "count": 1
          },
          {
            "date": "2026-03-23",
            "count": 1
          },
          {
            "date": "2026-03-24",
            "count": 1
          },
          {
            "date": "2026-03-25",
            "count": 2
          },
          {
            "date": "2026-03-27",
            "count": 2
          },
          {
            "date": "2026-03-28",
            "count": 2
          },
          {
            "date": "2026-03-29",
            "count": 2
          },
          {
            "date": "2026-03-31",
            "count": 2
          },
          {
            "date": "2026-04-01",
            "count": 1
          },
          {
            "date": "2026-04-02",
            "count": 2
          },
          {
            "date": "2026-04-03",
            "count": 1
          },
          {
            "date": "2026-04-04",
            "count": 1
          },
          {
            "date": "2026-04-06",
            "count": 2
          },
          {
            "date": "2026-04-07",
            "count": 2
          },
          {
            "date": "2026-04-08",
            "count": 1
          },
          {
            "date": "2026-04-09",
            "count": 1
          },
          {
            "date": "2026-04-10",
            "count": 3
          },
          {
            "date": "2026-04-11",
            "count": 1
          },
          {
            "date": "2026-04-12",
            "count": 3
          },
          {
            "date": "2026-04-13",
            "count": 4
          },
          {
            "date": "2026-04-14",
            "count": 4
          },
          {
            "date": "2026-04-15",
            "count": 2
          },
          {
            "date": "2026-04-16",
            "count": 2
          },
          {
            "date": "2026-04-17",
            "count": 1
          },
          {
            "date": "2026-04-19",
            "count": 3
          },
          {
            "date": "2026-04-20",
            "count": 1
          },
          {
            "date": "2026-04-22",
            "count": 3
          },
          {
            "date": "2026-04-23",
            "count": 2
          },
          {
            "date": "2026-04-25",
            "count": 5
          },
          {
            "date": "2026-04-26",
            "count": 4
          },
          {
            "date": "2026-04-27",
            "count": 4
          },
          {
            "date": "2026-04-28",
            "count": 3
          },
          {
            "date": "2026-04-29",
            "count": 6
          },
          {
            "date": "2026-04-30",
            "count": 2
          },
          {
            "date": "2026-05-01",
            "count": 6
          },
          {
            "date": "2026-05-02",
            "count": 1
          },
          {
            "date": "2026-05-03",
            "count": 2
          },
          {
            "date": "2026-05-04",
            "count": 1
          },
          {
            "date": "2026-05-05",
            "count": 5
          },
          {
            "date": "2026-05-06",
            "count": 5
          },
          {
            "date": "2026-05-07",
            "count": 3
          },
          {
            "date": "2026-05-08",
            "count": 3
          },
          {
            "date": "2026-05-09",
            "count": 9
          },
          {
            "date": "2026-05-10",
            "count": 5
          },
          {
            "date": "2026-05-11",
            "count": 3
          },
          {
            "date": "2026-05-12",
            "count": 4
          },
          {
            "date": "2026-05-13",
            "count": 3
          },
          {
            "date": "2026-05-14",
            "count": 4
          },
          {
            "date": "2026-05-15",
            "count": 5
          },
          {
            "date": "2026-05-16",
            "count": 1
          },
          {
            "date": "2026-05-17",
            "count": 3
          },
          {
            "date": "2026-05-18",
            "count": 2
          },
          {
            "date": "2026-05-19",
            "count": 3
          },
          {
            "date": "2026-05-20",
            "count": 4
          },
          {
            "date": "2026-05-21",
            "count": 4
          },
          {
            "date": "2026-05-22",
            "count": 3
          },
          {
            "date": "2026-05-23",
            "count": 2
          },
          {
            "date": "2026-05-25",
            "count": 2
          },
          {
            "date": "2026-05-26",
            "count": 2
          },
          {
            "date": "2026-05-27",
            "count": 2
          },
          {
            "date": "2026-05-28",
            "count": 1
          },
          {
            "date": "2026-05-29",
            "count": 5
          },
          {
            "date": "2026-05-30",
            "count": 7
          },
          {
            "date": "2026-05-31",
            "count": 7
          },
          {
            "date": "2026-06-01",
            "count": 12
          },
          {
            "date": "2026-06-02",
            "count": 4
          },
          {
            "date": "2026-06-03",
            "count": 5
          },
          {
            "date": "2026-06-04",
            "count": 3
          },
          {
            "date": "2026-06-05",
            "count": 1
          },
          {
            "date": "2026-06-06",
            "count": 1
          },
          {
            "date": "2026-06-07",
            "count": 3
          },
          {
            "date": "2026-06-08",
            "count": 1
          },
          {
            "date": "2026-06-09",
            "count": 1
          },
          {
            "date": "2026-06-10",
            "count": 1
          },
          {
            "date": "2026-06-12",
            "count": 3
          },
          {
            "date": "2026-06-13",
            "count": 4
          },
          {
            "date": "2026-06-14",
            "count": 2
          },
          {
            "date": "2026-06-15",
            "count": 3
          },
          {
            "date": "2026-06-16",
            "count": 6
          },
          {
            "date": "2026-06-17",
            "count": 2
          },
          {
            "date": "2026-06-18",
            "count": 3
          },
          {
            "date": "2026-06-19",
            "count": 2
          },
          {
            "date": "2026-06-20",
            "count": 3
          },
          {
            "date": "2026-06-22",
            "count": 4
          },
          {
            "date": "2026-06-23",
            "count": 2
          },
          {
            "date": "2026-06-24",
            "count": 1
          },
          {
            "date": "2026-06-25",
            "count": 1
          },
          {
            "date": "2026-06-26",
            "count": 2
          },
          {
            "date": "2026-06-27",
            "count": 3
          },
          {
            "date": "2026-06-29",
            "count": 2
          },
          {
            "date": "2026-06-30",
            "count": 1
          },
          {
            "date": "2026-07-01",
            "count": 1
          },
          {
            "date": "2026-07-02",
            "count": 3
          },
          {
            "date": "2026-07-03",
            "count": 2
          },
          {
            "date": "2026-07-05",
            "count": 1
          },
          {
            "date": "2026-07-06",
            "count": 3
          },
          {
            "date": "2026-07-07",
            "count": 2
          },
          {
            "date": "2026-07-08",
            "count": 3
          },
          {
            "date": "2026-07-09",
            "count": 1
          },
          {
            "date": "2026-07-10",
            "count": 4
          },
          {
            "date": "2026-07-11",
            "count": 8
          },
          {
            "date": "2026-07-12",
            "count": 3
          },
          {
            "date": "2026-07-13",
            "count": 5
          },
          {
            "date": "2026-07-14",
            "count": 10
          },
          {
            "date": "2026-07-15",
            "count": 6
          },
          {
            "date": "2026-07-16",
            "count": 6
          },
          {
            "date": "2026-07-17",
            "count": 2
          },
          {
            "date": "2026-07-18",
            "count": 7
          },
          {
            "date": "2026-07-19",
            "count": 5
          },
          {
            "date": "2026-07-20",
            "count": 7
          },
          {
            "date": "2026-07-21",
            "count": 8
          },
          {
            "date": "2026-07-22",
            "count": 6
          }
        ],
        "complete": true,
        "collected": 410,
        "total_forks": 412
      },
      "star_history": null,
      "open_issues_and_prs": 20
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 178651,
      "source_files_sampled": 268,
      "oversized_source_files": 9,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "jiti",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "2.7.0"
        },
        {
          "name": "yaml",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "2.8.3"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 9,
        "merged_prs": 166,
        "open_issues": 11,
        "closed_ratio": 0.957,
        "closed_issues": 242,
        "closed_unmerged_prs": 156
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "nicobailon",
          "commits": 429,
          "avatar_url": "https://avatars.githubusercontent.com/u/2958133?v=4"
        },
        {
          "type": "User",
          "login": "loss-and-quick",
          "commits": 15,
          "avatar_url": "https://avatars.githubusercontent.com/u/39405619?v=4"
        },
        {
          "type": "User",
          "login": "marcfargas",
          "commits": 8,
          "avatar_url": "https://avatars.githubusercontent.com/u/10505?v=4"
        },
        {
          "type": "User",
          "login": "claude",
          "commits": 7,
          "avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
        },
        {
          "type": "User",
          "login": "SeanThomasWilliams",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/1364098?v=4"
        },
        {
          "type": "User",
          "login": "tencnivel",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/25895468?v=4"
        },
        {
          "type": "User",
          "login": "AeonDave",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/7406886?v=4"
        },
        {
          "type": "User",
          "login": "tmustier",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/6326440?v=4"
        },
        {
          "type": "User",
          "login": "XWIlluDelu",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/87866200?v=4"
        },
        {
          "type": "User",
          "login": "elecnix",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/17873?v=4"
        }
      ],
      "contributors_sampled": 47,
      "top_contributor_share": 0.816
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "release.yml",
        "test.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 9,
            "reason": "27 out of 28 merged PRs checked by a CI test -- score normalized to 9",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 2,
            "reason": "Found 7/30 approved changesets -- score normalized to 2",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 4 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 0,
            "reason": "license file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 3,
            "reason": "dependency not pinned by hash detected -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 8,
            "reason": "2 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "e658b40fe72d599df231b5d59ffec40d66f576fa",
        "ran_at": "2026-07-23T00:48:53Z",
        "aggregate_score": 4.9,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-21T01:15:16Z",
      "oldest_open_prs": [
        {
          "number": 565,
          "created_at": "2026-07-21T01:46:20Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 568,
          "created_at": "2026-07-21T05:55:58Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 569,
          "created_at": "2026-07-21T07:49:33Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 571,
          "created_at": "2026-07-21T12:01:06Z",
          "last_comment_at": "2026-07-21T14:50:44Z",
          "last_comment_author": "chatgpt-codex-connector"
        },
        {
          "number": 574,
          "created_at": "2026-07-21T15:04:19Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 576,
          "created_at": "2026-07-21T19:20:57Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 577,
          "created_at": "2026-07-21T22:31:38Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 582,
          "created_at": "2026-07-22T17:52:05Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 583,
          "created_at": "2026-07-22T18:26:49Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-21T01:12:22Z",
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": [
        {
          "number": 499,
          "created_at": "2026-07-16T21:03:28Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 566,
          "created_at": "2026-07-21T02:59:52Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 567,
          "created_at": "2026-07-21T05:48:55Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 570,
          "created_at": "2026-07-21T11:00:56Z",
          "last_comment_at": "2026-07-22T13:23:51Z",
          "last_comment_author": "shoehn"
        },
        {
          "number": 572,
          "created_at": "2026-07-21T13:33:33Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 575,
          "created_at": "2026-07-21T18:43:43Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 578,
          "created_at": "2026-07-21T23:55:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 579,
          "created_at": "2026-07-22T06:11:24Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 580,
          "created_at": "2026-07-22T09:06:48Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 581,
          "created_at": "2026-07-22T13:04:13Z",
          "last_comment_at": "2026-07-22T18:55:53Z",
          "last_comment_author": "arrev-dev"
        },
        {
          "number": 584,
          "created_at": "2026-07-22T18:55:54Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/nicobailon/pi-subagents",
    "host": "github.com",
    "name": "pi-subagents",
    "owner": "nicobailon"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 67,
      "inputs": {
        "security": 49,
        "vitality": 90,
        "community": 62,
        "governance": 66,
        "engineering": 60
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 90,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "commits_last_year": 532,
              "human_commit_share": 1,
              "days_since_last_push": 1,
              "active_weeks_last_year": 27
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 1 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "27/52 weeks with commits",
                "points": 18.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 27
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "532 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 532
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 89,
              "latest_release_tag": "v0.35.1",
              "releases_from_tags": false,
              "days_since_latest_release": 4,
              "mean_days_between_releases": 3.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "89 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 89
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 1,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 1 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 62,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "good",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "forks": 412,
              "stars": 2683,
              "watchers": 6,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "2,683 stars",
                "points": 55.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 2683
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "412 forks",
                "points": 21.8,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 412
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "6 watchers",
                "points": 3.9,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "has_readme": true,
              "has_license": false,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "no license file detected",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "license_absent",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "excellent",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 85,
            "inputs": {
              "packages": [
                "pi-subagents"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 124332
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "124,332 downloads/month across npm",
                "points": 67.9,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 124332,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 66,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 37,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 47,
              "top_contributor_share": 0.816
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 82% of commits",
                "points": 4.1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 82
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "47 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 47
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 4 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 67,
            "inputs": {
              "merged_prs": 166,
              "open_issues": 11,
              "closed_issues": 242,
              "issue_closed_ratio": 0.957,
              "closed_unmerged_prs": 156
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "96% of issues closed",
                "points": 44.7,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 96
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "166/322 decided PRs merged",
                "points": 19.7,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 166,
                      "decided": 322
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 7/30 approved changesets -- score normalized to 2",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 73,
            "inputs": {
              "followers": 1752,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "nicobailon",
              "public_repos": 130,
              "account_age_days": 4978
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "1,752 followers of nicobailon",
                "points": 23.3,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1752,
                      "login": "nicobailon"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "130 public repos, account ~13 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 130
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 13
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "pi-subagents"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "91 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 91
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 60,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 66,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "27 out of 28 merged PRs checked by a CI test -- score normalized to 9",
                "points": 18,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 49,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 49,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 4.9
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "27 out of 28 merged PRs checked by a CI test -- score normalized to 9",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 7/30 approved changesets -- score normalized to 2",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 4 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 3",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "2 existing vulnerabilities detected",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 7
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 53,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.99,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "99 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 99,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 46,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "TypeScript (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 98,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 178651,
              "source_files_sampled": 268,
              "oversized_source_files": 9
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "9/268 source files over 60KB",
                "points": 53.2,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 268,
                      "oversized": 9
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index npm:pi-subagents@0.35.1; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T00:49:19.051540Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/n/nicobailon/pi-subagents.svg",
  "full_name": "nicobailon/pi-subagents",
  "license_state": "absent",
  "license_spdx": null
}

Оцінки — це сигнали, а не гарантії. Вони відображають публічно видимі практики на GitHub — це не аудит коду й не гарантія безпеки.

Відсутні дані виключаються, а ваги перенормовуються — нуль за відсутність ніколи не ставиться. Методологія версіонована й відкрита: метрики v1.13.0, схема v0.27.0 — повна методологія · вікі метрик.

Як окремий результат виглядає на тлі всього реєстру: сукупна статистикаnpm.