@mrciphersmith/keryx 0.3.1 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/cli.js +7310 -2471
  2. package/dist/core.js +116 -10
  3. package/package.json +1 -1
  4. package/src/gdskills/bundled/install-manifest.json +349 -2
  5. package/src/gdskills/bundled/rules/core/model-selection.mdc +18 -0
  6. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +1 -1
  7. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.md +1 -1
  8. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.md +1 -1
  9. package/src/gdskills/bundled/skills/quality/deploy/SKILL.md +1 -1
  10. package/src/gdskills/bundled/skills/review/review-jev-comments/SKILL.md +184 -0
  11. package/src/gdskills/bundled/skills/review/review-jev-contract/SKILL.md +193 -0
  12. package/src/gdskills/bundled/skills/review/review-jev-docs/SKILL.md +189 -0
  13. package/src/gdskills/bundled/skills/review/review-jev-risk/SKILL.md +190 -0
  14. package/src/gdskills/bundled/skills/review/review-jev-scenarios/SKILL.md +187 -0
  15. package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.detail.md +88 -15
  16. package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +4 -4
  17. package/src/gdskills/bundled/stacks/c-cpp/agent-refs.json +4 -0
  18. package/src/gdskills/bundled/stacks/c-cpp/governance/eval.json +1777 -0
  19. package/src/gdskills/bundled/stacks/c-cpp/governance/scout.json +31 -0
  20. package/src/gdskills/bundled/stacks/c-cpp/pack.json +42 -0
  21. package/src/gdskills/bundled/stacks/c-cpp/rules/coding-style.mdc +80 -0
  22. package/src/gdskills/bundled/stacks/c-cpp/rules/patterns.mdc +87 -0
  23. package/src/gdskills/bundled/stacks/c-cpp/rules/security.mdc +90 -0
  24. package/src/gdskills/bundled/stacks/c-cpp/rules/testing.mdc +83 -0
  25. package/src/gdskills/bundled/stacks/c-cpp/skills/c-cpp-build-fix/SKILL.md +153 -0
  26. package/src/gdskills/bundled/stacks/c-cpp/skills/c-cpp-build-fix/evals.json +74 -0
  27. package/src/gdskills/bundled/stacks/c-cpp/skills/c-cpp-code-review/SKILL.md +132 -0
  28. package/src/gdskills/bundled/stacks/c-cpp/skills/c-cpp-code-review/evals.json +73 -0
  29. package/src/gdskills/bundled/stacks/c-cpp/skills/c-cpp-implementation/SKILL.md +151 -0
  30. package/src/gdskills/bundled/stacks/c-cpp/skills/c-cpp-implementation/evals.json +74 -0
  31. package/src/gdskills/bundled/stacks/c-cpp/skills/c-cpp-testing/SKILL.md +152 -0
  32. package/src/gdskills/bundled/stacks/c-cpp/skills/c-cpp-testing/evals.json +74 -0
  33. package/src/gdskills/bundled/stacks/ci-github-gitlab/agent-refs.json +4 -0
  34. package/src/gdskills/bundled/stacks/ci-github-gitlab/governance/eval.json +1295 -0
  35. package/src/gdskills/bundled/stacks/ci-github-gitlab/governance/scout.json +26 -0
  36. package/src/gdskills/bundled/stacks/ci-github-gitlab/pack.json +41 -0
  37. package/src/gdskills/bundled/stacks/ci-github-gitlab/rules/patterns.mdc +77 -0
  38. package/src/gdskills/bundled/stacks/ci-github-gitlab/rules/security.mdc +144 -0
  39. package/src/gdskills/bundled/stacks/ci-github-gitlab/skills/ci-pipeline-build-fix/SKILL.md +121 -0
  40. package/src/gdskills/bundled/stacks/ci-github-gitlab/skills/ci-pipeline-build-fix/evals.json +73 -0
  41. package/src/gdskills/bundled/stacks/ci-github-gitlab/skills/ci-pipeline-code-review/SKILL.md +139 -0
  42. package/src/gdskills/bundled/stacks/ci-github-gitlab/skills/ci-pipeline-code-review/evals.json +73 -0
  43. package/src/gdskills/bundled/stacks/ci-github-gitlab/skills/ci-pipeline-implementation/SKILL.md +147 -0
  44. package/src/gdskills/bundled/stacks/ci-github-gitlab/skills/ci-pipeline-implementation/evals.json +74 -0
  45. package/src/gdskills/bundled/stacks/docker-k8s-terraform/agent-refs.json +4 -0
  46. package/src/gdskills/bundled/stacks/docker-k8s-terraform/governance/eval.json +865 -0
  47. package/src/gdskills/bundled/stacks/docker-k8s-terraform/governance/scout.json +16 -0
  48. package/src/gdskills/bundled/stacks/docker-k8s-terraform/pack.json +46 -0
  49. package/src/gdskills/bundled/stacks/docker-k8s-terraform/rules/coding-style.mdc +74 -0
  50. package/src/gdskills/bundled/stacks/docker-k8s-terraform/rules/patterns.mdc +81 -0
  51. package/src/gdskills/bundled/stacks/docker-k8s-terraform/rules/security.mdc +146 -0
  52. package/src/gdskills/bundled/stacks/docker-k8s-terraform/rules/testing.mdc +61 -0
  53. package/src/gdskills/bundled/stacks/docker-k8s-terraform/skills/docker-k8s-terraform-build-fix/SKILL.md +151 -0
  54. package/src/gdskills/bundled/stacks/docker-k8s-terraform/skills/docker-k8s-terraform-build-fix/evals.json +74 -0
  55. package/src/gdskills/bundled/stacks/docker-k8s-terraform/skills/docker-k8s-terraform-review/SKILL.md +135 -0
  56. package/src/gdskills/bundled/stacks/docker-k8s-terraform/skills/docker-k8s-terraform-review/evals.json +76 -0
  57. package/src/gdskills/bundled/stacks/php-laravel/agent-refs.json +4 -0
  58. package/src/gdskills/bundled/stacks/php-laravel/governance/eval.json +1829 -0
  59. package/src/gdskills/bundled/stacks/php-laravel/governance/scout.json +33 -0
  60. package/src/gdskills/bundled/stacks/php-laravel/pack.json +41 -0
  61. package/src/gdskills/bundled/stacks/php-laravel/rules/coding-style.mdc +82 -0
  62. package/src/gdskills/bundled/stacks/php-laravel/rules/patterns.mdc +80 -0
  63. package/src/gdskills/bundled/stacks/php-laravel/rules/security.mdc +80 -0
  64. package/src/gdskills/bundled/stacks/php-laravel/rules/testing.mdc +82 -0
  65. package/src/gdskills/bundled/stacks/php-laravel/skills/php-laravel-build-fix/SKILL.md +143 -0
  66. package/src/gdskills/bundled/stacks/php-laravel/skills/php-laravel-build-fix/evals.json +74 -0
  67. package/src/gdskills/bundled/stacks/php-laravel/skills/php-laravel-code-review/SKILL.md +126 -0
  68. package/src/gdskills/bundled/stacks/php-laravel/skills/php-laravel-code-review/evals.json +76 -0
  69. package/src/gdskills/bundled/stacks/php-laravel/skills/php-laravel-implementation/SKILL.md +140 -0
  70. package/src/gdskills/bundled/stacks/php-laravel/skills/php-laravel-implementation/evals.json +75 -0
  71. package/src/gdskills/bundled/stacks/php-laravel/skills/php-laravel-testing/SKILL.md +124 -0
  72. package/src/gdskills/bundled/stacks/php-laravel/skills/php-laravel-testing/evals.json +74 -0
  73. package/src/gdskills/bundled/stacks/ruby-rails/agent-refs.json +4 -0
  74. package/src/gdskills/bundled/stacks/ruby-rails/governance/eval.json +1673 -0
  75. package/src/gdskills/bundled/stacks/ruby-rails/governance/scout.json +33 -0
  76. package/src/gdskills/bundled/stacks/ruby-rails/pack.json +42 -0
  77. package/src/gdskills/bundled/stacks/ruby-rails/rules/coding-style.mdc +69 -0
  78. package/src/gdskills/bundled/stacks/ruby-rails/rules/patterns.mdc +93 -0
  79. package/src/gdskills/bundled/stacks/ruby-rails/rules/security.mdc +90 -0
  80. package/src/gdskills/bundled/stacks/ruby-rails/rules/testing.mdc +89 -0
  81. package/src/gdskills/bundled/stacks/ruby-rails/skills/ruby-rails-build-fix/SKILL.md +143 -0
  82. package/src/gdskills/bundled/stacks/ruby-rails/skills/ruby-rails-build-fix/evals.json +73 -0
  83. package/src/gdskills/bundled/stacks/ruby-rails/skills/ruby-rails-code-review/SKILL.md +134 -0
  84. package/src/gdskills/bundled/stacks/ruby-rails/skills/ruby-rails-code-review/evals.json +71 -0
  85. package/src/gdskills/bundled/stacks/ruby-rails/skills/ruby-rails-implementation/SKILL.md +141 -0
  86. package/src/gdskills/bundled/stacks/ruby-rails/skills/ruby-rails-implementation/evals.json +72 -0
  87. package/src/gdskills/bundled/stacks/ruby-rails/skills/ruby-rails-testing/SKILL.md +125 -0
  88. package/src/gdskills/bundled/stacks/ruby-rails/skills/ruby-rails-testing/evals.json +72 -0
  89. package/src/gdskills/bundled/stacks/sql-db/agent-refs.json +4 -0
  90. package/src/gdskills/bundled/stacks/sql-db/governance/eval.json +1829 -0
  91. package/src/gdskills/bundled/stacks/sql-db/governance/scout.json +30 -0
  92. package/src/gdskills/bundled/stacks/sql-db/pack.json +40 -0
  93. package/src/gdskills/bundled/stacks/sql-db/rules/coding-style.mdc +69 -0
  94. package/src/gdskills/bundled/stacks/sql-db/rules/patterns.mdc +134 -0
  95. package/src/gdskills/bundled/stacks/sql-db/rules/security.mdc +74 -0
  96. package/src/gdskills/bundled/stacks/sql-db/rules/testing.mdc +83 -0
  97. package/src/gdskills/bundled/stacks/sql-db/skills/sql-db-build-fix/SKILL.md +147 -0
  98. package/src/gdskills/bundled/stacks/sql-db/skills/sql-db-build-fix/evals.json +72 -0
  99. package/src/gdskills/bundled/stacks/sql-db/skills/sql-db-code-review/SKILL.md +132 -0
  100. package/src/gdskills/bundled/stacks/sql-db/skills/sql-db-code-review/evals.json +73 -0
  101. package/src/gdskills/bundled/stacks/sql-db/skills/sql-db-implementation/SKILL.md +153 -0
  102. package/src/gdskills/bundled/stacks/sql-db/skills/sql-db-implementation/evals.json +77 -0
  103. package/src/gdskills/bundled/stacks/sql-db/skills/sql-db-testing/SKILL.md +129 -0
  104. package/src/gdskills/bundled/stacks/sql-db/skills/sql-db-testing/evals.json +73 -0
