Registro público
Informe de salud del softwareesquema 0.23.0 · métricas 1.13.0 · 2026-07-21 15:58 UTC

ultraworkers / claw-code

An agent-managed museum exhibit, built in Rust with Gajae-Code / LazyCodex — developed and maintained with no human intervention.

RustMIT★ 194.848 estrellas⑂ 109.571 forksdesde mar 2026Ver en GitHub ↗

ultraworkers/claw-code tiene un índice de salud de 60 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Community & Adoption (96/100) y la más baja, Security (39/100). Se actualizó por última vez hace 24 días. 2 personas concentran la mayor parte del trabajo reciente.

60
global / 100
Moderado

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

60
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

Ultraworkers - ULWOrganización
1622 seguidores4 repositorios públicosdesde abr 2026

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

39En riesgo · 22% del índice global
Cómo se puntúa
28.8/36Recencia de push — último push hace 24 días
8.3/36Cadencia de commits — 12/52 semanas con commits
18/18Volumen de commits — 1684 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year1684
human_commit_share1
days_since_last_push24
active_weeks_last_year12
Cómo se puntúa
0/27Publica versiones — sin versiones publicadas
0/36Recencia de las versiones — sin versiones
0/27Cadencia de publicación — sin versiones
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count0
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

96Excelente · 18% del índice global
Cómo se puntúa
60/60Estrellas — 194.848 estrellas
25/25Forks — 109.571 forks
15/15Observadores — 1965 observadores
Datos de entrada utilizados
forks109.571
stars194.848
watchers1965
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
18/18Guía CONTRIBUTING
13.5/13.5Código de conducta
0/7.2Plantilla de issues
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conduct
has_pull_request_template

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

62Moderado · 24% del índice global
Cómo se puntúa
25.2/54Factor bus — la mitad de los commits recae en 2 contribuyente(s)
11.3/22.5Distribución de commits — el principal contribuyente firma el 50% de los commits
13.5/13.5Amplitud de contribuyentes — 22 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 12 contributing companies or organizations
Datos de entrada utilizados
bus_factor2
contributors_sampled22
top_contributor_share0,498
Cómo se puntúa
46.5/46.8Resolución de issues — 100% de issues cerradas
15.5/38.3Aceptación de PR — 140/346 PR decididos fusionados
4.5/15OpenSSF Scorecard: Code-Review — Found 6/18 approved changesets -- score normalized to 3
Datos de entrada utilizados
merged_prs140
open_issues12
closed_issues2195
issue_closed_ratio0,995
closed_unmerged_prs206
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
23.1/25Alcance del propietario — 1622 seguidores de ultraworkers
5.7/25Trayectoria — 4 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers1622
owner_typeOrganization
is_verified
owner_loginultraworkers
public_repos4
account_age_days110

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

64Moderado · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 3 flujo(s) de trabajo
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
16/20OpenSSF Scorecard: CI-Tests — 7 out of 8 merged PRs checked by a CI test -- score normalized to 8
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentación

65Moderado
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
0/10Topics
0/10Wiki
Datos de entrada utilizados
topics
has_wikino
homepage
has_readme
has_docs_dir
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

39En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2/2.5CI-Tests — 7 out of 8 merged PRs checked by a CI test -- score normalized to 8
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
2.2/7.5Code-Review — Found 6/18 approved changesets -- score normalized to 3
2.5/2.5Contributors — project has 12 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
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
2/5Security-Policy — security policy file detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 10 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate3,9
Excluidos de la puntuación (sin datos o no aplicable): packaging, signed_releases. Los pesos restantes se han renormalizado.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