package/dist/core.js CHANGED
@@ -8179,6 +8179,24 @@ var init_catalog = __esm(() => {
8179
8179
  "Dispatch specialized review passes conceptually or as separate skill loads.",
8180
8180
  "Report findings first, ordered by severity, with concrete file references."
8181
8181
  ]),
8182
+ skill("review-jev-docs", "review", ["recommended", "full"], "Find documentation sections that went stale because of a diff, scored by Jev.", [
8183
+ "Split every discovered documentation source into sections by heading, deterministically.",
8184
+ "Link a section to changed code by an explicit path/symbol/verb it mentions.",
8185
+ "Ask Jev one noul question per linked section; keryx writes every word of the finding.",
8186
+ "Flag a removed/renamed CLI flag still mentioned in docs with no Jev call at all."
8187
+ ]),
8188
+ skill("review-jev-comments", "review", ["recommended", "full"], "Check whether open PR review comments were addressed, scored by Jev.", [
8189
+ "Read open comments from the existing ledger, never re-collect from GitHub.",
8190
+ "Compute commits-after-comment, thread-resolved, and reply facts deterministically.",
8191
+ "Ask Jev one choice question per open comment; keryx writes every word of the finding.",
8192
+ "Never post a reply or resolve a thread \u2014 the label is advisory only."
8193
+ ]),
8194
+ skill("review-jev-contract", "review", ["recommended", "full"], "Check a PR description's own claims, and a linked flow's frozen acceptance criteria, against the diff, scored by Jev.", [
8195
+ "Split the PR description into claims deterministically \u2014 bullets, and sentences carrying a verb cue.",
8196
+ "Compute deterministic facts per claim first: named files/symbols/flags in the diff, tests touched, exported-symbol changes.",
8197
+ 'Ask Jev one noul per claim; a claim the facts CONTRADICT (e.g. "no API change" with an exported symbol touched) is major regardless of the answer.',
8198
+ "Reuse flow 328's check-ac.ts (via runCheckAc) for the linked flow's frozen acceptance criteria \u2014 never reimplemented here."
8199
+ ]),
8182
8200
  skill("review-logic", "review", ["recommended", "full"], "Review logic correctness, contracts, edge cases, nullability, and async behavior.", [
8183
8201
  "Trace behavior through call sites and affected context.",
8184
8202
  "Look for incorrect assumptions, missing branches, race conditions, and error paths.",
@@ -8263,6 +8281,16 @@ var init_catalog = __esm(() => {
8263
8281
  "Fall back to confirming the class_scope sites exist; reasoning alone is capped at unverifiable.",
8264
8282
  "Emit one verdict per finding checked; never add a finding, raise a severity, or edit a finding's text."
8265
8283
  ]),
8284
+ skill("review-jev-risk", "review", ["recommended", "full"], "Risk map of a diff's hunks \u2014 deterministic facts plus one Jev noul per risk dimension, ranked, with a routing hint for security/concurrency.", [
8285
+ "Score every retained hunk on security, data/migration, public-API, concurrency, and error-handling.",
8286
+ "Emit a finding only above threshold and with no nearby test; severity capped at info/minor.",
8287
+ "Feed a routing hint for review-security-code/review-highload when a hunk crosses threshold on that dimension."
8288
+ ]),
8289
+ skill("review-jev-scenarios", "review", ["recommended", "full"], "Functional review \u2014 which user scenarios a diff likely changes, from gdwiki/PRD/README sources plus one Jev noul per touched scenario.", [
8290
+ "Discover scenarios from gdwiki user-scenario pages, PRD requirement sections, and README/docs how-to sections.",
8291
+ "Ask only scenarios whose linked code this diff touches.",
8292
+ "Emit the ranked manual-check list, and a minor finding for a likely-affected scenario with no covering test."
8293
+ ]),
8266
8294
  skill("review-frontend-conventions", "review", ["recommended", "full"], "Review frontend code against repository-local frontend conventions and agent entrypoints.", [
8267
8295
  "Load local AGENTS.md/CLAUDE.md and matched frontend rules.",
8268
8296
  "Check component, state, styling, i18n, error, and Storybook conventions.",
@@ -8632,7 +8660,12 @@ var init_skill_length_ceilings = __esm(() => {
8632
8660
  "review/review-frontend": 634,
8633
8661
  "review/review-frontend-conventions": 213,
8634
8662
  "review/review-highload": 550,
8663
+ "review/review-jev-comments": 184,
8664
+ "review/review-jev-contract": 193,
8665
+ "review/review-jev-docs": 189,
8666
+ "review/review-jev-risk": 190,
8635
8667
  "review/review-jev-rules": 267,
8668
+ "review/review-jev-scenarios": 187,
8636
8669
  "review/review-layout": 238,
8637
8670
  "review/review-logic": 377,
8638
8671
  "review/review-orchestrator": 1723,
@@ -9823,16 +9856,17 @@ function stripMutationToolsForPolicy(tools, policyProfile) {
9823
9856
  function mdSentinelLine(definition) {
9824
9857
  return `<!-- ${agentManagedSentinelText(definition)} -->`;
9825
9858
  }
9826
- function renderClaudeExport(definition, header) {
9859
+ function renderClaudeExport(definition, header, options = {}) {
9827
9860
  const { allowed, strippedForPolicy } = stripMutationToolsForPolicy(definition.tools, definition.policy_profile);
9828
9861
  const { mappedTools, droppedTools } = mapToolsForTarget(allowed, "claude");
9829
9862
  const claudeTools = mappedTools.length > 0 ? mappedTools : CLAUDE_READ_BASELINE;
9863
+ const modelLine = options.claudeSubagentAliases === false ? "model: inherit" : `model: ${CLAUDE_MODEL_ALIAS[definition.model_tier]}`;
9830
9864
  const frontmatter = [
9831
9865
  "---",
9832
9866
  `name: ${yamlDoubleQuoted(definition.name)}`,
9833
9867
  `description: ${yamlDoubleQuoted(definition.description)}`,
9834
9868
  `tools: ${yamlDoubleQuoted(claudeTools.join(", "))}`,
9835
- "model: inherit",
9869
+ modelLine,
9836
9870
  "---"
9837
9871
  ].join(`
9838
9872
  `);
@@ -9953,9 +9987,9 @@ ${header}
9953
9987
  }
9954
9988
  };
9955
9989
  }
9956
- function renderHostExport(definition, target, header) {
9990
+ function renderHostExport(definition, target, header, options = {}) {
9957
9991
  if (target === "claude") {
9958
- return { ok: true, result: renderClaudeExport(definition, header) };
9992
+ return { ok: true, result: renderClaudeExport(definition, header, options) };
9959
9993
  }
9960
9994
  if (target === "codex") {
9961
9995
  return renderCodexExport(definition, header);
@@ -9997,7 +10031,7 @@ function compileAgentHeader(definition) {
9997
10031
  }
9998
10032
  return { ok: true, header: renderHeader(definition) };
9999
10033
  }
10000
- function compileAgentDefinition(definition, target) {
10034
+ function compileAgentDefinition(definition, target, options = {}) {
10001
10035
  const headerResult = compileAgentHeader(definition);
10002
10036
  if (!headerResult.ok) {
10003
10037
  return { ok: false, error: headerResult.error };
@@ -10006,9 +10040,9 @@ function compileAgentDefinition(definition, target) {
10006
10040
  if (target === "keryx-shell") {
10007
10041
  return compileKeryxShell(definition, header);
10008
10042
  }
10009
- return renderHostExport(definition, target, header);
10043
+ return renderHostExport(definition, target, header, options);
10010
10044
  }
10011
- var KERYX_SHELL_ENFORCEMENT, BASELINE_NGRAM_WORDS = 10, BASELINE_WORDS, BASELINE_NGRAMS, AGENT_CONTENT_HASH_PLACEHOLDER, CONTENT_HASH_MARKER = "content-sha256:", MUTATION_TOOL_NAMES, CLAUDE_READ_BASELINE, KIRO_READ_BASELINE;
10045
+ var KERYX_SHELL_ENFORCEMENT, BASELINE_NGRAM_WORDS = 10, BASELINE_WORDS, BASELINE_NGRAMS, AGENT_CONTENT_HASH_PLACEHOLDER, CONTENT_HASH_MARKER = "content-sha256:", MUTATION_TOOL_NAMES, CLAUDE_READ_BASELINE, KIRO_READ_BASELINE, CLAUDE_MODEL_ALIAS;
10012
10046
  var init_compile = __esm(() => {
10013
10047
  init_baseline();
10014
10048
  init_schema();
@@ -10026,6 +10060,11 @@ var init_compile = __esm(() => {
10026
10060
  MUTATION_TOOL_NAMES = new Set(["apply_patch", "shell_exec"]);
10027
10061
  CLAUDE_READ_BASELINE = ["Read", "Grep", "Glob"];
10028
10062
  KIRO_READ_BASELINE = ["read"];
10063
+ CLAUDE_MODEL_ALIAS = {
10064
+ deep: "opus",
10065
+ standard: "sonnet",
10066
+ light: "haiku"
10067
+ };
10029
10068
  });
10030
10069
 
10031
10070
  // src/agents/export.ts
@@ -10102,6 +10141,28 @@ function decideAction(existing, generated, format, expectedName) {
10102
10141
  }
10103
10142
  return { action: "update" };
10104
10143
  }
10144
+ async function readClaudeSubagentAliasesConfig(projectRoot) {
10145
+ const file = path36.join(projectRoot, CLAUDE_SUBAGENT_ALIASES_CONFIG_PATH);
10146
+ if (!await pathExists(file)) {
10147
+ return { enabled: true };
10148
+ }
10149
+ const read = await readJsonObjectFile(file);
10150
+ if (read.state !== "object") {
10151
+ return { enabled: true, note: `${CLAUDE_SUBAGENT_ALIASES_CONFIG_PATH} could not be read as a JSON object; claude subagent aliases stayed enabled` };
10152
+ }
10153
+ const modelGuidance = read.value["modelGuidance"];
10154
+ if (typeof modelGuidance !== "object" || modelGuidance === null || Array.isArray(modelGuidance)) {
10155
+ return { enabled: true };
10156
+ }
10157
+ const value = modelGuidance["claudeSubagentAliases"];
10158
+ if (value === false) {
10159
+ return { enabled: false };
10160
+ }
10161
+ if (value !== undefined && value !== true) {
10162
+ return { enabled: true, note: `${CLAUDE_SUBAGENT_ALIASES_CONFIG_PATH}: modelGuidance.claudeSubagentAliases is not a boolean; aliases stayed enabled` };
10163
+ }
10164
+ return { enabled: true };
10165
+ }
10105
10166
  async function planAgentExport(projectRoot, definition, runtime, opts = {}) {
10106
10167
  const supportLevel = agentExportSupport(runtime, opts.lookup);
10107
10168
  if (runtime === "keryx-shell") {
@@ -10168,7 +10229,8 @@ ${headerResult.header}
10168
10229
  ...decided.reason !== undefined ? { reason: decided.reason } : {}
10169
10230
  };
10170
10231
  }
10171
- const compiled = compileAgentDefinition(definition, runtime);
10232
+ const compileOptions = runtime === "claude" ? { claudeSubagentAliases: (await readClaudeSubagentAliasesConfig(projectRoot)).enabled } : {};
10233
+ const compiled = compileAgentDefinition(definition, runtime, compileOptions);
10172
10234
  if (!compiled.ok) {
10173
10235
  return {
10174
10236
  runtime,
@@ -10297,9 +10359,10 @@ var defaultAgentSupportLookup = (runtime) => {
10297
10359
  if (!surface)
10298
10360
  return;
10299
10361
  return matrixStateToExportLevel(classifySurfaceState(adapter, surface));
10300
- }, PROSE_EXPORT_ROOT = ".metaproject/agents-export", HOST_AGENTS_DIR;
10362
+ }, PROSE_EXPORT_ROOT = ".metaproject/agents-export", CLAUDE_SUBAGENT_ALIASES_CONFIG_PATH = ".metaproject/tasks.config.json", HOST_AGENTS_DIR;
10301
10363
  var init_export2 = __esm(() => {
10302
10364
  init_fs();
10365
+ init_json();
10303
10366
  init_contained_write();
10304
10367
  init_registry();
10305
10368
  init_matrix();
@@ -23320,6 +23383,7 @@ __export(exports_service3, {
23320
23383
  confirmPreconditionError: () => confirmPreconditionError,
23321
23384
  createFlowService: () => createFlowService,
23322
23385
  evaluatedVerdict: () => evaluatedVerdict,
23386
+ extractCriterionTokens: () => extractCriterionTokens,
23323
23387
  factsOnlyVerdict: () => factsOnlyVerdict,
23324
23388
  hashDiff: () => hashDiff,
23325
23389
  isFrozen: () => isFrozen,
@@ -36960,7 +37024,7 @@ var HELP_GROUPS = [
36960
37024
  kind: "cli",
36961
37025
  name: "routing",
36962
37026
  group: "Connect a model provider",
36963
- summary: "Category -> model routing table (list, set, unset, trust) and the model-profile catalogue (profile list, profile set)."
37027
+ summary: "Category -> model routing table (list, set, unset, trust), the model-profile catalogue (profile list, profile set), and real measured task cost (stats)."
36964
37028
  },
36965
37029
  { kind: "slash", name: "/connect", group: "Connect a model provider", summary: "Switch provider; row buttons test/disconnect it." },
36966
37030
  {
@@ -37127,18 +37191,60 @@ var HELP_GROUPS = [
37127
37191
  group: "Managed work",
37128
37192
  summary: "Check a PR, a review report, or a diff against a reference document's clauses, with Jev."
37129
37193
  },
37194
+ {
37195
+ kind: "slash",
37196
+ name: "/risk",
37197
+ group: "Managed work",
37198
+ summary: "Risk map of the working diff's hunks \u2014 deterministic facts plus Jev per risk dimension, ranked, highest risk first."
37199
+ },
37200
+ {
37201
+ kind: "slash",
37202
+ name: "/scenarios",
37203
+ group: "Managed work",
37204
+ summary: "Which user scenarios the working diff likely changes \u2014 deterministic scenario/code links plus Jev, ranked."
37205
+ },
37130
37206
  {
37131
37207
  kind: "slash",
37132
37208
  name: "/jevrules",
37133
37209
  group: "Managed work",
37134
37210
  summary: "Check the working diff's hunks against every applicable project rule clause, with Jev, grouped by rule."
37135
37211
  },
37212
+ {
37213
+ kind: "slash",
37214
+ name: "/staledocs",
37215
+ group: "Managed work",
37216
+ summary: "List doc sections that likely went stale because of the working diff, with Jev."
37217
+ },
37218
+ {
37219
+ kind: "slash",
37220
+ name: "/opencomments",
37221
+ group: "Managed work",
37222
+ summary: "List open PR review comments with a Jev resolved/still-open/escalation label \u2014 /opencomments <owner/repo> <pr>."
37223
+ },
37224
+ {
37225
+ kind: "slash",
37226
+ name: "/contract",
37227
+ group: "Managed work",
37228
+ summary: "Check PR-description claims and a linked flow's frozen acceptance criteria against the working diff, with Jev."
37229
+ },
37230
+ {
37231
+ kind: "slash",
37232
+ name: "/triage",
37233
+ group: "Managed work",
37234
+ summary: "Advisory annotations \u2014 severity calibration, duplicate-merge candidates, verifier queue order \u2014 over the latest review package, with Jev."
37235
+ },
37136
37236
  {
37137
37237
  kind: "slash",
37138
37238
  name: "/guard",
37139
37239
  group: "Managed work",
37140
37240
  summary: "Opt-in turn guard: after a turn, checks whether the request was done and catches a reply that contradicts the tools \u2014 /guard [on|off]."
37141
37241
  },
37242
+ {
37243
+ kind: "slash",
37244
+ name: "/route",
37245
+ group: "Managed work",
37246
+ summary: "Opt-in routing classifier: each request runs on its routing category's model \u2014 /route [on|off]."
37247
+ },
37142
37248
  { kind: "slash", name: "/plan", group: "Managed work", summary: "Toggle read-only mode \u2014 /plan [on|off]." },
37143
37249
  {
37144
37250
  kind: "slash",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrciphersmith/keryx",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "Version-controlled project context for AI coding agents: code graph, architecture wiki, project memory, relevant tests, quality signals, and task flows.",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -116,6 +116,28 @@
116
116
  ],
117
117
  "stackDetectionAware": true
118
118
  },
119
+ "docker-k8s-terraform": {
120
+ "description": "Common rules plus the Docker/Kubernetes/Terraform tool pack component, installed when `keryx stack detect` finds a matching tag (docker, docker-compose, or terraform). Experimental: has not cleared the honest behavioral eval gate yet.",
121
+ "modules": [
122
+ "core-common-rules",
123
+ "skill-lifecycle"
124
+ ],
125
+ "components": [
126
+ "tool:docker-k8s-terraform"
127
+ ],
128
+ "stackDetectionAware": true
129
+ },
130
+ "ci-github-gitlab": {
131
+ "description": "Common rules plus the CI (GitHub Actions & GitLab CI) tool pack component, installed when `keryx stack detect` finds a matching tag (github-actions or gitlab-ci). Experimental: has not cleared the honest behavioral eval gate yet.",
132
+ "modules": [
133
+ "core-common-rules",
134
+ "skill-lifecycle"
135
+ ],
136
+ "components": [
137
+ "tool:ci-github-gitlab"
138
+ ],
139
+ "stackDetectionAware": true
140
+ },
119
141
  "full": {
120
142
  "description": "Every registered module and component, unconditionally.",
121
143
  "modules": [
@@ -146,7 +168,19 @@
146
168
  "angular-rules",
147
169
  "angular-skills",
148
170
  "nextjs-nuxt-rules",
149
- "nextjs-nuxt-skills"
171
+ "nextjs-nuxt-skills",
172
+ "docker-k8s-terraform-rules",
173
+ "docker-k8s-terraform-skills",
174
+ "ci-github-gitlab-rules",
175
+ "ci-github-gitlab-skills",
176
+ "php-laravel-rules",
177
+ "php-laravel-skills",
178
+ "ruby-rails-rules",
179
+ "ruby-rails-skills",
180
+ "c-cpp-rules",
181
+ "c-cpp-skills",
182
+ "sql-db-rules",
183
+ "sql-db-skills"
150
184
  ],
151
185
  "components": [
152
186
  "lang:ts-js-node",
@@ -157,8 +191,58 @@
157
191
  "lang:go",
158
192
  "framework:vue",
159
193
  "framework:angular",
160
- "framework:nextjs-nuxt"
194
+ "framework:nextjs-nuxt",
195
+ "tool:docker-k8s-terraform",
196
+ "tool:ci-github-gitlab",
197
+ "framework:php-laravel",
198
+ "framework:ruby-rails",
199
+ "lang:c-cpp",
200
+ "capability:sql-db"
161
201
  ]
202
+ },
203
+ "php-laravel": {
204
+ "description": "Common rules plus the PHP/Laravel stack pack component (`php-laravel-rules` + `php-laravel-skills`, from src/gdskills/bundled/stacks/php-laravel/), installed when `keryx stack detect` finds a matching tag.",
205
+ "modules": [
206
+ "core-common-rules",
207
+ "skill-lifecycle"
208
+ ],
209
+ "components": [
210
+ "framework:php-laravel"
211
+ ],
212
+ "stackDetectionAware": true
213
+ },
214
+ "ruby-rails": {
215
+ "description": "Common rules plus the Ruby on Rails stack pack component (`ruby-rails-rules` + `ruby-rails-skills`, from src/gdskills/bundled/stacks/ruby-rails/), installed when `keryx stack detect` finds a matching tag.",
216
+ "modules": [
217
+ "core-common-rules",
218
+ "skill-lifecycle"
219
+ ],
220
+ "components": [
221
+ "framework:ruby-rails"
222
+ ],
223
+ "stackDetectionAware": true
224
+ },
225
+ "c-cpp": {
226
+ "description": "Common rules plus the C/C++ stack pack component (`c-cpp-rules` + `c-cpp-skills`, from src/gdskills/bundled/stacks/c-cpp/), installed when `keryx stack detect` finds a matching tag.",
227
+ "modules": [
228
+ "core-common-rules",
229
+ "skill-lifecycle"
230
+ ],
231
+ "components": [
232
+ "lang:c-cpp"
233
+ ],
234
+ "stackDetectionAware": true
235
+ },
236
+ "sql-db": {
237
+ "description": "Common rules plus the SQL/database stack pack component (`sql-db-rules` + `sql-db-skills`, from src/gdskills/bundled/stacks/sql-db/), installed when `keryx stack detect` finds a matching tag.",
238
+ "modules": [
239
+ "core-common-rules",
240
+ "skill-lifecycle"
241
+ ],
242
+ "components": [
243
+ "capability:sql-db"
244
+ ],
245
+ "stackDetectionAware": true
162
246
  }
163
247
  },
164
248
  "modules": {
@@ -664,6 +748,186 @@
664
748
  "defaultInstall": true,
665
749
  "cost": "medium",
666
750
  "stability": "experimental"
751
+ },
752
+ "docker-k8s-terraform-rules": {
753
+ "kind": "rule",
754
+ "description": "Docker/Kubernetes/Terraform stack pack rules (coding-style, patterns, security, testing; scoped to Dockerfiles, compose YAML, k8s/Helm YAML, *.tf/*.tfvars) from src/gdskills/bundled/stacks/docker-k8s-terraform/rules/.",
755
+ "paths": [
756
+ "src/gdskills/bundled/stacks/docker-k8s-terraform/rules/*.mdc"
757
+ ],
758
+ "targets": [
759
+ "claude",
760
+ "keryx-shell"
761
+ ],
762
+ "dependencies": [],
763
+ "defaultInstall": true,
764
+ "cost": "light",
765
+ "stability": "experimental"
766
+ },
767
+ "docker-k8s-terraform-skills": {
768
+ "kind": "skill",
769
+ "description": "Docker/Kubernetes/Terraform stack pack skills (no implement skill per W1-stack-catalog.md -- config authoring lives in the deploy quality skill; review, build-fix) from src/gdskills/bundled/stacks/docker-k8s-terraform/skills/.",
770
+ "paths": [
771
+ "src/gdskills/bundled/stacks/docker-k8s-terraform/skills/**"
772
+ ],
773
+ "targets": [
774
+ "claude",
775
+ "keryx-shell"
776
+ ],
777
+ "dependencies": [],
778
+ "defaultInstall": true,
779
+ "cost": "medium",
780
+ "stability": "experimental"
781
+ },
782
+ "ci-github-gitlab-rules": {
783
+ "kind": "rule",
784
+ "description": "CI (GitHub Actions & GitLab CI) stack pack rules (patterns, security; scoped to .github/workflows/*.yml and .gitlab-ci.yml only) from src/gdskills/bundled/stacks/ci-github-gitlab/rules/.",
785
+ "paths": [
786
+ "src/gdskills/bundled/stacks/ci-github-gitlab/rules/*.mdc"
787
+ ],
788
+ "targets": [
789
+ "claude",
790
+ "keryx-shell"
791
+ ],
792
+ "dependencies": [],
793
+ "defaultInstall": true,
794
+ "cost": "light",
795
+ "stability": "experimental"
796
+ },
797
+ "ci-github-gitlab-skills": {
798
+ "kind": "skill",
799
+ "description": "CI (GitHub Actions & GitLab CI) stack pack skills (implementation, code review, build-fix) from src/gdskills/bundled/stacks/ci-github-gitlab/skills/.",
800
+ "paths": [
801
+ "src/gdskills/bundled/stacks/ci-github-gitlab/skills/**"
802
+ ],
803
+ "targets": [
804
+ "claude",
805
+ "keryx-shell"
806
+ ],
807
+ "dependencies": [],
808
+ "defaultInstall": true,
809
+ "cost": "medium",
810
+ "stability": "experimental"
811
+ },
812
+ "php-laravel-rules": {
813
+ "kind": "rule",
814
+ "description": "PHP/Laravel stack pack rules (coding-style, patterns, security, testing) from src/gdskills/bundled/stacks/php-laravel/rules/.",
815
+ "paths": [
816
+ "src/gdskills/bundled/stacks/php-laravel/rules/*.mdc"
817
+ ],
818
+ "targets": [
819
+ "claude",
820
+ "keryx-shell"
821
+ ],
822
+ "dependencies": [],
823
+ "defaultInstall": true,
824
+ "cost": "light",
825
+ "stability": "experimental"
826
+ },
827
+ "php-laravel-skills": {
828
+ "kind": "skill",
829
+ "description": "PHP/Laravel stack pack skills (implementation, testing, code review, build-fix) from src/gdskills/bundled/stacks/php-laravel/skills/.",
830
+ "paths": [
831
+ "src/gdskills/bundled/stacks/php-laravel/skills/**"
832
+ ],
833
+ "targets": [
834
+ "claude",
835
+ "keryx-shell"
836
+ ],
837
+ "dependencies": [],
838
+ "defaultInstall": true,
839
+ "cost": "medium",
840
+ "stability": "experimental"
841
+ },
842
+ "ruby-rails-rules": {
843
+ "kind": "rule",
844
+ "description": "Ruby on Rails stack pack rules (coding-style, patterns, security, testing) from src/gdskills/bundled/stacks/ruby-rails/rules/.",
845
+ "paths": [
846
+ "src/gdskills/bundled/stacks/ruby-rails/rules/*.mdc"
847
+ ],
848
+ "targets": [
849
+ "claude",
850
+ "keryx-shell"
851
+ ],
852
+ "dependencies": [],
853
+ "defaultInstall": true,
854
+ "cost": "light",
855
+ "stability": "experimental"
856
+ },
857
+ "ruby-rails-skills": {
858
+ "kind": "skill",
859
+ "description": "Ruby on Rails stack pack skills (implementation, testing, code review, build-fix) from src/gdskills/bundled/stacks/ruby-rails/skills/.",
860
+ "paths": [
861
+ "src/gdskills/bundled/stacks/ruby-rails/skills/**"
862
+ ],
863
+ "targets": [
864
+ "claude",
865
+ "keryx-shell"
866
+ ],
867
+ "dependencies": [],
868
+ "defaultInstall": true,
869
+ "cost": "medium",
870
+ "stability": "experimental"
871
+ },
872
+ "c-cpp-rules": {
873
+ "kind": "rule",
874
+ "description": "C/C++ stack pack rules (coding-style, patterns, security, testing) from src/gdskills/bundled/stacks/c-cpp/rules/.",
875
+ "paths": [
876
+ "src/gdskills/bundled/stacks/c-cpp/rules/*.mdc"
877
+ ],
878
+ "targets": [
879
+ "claude",
880
+ "keryx-shell"
881
+ ],
882
+ "dependencies": [],
883
+ "defaultInstall": true,
884
+ "cost": "light",
885
+ "stability": "experimental"
886
+ },
887
+ "c-cpp-skills": {
888
+ "kind": "skill",
889
+ "description": "C/C++ stack pack skills (implementation, testing, code review, build-fix) from src/gdskills/bundled/stacks/c-cpp/skills/.",
890
+ "paths": [
891
+ "src/gdskills/bundled/stacks/c-cpp/skills/**"
892
+ ],
893
+ "targets": [
894
+ "claude",
895
+ "keryx-shell"
896
+ ],
897
+ "dependencies": [],
898
+ "defaultInstall": true,
899
+ "cost": "medium",
900
+ "stability": "experimental"
901
+ },
902
+ "sql-db-rules": {
903
+ "kind": "rule",
904
+ "description": "SQL/database stack pack rules (coding-style, patterns, security, testing) from src/gdskills/bundled/stacks/sql-db/rules/.",
905
+ "paths": [
906
+ "src/gdskills/bundled/stacks/sql-db/rules/*.mdc"
907
+ ],
908
+ "targets": [
909
+ "claude",
910
+ "keryx-shell"
911
+ ],
912
+ "dependencies": [],
913
+ "defaultInstall": true,
914
+ "cost": "light",
915
+ "stability": "experimental"
916
+ },
917
+ "sql-db-skills": {
918
+ "kind": "skill",
919
+ "description": "SQL/database stack pack skills (implementation, testing, code review, build-fix) from src/gdskills/bundled/stacks/sql-db/skills/.",
920
+ "paths": [
921
+ "src/gdskills/bundled/stacks/sql-db/skills/**"
922
+ ],
923
+ "targets": [
924
+ "claude",
925
+ "keryx-shell"
926
+ ],
927
+ "dependencies": [],
928
+ "defaultInstall": true,
929
+ "cost": "medium",
930
+ "stability": "experimental"
667
931
  }
668
932
  },
669
933
  "components": {
@@ -792,6 +1056,89 @@
792
1056
  "provenance": {
793
1057
  "origin": "authored"
794
1058
  }
1059
+ },
1060
+ "tool:docker-k8s-terraform": {
1061
+ "family": "tool",
1062
+ "modules": [
1063
+ "docker-k8s-terraform-rules",
1064
+ "docker-k8s-terraform-skills"
1065
+ ],
1066
+ "detectionMarkers": [
1067
+ "docker",
1068
+ "docker-compose",
1069
+ "terraform"
1070
+ ],
1071
+ "provenance": {
1072
+ "origin": "authored"
1073
+ }
1074
+ },
1075
+ "tool:ci-github-gitlab": {
1076
+ "family": "tool",
1077
+ "modules": [
1078
+ "ci-github-gitlab-rules",
1079
+ "ci-github-gitlab-skills"
1080
+ ],
1081
+ "detectionMarkers": [
1082
+ "github-actions",
1083
+ "gitlab-ci"
1084
+ ],
1085
+ "provenance": {
1086
+ "origin": "authored"
1087
+ }
1088
+ },
1089
+ "framework:php-laravel": {
1090
+ "family": "framework",
1091
+ "modules": [
1092
+ "php-laravel-rules",
1093
+ "php-laravel-skills"
1094
+ ],
1095
+ "detectionMarkers": [
1096
+ "php",
1097
+ "laravel"
1098
+ ],
1099
+ "provenance": {
1100
+ "origin": "authored"
1101
+ }
1102
+ },
1103
+ "framework:ruby-rails": {
1104
+ "family": "framework",
1105
+ "modules": [
1106
+ "ruby-rails-rules",
1107
+ "ruby-rails-skills"
1108
+ ],
1109
+ "detectionMarkers": [
1110
+ "ruby",
1111
+ "rails"
1112
+ ],
1113
+ "provenance": {
1114
+ "origin": "authored"
1115
+ }
1116
+ },
1117
+ "lang:c-cpp": {
1118
+ "family": "language",
1119
+ "modules": [
1120
+ "c-cpp-rules",
1121
+ "c-cpp-skills"
1122
+ ],
1123
+ "detectionMarkers": [
1124
+ "c-cpp"
1125
+ ],
1126
+ "provenance": {
1127
+ "origin": "authored"
1128
+ }
1129
+ },
1130
+ "capability:sql-db": {
1131
+ "family": "capability",
1132
+ "modules": [
1133
+ "sql-db-rules",
1134
+ "sql-db-skills"
1135
+ ],
1136
+ "detectionMarkers": [
1137
+ "sql"
1138
+ ],
1139
+ "provenance": {
1140
+ "origin": "authored"
1141
+ }
795
1142
  }
796
1143
  }
797
1144
  }
@@ -177,6 +177,24 @@ entry point; `decideDispatchModel` is what it calls.
177
177
  Nothing reads a recorded resolution back and checks it. These fields explain a
178
178
  finished run; they do not gate one.
179
179
 
180
+ ## A third place: compiling a Claude Code subagent file
181
+
182
+ `keryx agents export --runtime claude` (`src/agents/compile.ts`'s
183
+ `renderClaudeExport`) is neither of the two shapes above — it never asks
184
+ `spawn_subagent` or `keryx review tier` anything, and it runs at EXPORT time,
185
+ once, against a file written to disk, not at dispatch time. Claude Code's own
186
+ subagent frontmatter has no tier concept and no candidate discovery at all; it
187
+ accepts exactly four fixed, version-free words for `model` — `opus`, `sonnet`,
188
+ `haiku`, `inherit` — and nothing else. The compiler maps a definition's
189
+ declared `model_tier` onto that fixed vocabulary directly: `deep` to `opus`,
190
+ `standard` to `sonnet`, `light` to `haiku` (an undeclared tier defaults to
191
+ `standard`, so it lands on `sonnet`). This is not the discover/rank/fall-back
192
+ resolution described above, and it is not a model id — it is a static lookup
193
+ into the one enum a host's own docs define, so it can never go stale the way a
194
+ literal id would. A project that wants the pre-existing behavior sets
195
+ `.metaproject/tasks.config.json`'s `modelGuidance.claudeSubagentAliases:
196
+ false`, which restores `model: inherit` for every tier.
197
+
180
198
  ## Choosing the tier
181
199
 
182
200
  The tier is **computed, not judged**. Run:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: job-orchestrator
3
- description: "Use when a GitHub issue or complex intent needs to be analyzed, planned, and implemented end-to-end with sub-agents. NOT for: the same pipeline under Task Manager flow state (use flow-orchestrator)."
3
+ description: "Use when a GitHub issue or complex intent needs to be analyzed, planned, and implemented end-to-end with sub-agents — this skill orchestrates the whole task from issue to PR. NOT for: the same pipeline under Task Manager flow state (use flow-orchestrator)."
4
4
  triggers:
5
5
  - "implement issue"
6
6
  - "full workflow"