67Moderado · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — CLAUDE.md, rust/CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 96 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,96
agent_instruction_filesCLAUDE.md, rust/CLAUDE.md
agent_instruction_max_bytes1181
Cómo se puntúa
12.6/18Arranque con un solo comando — rust/Cargo.toml, rust/crates/api/Cargo.toml, rust/crates/claw-analog/Cargo.toml (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Rust (tipado estático)
10/10Entorno reproducible — Dockerfile, lockfile
4/10Práctica demostrada con agentes — 2 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesCargo.lock
has_dockerfile
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0,02
toolchain_manifestsrust/Cargo.toml, rust/crates/api/Cargo.toml, rust/crates/claw-analog/Cargo.toml, rust/crates/claw-rag-service/Cargo.toml, rust/crates/commands/Cargo.toml, rust/crates/compat-harness/Cargo.toml, rust/crates/mock-anthropic-service/Cargo.toml, rust/crates/plugins/Cargo.toml, rust/crates/runtime/Cargo.toml, rust/crates/rusty-claude-cli/Cargo.toml, rust/crates/telemetry/Cargo.toml, rust/crates/tools/Cargo.toml
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Rust (tipado estático)
50.5/55Tamaños de archivo manejables — 15/183 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageRust
largest_source_bytes756.651
source_files_sampled183
oversized_source_files15
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
20/20Servidor MCP
0/40Ejemplos ejecutables
Datos de entrada utilizados
example_dirs
has_mcp_signal
api_schema_files

Datos clave

194.848estrellas de GitHub
22contribuidores
1684commits en los últimos 12 meses
24días desde el último push
0versiones publicadas
2factor bus
12issues abiertas
crates.io, PyPIecosistemas de paquetes

Advertencias de recopilación de datos

  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

OpenSSF Scorecard 3.9 / 10
3.9agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-21 15:58 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
8CI-Tests7 out of 8 merged PRs checked by a CI test -- score normalized to 8
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
3Code-ReviewFound 6/18 approved changesets -- score normalized to 3
10Contributorsproject has 12 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
4Security-Policysecurity policy file detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities10 existing vulnerabilities detected
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 25104,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "HTML": 7128,
        "Rust": 4073243,
        "Shell": 19072,
        "Python": 168159,
        "Dockerfile": 932
      },
      "pushed_at": "2026-06-26T16:17:10Z",
      "created_at": "2026-03-31T08:58:08Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-21T15:56:37Z",
      "description": "An agent-managed museum exhibit, built in Rust with Gajae-Code / LazyCodex — developed and maintained with no human intervention.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Rust",
      "significant_languages": [
        "Rust"
      ]
    },
    "owner": {
      "blog": "https://discord.gg/6ztZB9jvWq",
      "name": "Ultraworkers - ULW",
      "type": "Organization",
      "login": "ultraworkers",
      "company": null,
      "location": "Canada",
      "followers": 1622,
      "avatar_url": "https://avatars.githubusercontent.com/u/272961631?v=4",
      "created_at": "2026-04-02T00:10:44Z",
      "is_verified": null,
      "public_repos": 4,
      "account_age_days": 110
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [],
      "recent_commits": [
        {
          "oid": "4ea31c1bc91c4e9bcbd67d51c550c01e127e6d0d",
          "body": "docs: document mlx-lm backend for Apple Silicon and known gotchas",
          "is_bot": false,
          "headline": "Merge pull request #3253 from EmreCelenli/docs/mlx-compatibility",
          "author_name": "Sigrid Jin (ง'̀-'́)ง oO",
          "author_login": "realsigridjin",
          "committed_at": "2026-06-26T16:17:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e0cba76ccdce960941e5b4782ea35456835352d",
          "body": "Improve command lookup normalization",
          "is_bot": false,
          "headline": "Merge pull request #3263 from hiisandog/fix/claw-small-cleanup-c6b25",
          "author_name": "Sigrid Jin (ง'̀-'́)ง oO",
          "author_login": "realsigridjin",
          "committed_at": "2026-06-26T16:16:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5babda196b1cc15204667371348fe987d8e8c094",
          "body": null,
          "is_bot": false,
          "headline": "Improve command lookup normalization",
          "author_name": "陈家名",
          "author_login": null,
          "committed_at": "2026-06-25T07:43:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ae922508c24b4c3491df23a5e8be064c11cf2d4",
          "body": null,
          "is_bot": false,
          "headline": "docs: document mlx-lm backend and known model-resolution/EOS gotchas",
          "author_name": "EmreCelenli",
          "author_login": "EmreCelenli",
          "committed_at": "2026-06-18T16:36:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d229a9b022d4845d28a728677e6a6b7c22ec5a2e",
          "body": "…ints\n\nfeat: wizard entry points — /setup command, claw setup subcommand (rebased)",
          "is_bot": false,
          "headline": "Merge pull request #3227 from TheArchitectit/worktree-wizard-entry-po…",
          "author_name": "YeonGyu-Kim",
          "author_login": "code-yeongyu",
          "committed_at": "2026-06-08T06:06:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05f0201ec717a2120ca643ce4390ea5994dddc34",
          "body": null,
          "is_bot": false,
          "headline": "fix: preserve runtime config validation compatibility",
          "author_name": "YeonGyu-Kim",
          "author_login": "code-yeongyu",
          "committed_at": "2026-06-08T06:01:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "36f6afcafdc152dd0d5f1209218ad819a2e47aba",
          "body": "docs: add interactive session example to quick start",
          "is_bot": false,
          "headline": "Merge pull request #3230 from Gaurav-x111/contributor/example-change",
          "author_name": "YeonGyu-Kim",
          "author_login": "code-yeongyu",
          "committed_at": "2026-06-08T05:44:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e52ea7a678cb29436e68acd625269fb719a0d68",
          "body": "…260608\n\nfix: validate attached redirection paths",
          "is_bot": false,
          "headline": "Merge pull request #3237 from hiisandog/fix/redirection-path-scope-20…",
          "author_name": "YeonGyu-Kim",
          "author_login": "code-yeongyu",
          "committed_at": "2026-06-08T05:43:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb21179ddebdfc33b2a8615286746816d17a1181",
          "body": null,
          "is_bot": false,
          "headline": "fix: validate attached redirection paths",
          "author_name": "陈家名",
          "author_login": null,
          "committed_at": "2026-06-08T02:18:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9b3548ca4337f54b001262474a35c209c17432b0",
          "body": "…field\n\nfix: parse Ollama reasoning fields",
          "is_bot": false,
          "headline": "Merge pull request #3236 from ultraworkers/fix/ollama-qwen-reasoning-…",
          "author_name": "YeonGyu-Kim",
          "author_login": "code-yeongyu",
          "committed_at": "2026-06-08T01:11:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "01f4dd48a38f280ad1dc230b4e170f67822e0478",
          "body": null,
          "is_bot": false,
          "headline": "docs: mention local Ollama reasoning setup",
          "author_name": "YeonGyu-Kim",
          "author_login": "code-yeongyu",
          "committed_at": "2026-06-08T01:08:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "222faabd7f770708c2dacea9d7c50a821a11130f",
          "body": null,
          "is_bot": false,
          "headline": "fix(cli): hint Ollama for Qwen tags",
          "author_name": "YeonGyu-Kim",
          "author_login": "code-yeongyu",
          "committed_at": "2026-06-08T01:08:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7503c1c03175c709a7579f025b19bbab6500244f",
          "body": null,
          "is_bot": false,
          "headline": "fix(providers): parse Ollama reasoning fields",
          "author_name": "YeonGyu-Kim",
          "author_login": "code-yeongyu",
          "committed_at": "2026-06-08T01:08:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6001156a6ca4e87ec42a9f757d700385a0be142b",
          "body": "…oning-history\n\nfix(providers): preserve OpenAI-compatible reasoning history",
          "is_bot": false,
          "headline": "Merge pull request #3234 from ultraworkers/fix/openai-compatible-reas…",
          "author_name": "YeonGyu-Kim",
          "author_login": "code-yeongyu",
          "committed_at": "2026-06-08T00:27:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1da1ca8e6602fbf46fc6e804fb84f7ed475cccb",
          "body": null,
          "is_bot": false,
          "headline": "test(cli): serialize env-sensitive model alias checks",
          "author_name": "YeonGyu-Kim",
          "author_login": "code-yeongyu",
          "committed_at": "2026-06-07T16:37:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27acfe1014461020b4a4393e66135875b9bb1ff3",
          "body": null,
          "is_bot": false,
          "headline": "test(runtime): isolate session and git metadata checks",
          "author_name": "YeonGyu-Kim",
          "author_login": "code-yeongyu",
          "committed_at": "2026-06-07T16:23:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1646613d17a760ac9412e16efd3f8776a959776",
          "body": null,
          "is_bot": false,
          "headline": "fix(providers): preserve OpenAI-compatible reasoning history",
          "author_name": "YeonGyu-Kim",
          "author_login": "code-yeongyu",
          "committed_at": "2026-06-07T16:23:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae2f203eb5462fbb75f7e719da465c32fcd8b979",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #3232 from Ajinkya-Ghuge/fix/deepseek-model-routing",
          "author_name": "Sigrid Jin (ง'̀-'́)ง oO",
          "author_login": "realsigridjin",
          "committed_at": "2026-06-07T09:40:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0755ddff3ca649866bdd954396e43b4e286d2495",
          "body": "…pat endpoints",
          "is_bot": false,
          "headline": "fix(providers): strip provider prefix from model names for openai_com…",
          "author_name": "Ajinkya-Ghuge",
          "author_login": "Ajinkya-Ghuge",
          "committed_at": "2026-06-06T16:59:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db9ff4925656131e6f625c9b81d1d8236fb01256",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add interactive session example to quick start",
          "author_name": "Gaurav-x111",
          "author_login": "Gaurav-x111",
          "committed_at": "2026-06-06T16:40:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3acb677d7026922c2edf5abb7ece65488225a1e3",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "Sigrid Jin (ง'̀-'́)ง oO",
          "author_login": "realsigridjin",
          "committed_at": "2026-06-06T09:16:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "43eac8fbecadc70e83d36070a5b93b2c2fab0e67",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "Sigrid Jin (ง'̀-'́)ง oO",
          "author_login": "realsigridjin",
          "committed_at": "2026-06-06T09:16:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c8505092f8e48ff1c2c5b94784b31cf585129bbd",
          "body": null,
          "is_bot": false,
          "headline": "update readme",
          "author_name": "Sigrid Jin (ง'̀-'́)ง oO",
          "author_login": "realsigridjin",
          "committed_at": "2026-06-06T09:14:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eaa2e320d911ce46704e55e18f5993e3e7ced408",
          "body": null,
          "is_bot": false,
          "headline": "docs: add ROADMAP #833 — native Ollama provider support via OLLAMA_HOST",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-05T03:27:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be8112f5f55f87517599db13fc0189a462d894e4",
          "body": "- OLLAMA_HOST takes priority over OPENAI_BASE_URL for local Ollama instances\n- No API key required; placeholder token used for Authorization header\n- Model names like 'qwen3:8b' bypass strict provider/model syntax validation\n- detect_provider_kind() checks OLLAMA_HOST first in routing cascade\n- Prov\n[…]\nar\n- Added OLLAMA_CONFIG constant and from_ollama_env() to openai_compat\n- Added test_ollama_host_bypasses_model_validation unit test\n- Supersedes PR #3213 (which had a duplicate if-let bug in mod.rs)",
          "is_bot": false,
          "headline": "feat: add native Ollama provider support via OLLAMA_HOST env var",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-05T03:12:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d58197cca4e7fbf8ffba048b2652e3ad1eef6cc9",
          "body": "- Update slash_command_specs().len() assertion from 139 to 140.\n  The /setup command added by this PR increased the spec count by 1\n  but the test's expected count was not updated, causing CI failure.\n\n- Add assert!(help.contains(\"/setup\")) to the\n  renders_help_from_shared_specs test so the new command is\n  verified in the help output.\n\n  Fixes CI Build ❌ and Test ❌ on #3218.",
          "is_bot": false,
          "headline": "fix: update slash command count and add /setup assertion in test",
          "author_name": "TheArchitectit",
          "author_login": "TheArchitectit",
          "committed_at": "2026-06-05T03:06:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3845040b9d4b0b58ea08aca1ab05e82d237b4590",
          "body": "…nd RuntimeProviderConfig\n\nThe setup wizard was merged in PR #3017 but was orphaned -- it was not\ndeclared as a module in main.rs, making it unreachable. Additionally,\nthe setup_wizard.rs imports RuntimeProviderConfig which did not exist\non upstream/main. This commit makes the wizard accessible and \n[…]\nAdd Setup to LocalHelpTopic enum.\n- Add setup to diagnostic subcommand matching.\n- Add subagentModel to TOP_LEVEL_FIELDS in config_validate.rs.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: wizard entry points -- /setup command, claw setup subcommand, a…",
          "author_name": "Your Name",
          "author_login": null,
          "committed_at": "2026-06-05T02:52:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "503d515f38004b0395f47ec63d0586cfb1601950",
          "body": "Fix formatting inconsistencies introduced by merged external PRs.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "style: cargo fmt after merged PRs (#3164, #3209, #3214, #3216)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-05T01:52:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "114c2da9fc8b98355c6fd122df3729daff32ced4",
          "body": "…fixes\n\nfix: session resume — scan all workspaces, skip current empty session",
          "is_bot": false,
          "headline": "Merge pull request #3216 from TheArchitectit/worktree-session-resume-…",
          "author_name": "Bellman",
          "author_login": "Yeachan-Heo",
          "committed_at": "2026-06-05T01:38:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b90f18f75a2bc966c2584bbc77938541ed85798b",
          "body": "…ry-v2\n\nfeat: API timeout config, Retry-After header, configurable retry, and 400 transient retry",
          "is_bot": false,
          "headline": "Merge pull request #3214 from TheArchitectit/worktree-api-timeout-ret…",
          "author_name": "Bellman",
          "author_login": "Yeachan-Heo",
          "committed_at": "2026-06-05T01:33:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b15197117dc694366e22bd3c54c38b93dba023a",
          "body": "Harden permission enforcement against sandbox bypasses",
          "is_bot": false,
          "headline": "Merge pull request #3209 from Sam0urr/harden-permission-enforcer",
          "author_name": "Bellman",
          "author_login": "Yeachan-Heo",
          "committed_at": "2026-06-05T01:32:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61e8ad9a8ed8fc58476af9cd4bd9d2512b4605ad",
          "body": "Generated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: add gajae-code to Ecosystem section",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-05T01:27:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef0d0c30a4ddf0bd0602b2fc7d872a9d982e49d0",
          "body": "fix: recover from llama.cpp context overflow and reqwest SSE decode failures",
          "is_bot": false,
          "headline": "Merge pull request #3164 from petterreinholdtsen/llama.cpp-errors",
          "author_name": "Bellman",
          "author_login": "Yeachan-Heo",
          "committed_at": "2026-06-05T01:25:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7305e5509afa54eae8496611732f172f891e3b9a",
          "body": "Updated the agents_and_skills_usage_support_help_and_unexpected_args\ntest to match the new skills help text that includes [--project].\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: update skills help test assertions for --project flag (#95 CI fix)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-05T01:23:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f0b5b36ebd8ef43460eeadf7313542953d9266e",
          "body": "Session save_to_path now wraps ENOENT errors from rotate and atomic\nwrite with a clear \"possible concurrent modification\" message instead\nof surfacing raw OS errno. Helps operators debugging race conditions\nwhen multiple claw invocations touch the same session file.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: wrap concurrent ENOENT as domain-specific session error (#112)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-05T01:19:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c848eeb76875acadffd131e3dd220ed1fd205e70",
          "body": "SessionLifecycleSummary now collects all matching tmux panes into an\nall_panes field and includes them in the JSON output. Previously the\nstatus command returned on the first non-idle pane, losing all other\nactive panes in the same workspace/session.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: status JSON reports all workspace panes not just the first (#326)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-05T01:15:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d4aad7103e27974daa768fad1073cbf2cc793f40",
          "body": "401 and 403 errors now include a hint explaining which env vars to\ncheck for each provider (OPENAI_API_KEY, ANTHROPIC_API_KEY, etc.)\nand suggesting claw doctor for credential verification.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: add actionable auth hint to 401/403 API errors (#28)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-05T01:10:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b60cbebb3a53a0bb68fe16e65ab71530525dbc61",
          "body": "claw skills install --project <path> now installs to .claw/skills/\nin the current project instead of the user-level registry. Skills\ninstalled at project level are already discovered by the existing\nregistry system. Both text and JSON handlers updated.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "feat: skills install --project flag for project-level scope (#95)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-05T01:05:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c4bcd92b6bcec524c993f927e4dcfd8a53a22fd",
          "body": "MCP server config now expands ${VAR} environment variable references\nand ~/ home directory prefix in command, args, and url fields. Previously\nthese values were passed verbatim to execve/URL-parse, causing silent\n\"No such file or directory\" failures for standard config patterns.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: expand ${VAR} and ~/ in MCP config fields (#92)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-05T01:00:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8822aabdb96553ab10121badfbe068a18156a91",
          "body": "deep_merge_objects now concatenates arrays when both layers provide\nthe same key. Previously permissions.allow, hooks.PreToolUse, etc.\nfrom earlier config layers (e.g. ~/.claw/settings.json) were silently\ndiscarded when a later layer (e.g. project .claw/settings.json) set\nthe same key. Now arrays are merged additively across layers.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: config merge concatenates arrays instead of replacing (#106)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-05T00:57:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aca6584fd59aa2a926770dba1612045ca28c9172",
          "body": "PermissionRule::parse now normalizes tool_name to lowercase, matching\nthe runtime convention. Previously \"Bash(rm:*)\" would never match\nbecause the runtime tool name is lowercase \"bash\". Same fix applied\nto denied_tools list.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: normalize permission rule tool names to lowercase (#94)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-05T00:53:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8cbb1834f959af128cb4709d3b108cd6d771304",
          "body": "/resume mode /clear now preserves the original session_id instead of\ngenerating a new one. This prevents the filename/meta-header divergence\nwhere /session list reported an id that --resume couldn't find.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: /clear preserves session_id to prevent resume divergence (#114)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-05T00:47:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb027adf650e0753b2cd0314b98bfa3f952845f3",
          "body": "…me mode (#113)\n\n/session switch and /session fork now return structured JSON with\nkind:error, error_kind:unsupported_resumed_command, and actionable\nhint instead of a raw error string that resume callers couldn't parse.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: /session switch and /session fork return structured JSON in resu…",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-05T00:42:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5bdffbe1612d8054548ecdd5032e75ff4bea8754",
          "body": "Verified with a roundtrip test: creating a session with usage data\n({input_tokens:100, output_tokens:50}), saving to JSONL, loading via\n--resume, and running /cost and /stats both return correct values.\nThe UsageTracker::from_session reads message.usage which is properly\nserialized/deserialized by ConversationMessage::to_json/from_json.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP #330 DONE (verified /cost and /stats work in resume)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-05T00:32:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04f18862a823a3b65ecb39ad164bbe9d1e165e8c",
          "body": "Add friendly_cwd() helper that strips /private prefix on macOS so\nstatus, doctor, and diff JSON output matches user-visible invocation\ncwd instead of the canonicalized /private/tmp path.\n\nApplied to status_context() and render_doctor_report().\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: strip macOS /private symlink prefix from JSON cwd (#421)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-05T00:08:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0e10ff182961df81901a4d3cf9474d2eed0cefd",
          "body": "342: /commands command-index alias is now covered by /help --output-format\njson which returns structured commands array with 139 entries (name,\nsummary, resume_supported per command). Implemented in #325.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP #342 DONE (covered by #325)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T23:56:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0cab03df75c69a1f90de5ce1d0d773b2144d80e1",
          "body": "/model was in the unsupported resume group but is a read-only command\nthat can safely return model configuration. Now returns default_model,\nconfigured_model, resolved_model, and requested_model in JSON mode.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: /model returns structured JSON in resume mode (#343)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T23:54:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb86f4d2c341bed7856b302c2389299af8d01af8",
          "body": "--compact was silently ignored when used with non-prompt commands like\nclaw --compact status or claw --compact config. Now returns a typed\nerror with guidance on proper usage.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: reject --compact for non-prompt subcommands (#98)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T22:25:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c3d7be37001feb11b3b57a5209836995a69a0da",
          "body": "/tasks was marked resume_supported but rejected in resume mode.\nNow returns a structured JSON response with kind:'tasks' and note\nthat background tasks are only available in the interactive REPL.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: /tasks returns structured JSON in resume mode (#341)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T22:15:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3ffaefba15b4d265e107325ae96442e6cf36bad",
          "body": "- /config help now returns available_sections array and loaded_keys\n  count instead of treating 'help' as an unsupported section\n- Updated test to exclude 'help' from unsupported sections test\n- Added new test config_help_returns_structured_section_list_344\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: /config help returns structured section list (#344)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T22:09:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd18cf5385c055adeca1e249f9dda5492358c230",
          "body": "/config help now returns a list of available config sections in both\ntext and JSON mode instead of treating 'help' as an unsupported section.\n\nText mode shows available sections with descriptions.\nJSON mode returns available_sections array with loaded_keys count.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: /config help returns structured section list (#344)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T22:05:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f3120e70abb2d14dea082843c59854f9e2e6dd4",
          "body": "Top-level 'claw --output-format json help' now includes a 'commands'\narray with name, summary, and resume_supported for each registered\nslash command, plus 'total_commands' count.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: add structured command list to top-level help JSON (#325)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T21:57:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1a16398fe03911db24f643d8a53696432deb145",
          "body": "plugins enable now checks if the plugin was already enabled before\nsetting reload_runtime:true. Same for disable. Returns 'already enabled'\nor 'already disabled' in the message when no state change occurred.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: plugins enable/disable only reloads when state changes (#411)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T21:49:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d50276366daae8593f9c34d91ee38ddf8b57a49",
          "body": "339: /session delete works in resume mode with --force flag. The\nconfirmation-required path returns a typed JSON error with hint.\ndelete-force path performs actual deletion with proper JSON response.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP #339 DONE (/session delete resume-safe)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T21:40:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13992ade545f8aa8f39ca88d9013ebdb5fc7c0ac",
          "body": "129: MCP server startup does not block credential validation - credentials\nare resolved via resolve_cli_auth_source() before build_runtime() which\nis where MCP state discovery happens.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP #129 DONE (verified code flow)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T21:33:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b04b1d6ac8547ff9a5986110365ec2fcb4d4255b",
          "body": "Add GitOperation enum to detect mid-operation git states from the\nbranch header in git status --short --branch output.\n\n- Rebase: 'rebasing ...' in branch header\n- Merge: '[merge-in-progress]' tag\n- Cherry-pick: 'cherry-pick-in-progress' tag\n- Bisect: 'bisect-in-progress' tag\n\nOperation state appear\n[…]\n 'git_operation' field (null when no operation)\n- git_state headline includes operation prefix\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "feat: detect git rebase/merge/cherry-pick/bisect states (#89)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T21:31:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "934bf2837a1e530a6dc04d811506822bf4290517",
          "body": "--base-commit now rejects non-hex strings and strings outside 7-64\ncharacter range. Matches the pattern used by --reasoning-effort.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: validate --base-commit is a hex SHA (#122)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T21:21:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b94c49c32368a6abc0c56541f4e543622ac32851",
          "body": "The --cwd validation added in #99 rejects non-existent paths, but the\ntest used /tmp/project which doesn't exist on CI Linux runners. Changed\nto /tmp which exists everywhere.\n\nAlso marks ROADMAP #123 DONE (--allowedTools normalization verified).\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: use existing path in system-prompt test (#99 fix regression)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T21:13:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5df485cba9ae2a6c66acf8b120e8ac6bfca63f62",
          "body": "120: config parse errors now surfaced via load_error with hint\n121: hooks already uses PreToolUse/PostToolUse/Claude Code format\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP #120,121 DONE",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T21:05:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c8e973513c74c8909f47d67bf7fc9081d7b96892",
          "body": "MCP server details JSON now redacts args (shows count only),\nstrips URL query params which may contain tokens, and shows\nheaders_helper as configured/not-configured boolean instead of\nthe raw command string. env_keys and header_keys still exposed\n(key names only, not values).\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: redact MCP server sensitive fields in JSON (#90)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T20:59:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f9315bdc98e86f418def93e407929af3dbbc1b6",
          "body": "32: OpenAI model passthrough verified (model: openai/gpt-4, source: flag)\n43: Hook ingress opacity fixed (hook_validation structured in status JSON)\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP #32,43 DONE with runtime evidence",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T20:51:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "12a091afe633aec5c9e5a5f8ea364d0a670cb6bd",
          "body": "111: /providers routes to doctor slash command\n115: init generates acceptEdits not dontAsk\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP #111,115 DONE",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T20:48:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f0cf3b88865a883852bd9fb55fd0d76ea2aa2a9",
          "body": "101: RUSTY_CLAUDE_PERMISSION_MODE normalize maps aliases to valid modes\n104: export CLI path and slash command both return kind:export\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP #101,104 DONE",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T20:46:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e94c1a97f29e017a659c7ecd23ea1c149428d1a",
          "body": "93: --resume /tmp returns typed invalid_resume_argument error\n109: config validation emits structured ConfigDiagnostic + warnings[]\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP #93,109 DONE",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T20:40:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38626cad2009a39bdbc37ad5d22b359d33910647",
          "body": "85: skills discovery bounded by git root (nearest_git_root in prompt.rs)\n88: instruction file discovery bounded by git root\n125: git_state reports 'no_git_repo' when not in git repo\n126: config section exposes 'merged' key-value pairs\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP #85,88,125,126 DONE",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T20:36:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e84f7c8034239983aed475aac0ffdddeda3f61a7",
          "body": "status/doctor JSON now reports git_state:'no_git_repo' when\nproject_root is None, instead of the misleading 'clean' which\nimplied a git repo was present with zero changes.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: report 'no_git_repo' instead of 'clean' when not in git (#125)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T20:34:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8f066347be61388715f00d3c344c8b669a7c240",
          "body": "bootstrap-plan --output-format json now returns phases as structured\nobjects with id, label, description, and order fields instead of\nraw Rust enum variant name strings. Also exposes total_phases count.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: structured bootstrap-plan phases JSON (#412)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T20:29:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5adc7510536b4196636a373b32744a13264c8674",
          "body": "97: empty --allowedTools is unrestricted (no restrictions = default mode)\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP #97 DONE",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T20:24:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "adf5bd165e61ae3b9ae5f13e2c15765571b4b99d",
          "body": "--cwd now validates the path exists and is a directory before passing\nit to the system prompt renderer. --date rejects values with newlines\nor >20 chars to prevent prompt injection.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: validate --cwd and --date for system-prompt (#99)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T20:18:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b220366176fc4e8b9368e5703918ae1296e37834",
          "body": "81: project_root correctly reports per-CWD paths\n82: sandbox correctly reports macOS degraded state (filesystem_active + unsupported)\n83: system-prompt --date parameter works correctly\n87: default permission_mode is workspace-write from config\n91: permission mode aliases resolve to valid modes\n102: \n[…]\ng parses single token correctly\n128: validate_model_syntax rejects malformed models with hints\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP 81-83,87,91,102,117,128 DONE with direct evidence",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T20:10:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b5d67ef249358df9dcc4b20267159ef52788c406",
          "body": "105: status reads model from .claw.json config (model_source: config)\n118: /stats and /tokens both route to stats handler\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP #105,118 DONE",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T20:04:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a40568e1c2567b1cbb03787458b3850c22bd5a3",
          "body": "80: session lookup error now returns session_not_found with hint\n86: .claw.json invalid JSON handled gracefully by config loader\n100: binary_provenance exposes git_sha, build_date in status JSON\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP #80,86,100 DONE",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T20:02:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41b3566468c6c08fcbe73bd34e4a914a717a4f12",
          "body": "Changed resumed_help_command_emits_structured_json to assert 'message'\nfield instead of 'text', matching the #338 fix for help JSON field\nconsistency.\n\nAlso marked ROADMAP #340 and #345 DONE with direct runtime evidence:\n340: resume /session help now routes JSON to stdout (verified)\n345: resume /config <section> now returns section-specific JSON (verified)\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: update resume help test for message field parity (#338)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T20:01:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b86159cbb7c767f735a69ef0d6b8a86396fa0e9e",
          "body": "124: validate_model_syntax already rejects empty, spaces, and invalid formats\n127: subcommand --json already routes to local JSON handlers\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP #124,127 DONE with direct evidence",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T19:56:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e5b9966c0784398f19e75459754e6266b7e2204",
          "body": "78: plugins CLI wired as CliAction::Plugins (verified runtime)\n84: dump-manifests fixed 2026-06-03\n103: agents discovery handles .md with YAML frontmatter (#442)\n107: hook validation in doctor JSON (verified runtime)\n108: CLI typos → command_not_found (verified runtime)\n110: ConfigLoader discovers p\n[…]\neys now emit warnings not errors (#441)\n119: bare_slash_command_guidance checks aliases (#772)\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark 8 ROADMAP items DONE (78,84,103,107,108,110,116,119)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T19:52:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "33f771f3f59f967269ca4769bd4ad9d433b88e74",
          "body": "Generated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP #77 DONE (classify_error_kind implemented)",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T19:51:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3fbfcc40ca34fd20fa00eea341e389515138ab45",
          "body": "327: mcp help now includes .claw.json in sources list\n328: agents help now includes ~/.codex/agents in sources list\n408: status JSON now has is_clean boolean field\n6: terminal is transport principle — implementation tracked by #810-#816\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP 327,328,408,6 DONE with fix evidence",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T19:47:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7c5c11d1e773550d36c428ab0957b0b03e26f88",
          "body": "#327: mcp help now includes .claw.json in documented sources list\n#328: agents help now includes ~/.codex/agents in documented sources list\n#408: added is_clean boolean to status JSON workspace for unambiguous\n  dirty-state detection; changed_files documented as total non-clean count\n#338: resume he\n[…]\nMAP.md, including product principles (1-6) and items with\nconfirmed fix text (13-75, 96, 200).\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: correct help source lists, add is_clean to status JSON",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T19:46:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c0447e2be124d5c25be6f07cbbac24ca8a27b4b9",
          "body": "338: resume help now uses 'message' field consistent with top-level help\n410: mcp and skills list now expose 'count' field for polymorphic consumption\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP 338,410 DONE with fix evidence",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T19:35:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b22ed700a1566a6780acc3340fb1e5e3170e9af",
          "body": "#410: Added  field to mcp list and skills list JSON for\npolymorphic consumption parity with agents list. All three sibling\nlist commands now expose a canonical  integer field alongside\ntheir command-specific details.\n\n#338: Changed resume  JSON from  to  field for\nconsistency with top-level .\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: standardize list command count fields and resume help field name",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T19:34:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76f9a134ae634d344619a04738b1ba04ee897870",
          "body": "Items verified with direct runtime evidence:\n- #7: plugins CLI wired as CliAction::Plugins\n- #77: classify_error_kind exists with 69 references\n- #90: error envelopes carry machine-readable hint field\n- #119: bare_slash_command_guidance checks aliases\n- #346: agents show returns agent_not_found erro\n[…]\n- #380: tokens --help returns command_not_found\n- #381: cache --help returns command_not_found\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark 16 ROADMAP items as DONE with direct verification evidence",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T19:27:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9c11325e83809ca8742b9b03e3af73c21decaab5",
          "body": "Items verified against current codebase: 322, 323, 329, 337, 422 and\n10 early items with confirmed fix evidence.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark additional pre-440 ROADMAP items as DONE",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T19:23:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4708ab16114fa0b507dc2aa2af74495ecae92588",
          "body": "#683-#692: help topic JSON now includes usage, purpose, formats,\nrelated, local_only, requires_credentials, and aliases extracted\nfrom help prose. Export and doctor keep their custom structured\nresponses.\n\n#466: new check_base_url_health() validates ANTHROPIC_BASE_URL,\nOPENAI_BASE_URL, XAI_BASE_URL,\n[…]\nr basic\nHTTP(S) URL format. Non-http schemes and empty values produce a\nwarn-level diagnostic.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: add structured help JSON and provider BASE_URL validation",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T19:14:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "311e719e5d474c2b5813b36f1ed61a467eedc6f4",
          "body": "696: compact returns interactive_only error in non-interactive mode\n697: plugins uninstall already returns typed not-found error\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP 696-697 DONE",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T18:49:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b926a9d25f1240a5b20d40caf587680be3e0b2f7",
          "body": "14 items with verified fixes marked as DONE.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP 713-716,723,734-735,737,767,771,774-776,781 as DONE",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T18:45:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61d641d722085b0b260e5483d602b542822bbaaf",
          "body": "Generated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "style: apply cargo fmt",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T18:41:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f8679bd15a9b5fcb668575ed769a14548cb3cad",
          "body": "status --output-format json now exposes duplicate_flags array listing\nany --model, --output-format, or --permission-mode flags specified\nmore than once. Uses a module-level static for cross-function access.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: track duplicate global flags in status JSON",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T18:36:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ef21e23f346ededd9a6f669b4a8ca355b9e15c1",
          "body": "render_config_json now includes a 'merged' object with actual\nkey-value pairs from the resolved runtime configuration, not just\nthe count.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: expose merged key-value pairs in config JSON",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T18:12:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ac0386094c91b37b053daef9aff39686df500e5",
          "body": "335: session_details already includes created_at_ms\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: close ROADMAP 335 evidence",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T17:50:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c939c0ad696e4fcd525024bfb3c1eca26f9dfea",
          "body": "465: doctor auth check now exposes openai_key_present\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: close ROADMAP 465 evidence",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T17:48:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d41ab37e107874755d94930b31d9334543756cc",
          "body": "check_auth_health data fields now include openai_key_present alongside\napi_key_present and auth_token_present. any_auth_present already\nincludes OPENAI_API_KEY for prompt_ready status.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: expose openai_key_present in doctor auth check",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T17:46:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "662a50bdc05fcce4ff8ccd31cc7673c827cbd1ac",
          "body": "347: mcp show missing returns status:error\n356: status --help returns JSON\n357: doctor --help returns JSON\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: close ROADMAP 347,356,357 evidence",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T17:38:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1da4aa454faf58c92b396240230942a6d2f1e02d",
          "body": "413: ACP JSON no longer leaks tracking IDs\n416: plugins list returns structured plugins[] array\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: close ROADMAP 413,416 evidence",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T17:34:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f50f33407dc6b90d24e85deca39707be876b872",
          "body": "__SYSTEM_PROMPT_DYNAMIC_BOUNDARY__ is now filtered from the sections\narray in JSON output. boundary_index field exposed for callers that\nneed the static/dynamic split point.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "fix: filter boundary sentinel from system-prompt sections JSON",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T17:32:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ce4168c93d8ef051e745c973d74cc18b7d744ac",
          "body": "419: MCP unknown sub-actions return typed error with exit 1\n420: plugins help returns standard help envelope\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: close ROADMAP 419-420 evidence",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T17:25:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f1dd0c116601e1286c1b7aba4ad6faf3ecb0295",
          "body": "700: help JSON already has status field\n701: doctor details already structured {key,value}\n702: agents/skills both use source field\n703: plugins list has structured summary\n704: doctor checks have stable id field\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: close ROADMAP 700-704 evidence",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T17:21:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42f56e7f77f797b7b6ce915757753fdea32d6ba0",
          "body": "458: status field now universal across all JSON envelopes\n459: memory file discovery expanded with AGENTS.md/.claude/CLAUDE.md\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: close ROADMAP 458-459 evidence",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T17:17:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f25fae6d22241c7786b1eb65414778fd08ffe8cd",
          "body": "71 items with verified fixes marked as DONE. All have Fix/Fix applied\nsections with corresponding code evidence in the current codebase.\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: mark ROADMAP 726-806 as DONE",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T17:13:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be66d961bfa30cfbe496a3b00eae4c537e8e3f1f",
          "body": "All items already fixed in prior commits:\n705: estimated_cost_usd_num companion field\n706: skills show not-found error\n707: init temp_dir AtomicU64 counter\n708: skills show action field\n709: duplicate status keys removed\n710: diff action and working_directory\n711: version/system-prompt/export/init a\n[…]\nst filter\n720: help <topic> routing\n721: config sections support\n722: rebase conflict resolved\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: close ROADMAP 705-722 evidence",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T17:06:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b1a40a2364ea01685c816b81a3874db3cd18c46e",
          "body": "694: pre-push cargo build gate already exists\n698: config warning dedup already implemented\n\nGenerated with https://github.com/Yeachan-Heo/gajae-code\nCo-authored-by: Gajae Code <dev@gajae-code.com>",
          "is_bot": false,
          "headline": "docs: close ROADMAP 694,698 evidence",
          "author_name": "bellman",
          "author_login": null,
          "committed_at": "2026-06-04T17:04:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 0,
      "commits_last_year": 1684,
      "latest_release_at": null,
      "latest_release_tag": null,
      "releases_from_tags": false,
      "days_since_last_push": 24,
      "active_weeks_last_year": 12,
      "days_since_latest_release": null,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 87,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 109571,
      "stars": 194848,
      "watchers": 1965,
      "fork_history": null,
      "star_history": null,
      "open_issues_and_prs": 32
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "rust/Cargo.toml",
        "rust/crates/api/Cargo.toml",
        "rust/crates/claw-analog/Cargo.toml",
        "rust/crates/claw-rag-service/Cargo.toml",
        "rust/crates/commands/Cargo.toml",
        "rust/crates/compat-harness/Cargo.toml",
        "rust/crates/mock-anthropic-service/Cargo.toml",
        "rust/crates/plugins/Cargo.toml",
        "rust/crates/runtime/Cargo.toml",
        "rust/crates/rusty-claude-cli/Cargo.toml",
        "rust/crates/telemetry/Cargo.toml",
        "rust/crates/tools/Cargo.toml"
      ],
      "largest_source_bytes": 756651,
      "source_files_sampled": 183,
      "oversized_source_files": 15,
      "agent_instruction_files": [
        "CLAUDE.md",
        "rust/CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 1181
    },
    "dependencies": {
      "manifests": [
        "rust/Cargo.toml",
        "src/setup.py"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "crates",
        "pypi"
      ],
      "dependencies": [],
      "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": 20,
        "merged_prs": 140,
        "open_issues": 12,
        "closed_ratio": 0.995,
        "closed_issues": 2195,
        "closed_unmerged_prs": 206
      },
      "bus_factor": 2,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "Yeachan-Heo",
          "commits": 609,
          "avatar_url": "https://avatars.githubusercontent.com/u/54757707?v=4"
        },
        {
          "type": "User",
          "login": "code-yeongyu",
          "commits": 563,
          "avatar_url": "https://avatars.githubusercontent.com/u/11153873?v=4"
        },
        {
          "type": "User",
          "login": "TheArchitectit",
          "commits": 16,
          "avatar_url": "https://avatars.githubusercontent.com/u/241862351?v=4"
        },
        {
          "type": "User",
          "login": "realsigridjin",
          "commits": 7,
          "avatar_url": "https://avatars.githubusercontent.com/u/41055141?v=4"
        },
        {
          "type": "User",
          "login": "gismo212",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/125292781?v=4"
        },
        {
          "type": "User",
          "login": "andhai",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/20992727?v=4"
        },
        {
          "type": "User",
          "login": "wangguan1995",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/39621324?v=4"
        },
        {
          "type": "User",
          "login": "olabi",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/167965?v=4"
        },
        {
          "type": "User",
          "login": "LLuke",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/3068609?v=4"
        },
        {
          "type": "User",
          "login": "EmreCelenli",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/88101154?v=4"
        }
      ],
      "contributors_sampled": 22,
      "top_contributor_share": 0.498
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "release.yml",
        "rust-ci.yml",
        "rust.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Cargo.lock"
      ],
      "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": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 8,
            "reason": "7 out of 8 merged PRs checked by a CI test -- score normalized to 8",
            "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": 3,
            "reason": "Found 6/18 approved changesets -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 12 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": 10,
            "reason": "license file 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": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "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": 4,
            "reason": "security policy file 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": 0,
            "reason": "10 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "4ea31c1bc91c4e9bcbd67d51c550c01e127e6d0d",
        "ran_at": "2026-07-21T15:58:33Z",
        "aggregate_score": 3.9,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/ultraworkers/claw-code",
    "host": "github.com",
    "name": "claw-code",
    "owner": "ultraworkers"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 60,
      "inputs": {
        "security": 39,
        "vitality": 39,
        "community": 96,
        "governance": 62,
        "engineering": 64
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "at_risk",
        "name": "Vitality",
        "value": 39,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "commits_last_year": 1684,
              "human_commit_share": 1,
              "days_since_last_push": 24,
              "active_weeks_last_year": 12
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 24 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 24
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "12/52 weeks with commits",
                "points": 8.3,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 12
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1684 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1684
                    }
                  }
                ],
                "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": "critical",
            "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": 1,
            "inputs": {
              "releases_count": 0
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "no releases published",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases_published",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "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": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "excellent",
        "name": "Community & Adoption",
        "value": 96,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "excellent",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "forks": 109571,
              "stars": 194848,
              "watchers": 1965,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "194,848 stars",
                "points": 60,
                "status": "met",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 194848
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "109,571 forks",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 109571
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1,965 watchers",
                "points": 15,
                "status": "met",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1965
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "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": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 62,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "moderate",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "bus_factor": 2,
              "contributors_sampled": 22,
              "top_contributor_share": 0.498
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "2 contributor(s) cover half of all commits",
                "points": 25.2,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 50% of commits",
                "points": 11.3,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 50
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "22 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 22
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 12 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 66,
            "inputs": {
              "merged_prs": 140,
              "open_issues": 12,
              "closed_issues": 2195,
              "issue_closed_ratio": 0.995,
              "closed_unmerged_prs": 206
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.5,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "140/346 decided PRs merged",
                "points": 15.5,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 140,
                      "decided": 346
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 6/18 approved changesets -- score normalized to 3",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 59,
            "inputs": {
              "followers": 1622,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "ultraworkers",
              "public_repos": 4,
              "account_age_days": 110
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "1,622 followers of ultraworkers",
                "points": 23.1,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1622,
                      "login": "ultraworkers"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "4 public repos, account ~0 yr old",
                "points": 5.7,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 4
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 64,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 64,
            "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": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": "7 out of 8 merged PRs checked by a CI test -- score normalized to 8",
                "points": 16,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "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": 25,
                "status": "met",
                "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 39,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 39,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 3.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": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "7 out of 8 merged PRs checked by a CI test -- score normalized to 8",
                "points": 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 6/18 approved changesets -- score normalized to 3",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 12 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 detected",
                "points": 2.5,
                "status": "met",
                "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 not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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 detected",
                "points": 2,
                "status": "partial",
                "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": "10 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "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": 11
            },
            "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": 67,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.96,
              "agent_instruction_files": [
                "CLAUDE.md",
                "rust/CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 1181
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md, rust/CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md, rust/CLAUDE.md"
                    }
                  }
                ],
                "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": "96 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 96,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Cargo.lock"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.02,
              "toolchain_manifests": [
                "rust/Cargo.toml",
                "rust/crates/api/Cargo.toml",
                "rust/crates/claw-analog/Cargo.toml",
                "rust/crates/claw-rag-service/Cargo.toml",
                "rust/crates/commands/Cargo.toml",
                "rust/crates/compat-harness/Cargo.toml",
                "rust/crates/mock-anthropic-service/Cargo.toml",
                "rust/crates/plugins/Cargo.toml",
                "rust/crates/runtime/Cargo.toml",
                "rust/crates/rusty-claude-cli/Cargo.toml",
                "rust/crates/telemetry/Cargo.toml",
                "rust/crates/tools/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "rust/Cargo.toml, rust/crates/api/Cargo.toml, rust/crates/claw-analog/Cargo.toml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "rust/Cargo.toml, rust/crates/api/Cargo.toml, rust/crates/claw-analog/Cargo.toml"
                    }
                  }
                ],
                "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": "Rust (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "2 of the last 100 commits agent-authored or agent-credited",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 2,
                      "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 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 96,
            "inputs": {
              "primary_language": "Rust",
              "largest_source_bytes": 756651,
              "source_files_sampled": 183,
              "oversized_source_files": 15
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Rust (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "15/183 source files over 60KB",
                "points": 50.5,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 183,
                      "oversized": 15
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "critical",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": true,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              }
            ]
          }
        ],
        "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": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-21T15:58:54.778448Z",
  "schema_version": "0.23.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/u/ultraworkers/claw-code.svg",
  "full_name": "ultraworkers/claw-code",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.23.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadas.