buddy-agent-harness 0.16.0 → 0.18.0

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 (44) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/.cursor-plugin/plugin.json +1 -1
  4. package/dist/cli.mjs +243 -11
  5. package/dist/index.d.mts +68 -5
  6. package/dist/index.d.mts.map +1 -1
  7. package/dist/index.mjs +248 -12
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/skill-scripts/doctor.mjs +44 -43
  10. package/dist/skill-scripts/init.mjs +44 -43
  11. package/dist/skill-scripts/mcp.mjs +44 -43
  12. package/dist/skill-scripts/reference.mjs +44 -43
  13. package/llms.txt +3 -2
  14. package/package.json +1 -1
  15. package/plugin.json +1 -1
  16. package/skills/doctor-buddy-agent-harness/SKILL.md +5 -1
  17. package/skills/doctor-buddy-agent-harness/references/global-instructions.md +30 -0
  18. package/skills/doctor-buddy-agent-harness/references/harnesses/claude-code.md +3 -2
  19. package/skills/doctor-buddy-agent-harness/references/harnesses/codex.md +4 -2
  20. package/skills/doctor-buddy-agent-harness/references/harnesses/copilot-cli.md +3 -2
  21. package/skills/doctor-buddy-agent-harness/references/harnesses/cursor.md +1 -1
  22. package/skills/doctor-buddy-agent-harness/references/harnesses/gemini-cli.md +2 -2
  23. package/skills/doctor-buddy-agent-harness/scripts/doctor.mjs +44 -43
  24. package/skills/enhance/SKILL.md +16 -5
  25. package/skills/enhance/references/session-scope.history.md +9 -0
  26. package/skills/enhance/references/session-scope.md +75 -0
  27. package/skills/enhance/scripts/doctor.mjs +486 -0
  28. package/skills/init-buddy-agent-harness/SKILL.md +1 -1
  29. package/skills/init-buddy-agent-harness/scripts/doctor.mjs +44 -43
  30. package/skills/init-buddy-agent-harness/scripts/init.mjs +44 -43
  31. package/skills/reference/SKILL.md +1 -1
  32. package/skills/reference/scripts/reference.mjs +44 -43
  33. package/skills/repair/SKILL.md +3 -1
  34. package/skills/repair/scripts/doctor.mjs +44 -43
  35. package/skills/repair/scripts/mcp.mjs +44 -43
  36. package/src/diagnose-bridges/diagnose-bridges.ts +27 -2
  37. package/src/diagnose-bridges/diagnose-global-instructions.ts +154 -0
  38. package/src/diagnose-bridges/diagnose-instructions.ts +7 -2
  39. package/src/diagnose-bridges/doctor-guidance.ts +152 -6
  40. package/src/diagnose-bridges/doctor.command.ts +6 -1
  41. package/src/harness-registry/harness-registry.ts +38 -4
  42. package/src/harness-registry/instruction-bridge.ts +25 -9
  43. package/src/index.ts +8 -0
  44. package/src/skill-scripts/launchers.ts +1 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "buddy-agent-harness",
3
- "version": "0.16.0",
3
+ "version": "0.18.0",
4
4
  "description": "Initialize standards-based agent configuration across agent harnesses",
5
5
  "author": {
6
6
  "name": "repobuddy"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "buddy-agent-harness",
3
- "version": "0.16.0",
3
+ "version": "0.18.0",
4
4
  "description": "Initialize standards-based agent configuration across agent harnesses",
5
5
  "author": {
6
6
  "name": "repobuddy"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "buddy-agent-harness",
3
- "version": "0.16.0",
3
+ "version": "0.18.0",
4
4
  "description": "Initialize standards-based agent configuration across agent harnesses",
5
5
  "author": {
6
6
  "name": "repobuddy"
package/dist/cli.mjs CHANGED
@@ -17958,6 +17958,12 @@ function skillsProjection(harness, scope, directories = skillsDirectories(harnes
17958
17958
  return listed.includes(".agents/skills") ? {} : { skillsDirectory: first };
17959
17959
  }
17960
17960
  /**
17961
+ * The user-scope counterpart of the root `AGENTS.md`, relative to the home directory. No harness
17962
+ * reads it natively; each loads it only through a user-scope `instructionBridge` (E-CC-18, E-CODEX-05,
17963
+ * E-GEM-03, E-COPILOT-04, E-CUR-08).
17964
+ */
17965
+ const globalInstructions = ".agents/AGENTS.md";
17966
+ /**
17961
17967
  * Skills directories come from `@cyberuni/agent-harness`, except for the harnesses it does not know
17962
17968
  * (`devin-desktop`, `windsurf`); see `.research/agentic-configuration-standards/` for the rest.
17963
17969
  */
@@ -17998,7 +18004,13 @@ const harnessRegistry = [
17998
18004
  },
17999
18005
  user: {
18000
18006
  detect: ".claude",
18001
- ...skillsProjection("claude-code", "user")
18007
+ ...skillsProjection("claude-code", "user"),
18008
+ relocatedBy: "CLAUDE_CONFIG_DIR",
18009
+ instructionBridge: {
18010
+ kind: "import",
18011
+ path: ".claude/CLAUDE.md",
18012
+ line: `@~/${globalInstructions}`
18013
+ }
18002
18014
  }
18003
18015
  },
18004
18016
  {
@@ -18060,7 +18072,13 @@ const harnessRegistry = [
18060
18072
  },
18061
18073
  user: {
18062
18074
  detect: ".codex",
18063
- ...skillsProjection("codex", "user")
18075
+ ...skillsProjection("codex", "user"),
18076
+ instructionBridge: {
18077
+ kind: "symlink",
18078
+ path: ".codex/AGENTS.md"
18079
+ },
18080
+ shadowedBy: [".codex/AGENTS.override.md"],
18081
+ relocatedBy: "CODEX_HOME"
18064
18082
  }
18065
18083
  },
18066
18084
  {
@@ -18088,7 +18106,12 @@ const harnessRegistry = [
18088
18106
  },
18089
18107
  user: {
18090
18108
  detect: ".copilot",
18091
- ...skillsProjection("copilot-cli", "user")
18109
+ ...skillsProjection("copilot-cli", "user"),
18110
+ relocatedBy: "COPILOT_HOME",
18111
+ instructionBridge: {
18112
+ kind: "symlink",
18113
+ path: ".copilot/copilot-instructions.md"
18114
+ }
18092
18115
  }
18093
18116
  },
18094
18117
  {
@@ -18120,7 +18143,11 @@ const harnessRegistry = [
18120
18143
  },
18121
18144
  user: {
18122
18145
  detect: ".gemini",
18123
- ...skillsProjection("gemini-cli", "user")
18146
+ ...skillsProjection("gemini-cli", "user"),
18147
+ instructionBridge: {
18148
+ kind: "symlink",
18149
+ path: ".gemini/GEMINI.md"
18150
+ }
18124
18151
  }
18125
18152
  },
18126
18153
  {
@@ -18328,6 +18355,61 @@ const instructionTable = {
18328
18355
  }
18329
18356
  };
18330
18357
  repairsOf(instructionTable);
18358
+ const globalFile = `~/${globalInstructions}`;
18359
+ /**
18360
+ * The step that bridges one harness's user-scope file, in the words it is handed over in; `file` is
18361
+ * where it was found, which a variable such as `$CODEX_HOME` may have moved.
18362
+ */
18363
+ function globalBridgeStep(bridge, file = `~/${bridge.path}`) {
18364
+ return bridge.kind === "import" ? `add the line \`${bridge.line}\` to ${file}` : `run \`ln -s ${globalFile} ${file}\``;
18365
+ }
18366
+ /** Every spelling of a user-scope path a report can carry: from `~`, and from the variable that moves it. */
18367
+ function userSpellings(scope, path) {
18368
+ const under = `${scope.detect}/`;
18369
+ return scope.relocatedBy !== void 0 && path.startsWith(under) ? [`~/${path}`, `$${scope.relocatedBy}/${path.slice(under.length)}`] : [`~/${path}`];
18370
+ }
18371
+ /** The bridge for a reported path; undefined for a path no harness registers, such as a table's `<path>`. */
18372
+ function userBridgeAt(file) {
18373
+ for (const { user } of harnessRegistry) {
18374
+ const bridge = user?.instructionBridge;
18375
+ if (user && bridge && userSpellings(user, bridge.path).includes(file)) return bridge;
18376
+ }
18377
+ }
18378
+ /** The step for one reported file, or a pointer to where it is written when the path is not one. */
18379
+ function stepAt(file, keepContent) {
18380
+ const bridge = userBridgeAt(file);
18381
+ if (bridge === void 0) return `add the bridge the harness page names for ${file}`;
18382
+ return `${keepContent && bridge.kind !== "import" ? `move what ${file} says into ${globalFile} and remove it, then ` : ""}${globalBridgeStep(bridge, file)}`;
18383
+ }
18384
+ /** Outside the repository, so never written: a repair is a step handed to the user. */
18385
+ const handOver = "hand the user this step, since nothing here writes outside the repository:";
18386
+ const globalInstructionTable = {
18387
+ "global-instructions-missing": {
18388
+ detail: `no user-scope instruction file at this path — the harness loads none of ${globalFile}`,
18389
+ repair: ({ file }) => ({
18390
+ command: "",
18391
+ instruction: `${handOver} ${stepAt(file, false)}`
18392
+ }),
18393
+ skillRepair: () => "hand the user the step the harness page names for that file; write nothing yourself"
18394
+ },
18395
+ "global-instructions-unbridged": {
18396
+ detail: `the file holds its own content and does not load ${globalFile} — text placed there reaches no session of this harness`,
18397
+ repair: ({ file }) => ({
18398
+ command: "",
18399
+ instruction: `${handOver} ${stepAt(file, true)}`
18400
+ }),
18401
+ skillRepair: () => "hand the user the step the harness page names for that file, keeping what the file says; write nothing yourself"
18402
+ },
18403
+ "global-instructions-overridden": {
18404
+ detail: `the harness reads this file in place of its own user-scope file, so whatever that file loads goes unread, and this one does not load ${globalFile}`,
18405
+ repair: ({ file }) => ({
18406
+ command: "",
18407
+ instruction: `${handOver} move what ${file} says into ${globalFile} and remove it`
18408
+ }),
18409
+ skillRepair: () => "hand the user the move of what that file says into the global file, and its removal; write nothing yourself"
18410
+ }
18411
+ };
18412
+ repairsOf(globalInstructionTable);
18331
18413
  const configurationTable = {
18332
18414
  "deprecated-harness": {
18333
18415
  detail: "a projection under a harness name that has been superseded — the replacement reads .agents/skills natively and needs no projection at all",
@@ -18504,6 +18586,7 @@ repairsOf(nonstandardTable);
18504
18586
  const doctorTable = {
18505
18587
  ...bridgeTable,
18506
18588
  ...instructionTable,
18589
+ ...globalInstructionTable,
18507
18590
  ...configurationTable,
18508
18591
  ...mcpTable,
18509
18592
  ...nonstandardTable
@@ -27649,7 +27732,7 @@ function projectChain(root) {
27649
27732
  dir = parent;
27650
27733
  }
27651
27734
  }
27652
- function isDirectory$1(path) {
27735
+ function isDirectory$2(path) {
27653
27736
  try {
27654
27737
  return statSync(path).isDirectory();
27655
27738
  } catch {
@@ -27685,7 +27768,7 @@ function dependencyLayers(root, skip) {
27685
27768
  const dir = packageDir(pkg, manifestPath);
27686
27769
  if (!dir || skip.has(canonical(dir))) continue;
27687
27770
  const references = join(dir, "references");
27688
- if (!isDirectory$1(references)) continue;
27771
+ if (!isDirectory$2(references)) continue;
27689
27772
  const manifest = readJson(join(dir, "plugin.json"));
27690
27773
  const manifestName = isRecord$1(manifest) && typeof manifest["name"] === "string" ? manifest["name"] : void 0;
27691
27774
  const plugins = manifestName && manifestName !== pkg ? [pkg, manifestName] : [pkg];
@@ -27735,7 +27818,7 @@ async function referenceLayers({ root, home, platform, programData, packageRoot
27735
27818
  plugins: self,
27736
27819
  status: LEGACY_STATUS
27737
27820
  },
27738
- ...enabled.filter(({ dir, skipped }) => skipped || isDirectory$1(dir) && canonical(dirname(dir)) !== ownRoot),
27821
+ ...enabled.filter(({ dir, skipped }) => skipped || isDirectory$2(dir) && canonical(dirname(dir)) !== ownRoot),
27739
27822
  ...dependencyLayers(root, /* @__PURE__ */ new Set([ownRoot]))
27740
27823
  ];
27741
27824
  const seen = /* @__PURE__ */ new Set();
@@ -27832,6 +27915,145 @@ function projectSkills({ root, canonicalSkills, harnesses, copy, force }) {
27832
27915
  };
27833
27916
  }
27834
27917
  //#endregion
27918
+ //#region src/diagnose-bridges/diagnose-global-instructions.ts
27919
+ function isDirectory$1(path) {
27920
+ try {
27921
+ return lstatSync(path).isDirectory();
27922
+ } catch {
27923
+ return false;
27924
+ }
27925
+ }
27926
+ function exists$1(path) {
27927
+ try {
27928
+ lstatSync(path);
27929
+ return true;
27930
+ } catch {
27931
+ return false;
27932
+ }
27933
+ }
27934
+ /** The import a user wrote may spell the home directory either way; both load the same file. */
27935
+ function importsGlobal(body, bridge, home) {
27936
+ const spellings = bridge.kind === "import" ? [bridge.line, `@${join(home, globalInstructions)}`] : [];
27937
+ return body.split("\n").some((line) => spellings.includes(line.trim()));
27938
+ }
27939
+ /** Follows `relocatedBy` the way the harnesses do: an empty value is no value (E-CODEX-06, E-CC-19, E-COPILOT-05). */
27940
+ function locate(home, scope, env, path) {
27941
+ const variable = scope.relocatedBy;
27942
+ const moved = variable === void 0 ? void 0 : env[variable];
27943
+ if (!moved || path !== scope.detect && !path.startsWith(`${scope.detect}/`)) return {
27944
+ absolute: join(home, path),
27945
+ display: `~/${path}`
27946
+ };
27947
+ const rest = path.slice(scope.detect.length);
27948
+ return {
27949
+ absolute: join(resolve(moved), rest),
27950
+ display: `$${variable}${rest}`
27951
+ };
27952
+ }
27953
+ /** A shadow is read only where it is a file holding more than whitespace (E-CODEX-06). */
27954
+ function readsAsShadow(path) {
27955
+ try {
27956
+ return statSync(path).isFile() && readFileSync(path, "utf8").trim() !== "";
27957
+ } catch {
27958
+ return false;
27959
+ }
27960
+ }
27961
+ function inspect$1(home, target, bridge) {
27962
+ let stats;
27963
+ try {
27964
+ stats = lstatSync(target);
27965
+ } catch {
27966
+ return {
27967
+ kind: "none",
27968
+ status: "missing",
27969
+ problem: "global-instructions-missing"
27970
+ };
27971
+ }
27972
+ if (stats.isSymbolicLink()) return resolve(dirname(target), readlinkSync(target)) === join(home, ".agents/AGENTS.md") ? {
27973
+ kind: "symlink",
27974
+ status: "ok"
27975
+ } : {
27976
+ kind: "symlink",
27977
+ status: "unbridged",
27978
+ problem: "global-instructions-unbridged"
27979
+ };
27980
+ let body;
27981
+ try {
27982
+ body = readFileSync(target, "utf8");
27983
+ } catch {
27984
+ return {
27985
+ kind: "file",
27986
+ status: "unbridged",
27987
+ problem: "global-instructions-unbridged"
27988
+ };
27989
+ }
27990
+ return importsGlobal(body, bridge, home) ? {
27991
+ kind: "import",
27992
+ status: "ok"
27993
+ } : {
27994
+ kind: "file",
27995
+ status: "unbridged",
27996
+ problem: "global-instructions-unbridged"
27997
+ };
27998
+ }
27999
+ function finding(path, problem, cli) {
28000
+ const { detail, repair } = repairFor(problem);
28001
+ return {
28002
+ path,
28003
+ problem,
28004
+ detail,
28005
+ repair: repair({ file: path }, cli)
28006
+ };
28007
+ }
28008
+ /**
28009
+ * Whether each harness the user has installed loads `~/.agents/AGENTS.md` through its own user-scope
28010
+ * file, read from wherever `env` moves it. Read-only: the repair is handed to the user, since
28011
+ * nothing here writes outside the repository.
28012
+ */
28013
+ function diagnoseGlobalInstructions(home, preferred, cli, env = {}) {
28014
+ const hasGlobal = exists$1(join(home, globalInstructions));
28015
+ const rows = [];
28016
+ const findings = [];
28017
+ for (const harness of harnessRegistry) {
28018
+ const user = harness.user;
28019
+ const bridge = user?.instructionBridge;
28020
+ if (!user || !bridge) continue;
28021
+ if (!preferred.includes(harness.name) && !isDirectory$1(locate(home, user, env, user.detect).absolute)) continue;
28022
+ const file = locate(home, user, env, bridge.path);
28023
+ const inspection = inspect$1(home, file.absolute, bridge);
28024
+ const shadow = (user.shadowedBy ?? []).map((path) => locate(home, user, env, path)).find(({ absolute }) => readsAsShadow(absolute));
28025
+ if (shadow !== void 0) {
28026
+ const read = inspect$1(home, shadow.absolute, bridge);
28027
+ if (read.status === "ok") {
28028
+ rows.push({
28029
+ harness: harness.name,
28030
+ path: shadow.display,
28031
+ kind: read.kind,
28032
+ status: "ok"
28033
+ });
28034
+ continue;
28035
+ }
28036
+ rows.push({
28037
+ harness: harness.name,
28038
+ path: file.display,
28039
+ kind: inspection.kind,
28040
+ status: "overridden"
28041
+ });
28042
+ if (hasGlobal) findings.push(finding(shadow.display, "global-instructions-overridden", cli));
28043
+ } else rows.push({
28044
+ harness: harness.name,
28045
+ path: file.display,
28046
+ kind: inspection.kind,
28047
+ status: inspection.status
28048
+ });
28049
+ if (hasGlobal && inspection.problem) findings.push(finding(file.display, inspection.problem, cli));
28050
+ }
28051
+ return {
28052
+ globalInstructions: rows,
28053
+ findings
28054
+ };
28055
+ }
28056
+ //#endregion
27835
28057
  //#region src/diagnose-bridges/agents-files.ts
27836
28058
  /** Directories that never hold instructions this repository is responsible for bridging. */
27837
28059
  const pruned = /* @__PURE__ */ new Set(["node_modules"]);
@@ -27946,7 +28168,7 @@ function diagnoseInstructions(root, harnesses, cli) {
27946
28168
  const bridged = harnesses.map((harness) => ({
27947
28169
  name: harness.name,
27948
28170
  bridge: harness.project.instructionBridge
27949
- })).filter((harness) => Boolean(harness.bridge));
28171
+ })).filter((harness) => harness.bridge?.kind === "settings-entry");
27950
28172
  const instructions = [];
27951
28173
  const findings = [];
27952
28174
  const directories = agentsFileDirectories(root);
@@ -28202,7 +28424,7 @@ function inspect(target, path, canonical, git) {
28202
28424
  * Read-only: nothing is created, moved, or repaired — the caller decides what to run from the
28203
28425
  * repair each finding carries.
28204
28426
  */
28205
- function diagnoseBridges({ root, harnesses: preferred = [], cli }) {
28427
+ function diagnoseBridges({ root, harnesses: preferred = [], cli, home, env }) {
28206
28428
  const canonical = join(root, ".agents", "skills");
28207
28429
  const git = new GitBridgeState(root);
28208
28430
  const selected = selectHarnesses(root, preferred);
@@ -28247,9 +28469,15 @@ function diagnoseBridges({ root, harnesses: preferred = [], cli }) {
28247
28469
  }
28248
28470
  const instructions = diagnoseInstructions(root, selected, cli);
28249
28471
  findings.push(...instructions.findings);
28472
+ const global = home === void 0 ? {
28473
+ globalInstructions: [],
28474
+ findings: []
28475
+ } : diagnoseGlobalInstructions(home, preferred, cli, env);
28476
+ findings.push(...global.findings);
28250
28477
  return {
28251
28478
  bridges,
28252
28479
  instructions: instructions.instructions,
28480
+ globalInstructions: global.globalInstructions,
28253
28481
  divergence,
28254
28482
  findings
28255
28483
  };
@@ -28270,6 +28498,7 @@ function buildDoctorReport(bin, result, configuration = [], held = []) {
28270
28498
  bin,
28271
28499
  bridges: result.bridges,
28272
28500
  instructions: result.instructions,
28501
+ globalInstructions: result.globalInstructions,
28273
28502
  references,
28274
28503
  findings: `0 problems found — ${bridges} and the configuration around them is current`
28275
28504
  };
@@ -28278,6 +28507,7 @@ function buildDoctorReport(bin, result, configuration = [], held = []) {
28278
28507
  bin,
28279
28508
  bridges: result.bridges,
28280
28509
  instructions: result.instructions,
28510
+ globalInstructions: result.globalInstructions,
28281
28511
  references,
28282
28512
  ...result.divergence.length ? { divergence: result.divergence } : {},
28283
28513
  findings: findings.map(({ path, problem, detail }) => ({
@@ -28290,7 +28520,7 @@ function buildDoctorReport(bin, result, configuration = [], held = []) {
28290
28520
  }
28291
28521
  const doctorCommand = command({
28292
28522
  name: "doctor",
28293
- description: "Report whether this repository's harness bridges still resolve — skills into .agents/skills, instructions into AGENTS.md. Read-only.",
28523
+ description: "Report whether this repository's harness bridges still resolve — skills into .agents/skills, instructions into AGENTS.md — and whether each harness's user-scope file loads ~/.agents/AGENTS.md. Read-only.",
28294
28524
  options: {
28295
28525
  root: {
28296
28526
  description: "Repository or package directory. Defaults to the current directory.",
@@ -28315,7 +28545,9 @@ const doctorCommand = command({
28315
28545
  const result = diagnoseBridges({
28316
28546
  root,
28317
28547
  ...harnesses.length ? { harnesses } : {},
28318
- cli: commandInvocation
28548
+ cli: commandInvocation,
28549
+ home,
28550
+ env: process.env
28319
28551
  });
28320
28552
  const git = new GitBridgeState(root);
28321
28553
  const configuration = [
package/dist/index.d.mts CHANGED
@@ -10,15 +10,28 @@ export declare function run(argv: string[]): Promise<number>;
10
10
  //#region src/harness-registry/instruction-bridge.d.ts
11
11
  /**
12
12
  * What a harness needs to read `AGENTS.md`; a union because the shape is per harness — Gemini CLI's
13
- * is a settings entry, and the next harness to need one may need a different shape.
13
+ * project bridge is a settings entry, Claude Code's user bridge an import line, and a harness with
14
+ * neither can only be given a symlink.
14
15
  */
15
16
  type InstructionBridge = {
16
17
  /** An `AGENTS.md` entry in an array inside a JSON settings file. */
17
18
  kind: "settings-entry";
18
- /** Repository-relative path of the settings file. */
19
+ /** Path of the settings file, relative to the scope's root. */
19
20
  path: string;
20
21
  /** Dotted path to the array within it, as the harness documents it. */
21
22
  key: string;
23
+ } | {
24
+ /** A line in the harness's own instruction file that pulls the canonical file in. */
25
+ kind: "import";
26
+ /** Path of the instruction file, relative to the scope's root. */
27
+ path: string;
28
+ /** The line itself, exactly as the harness documents the syntax. */
29
+ line: string;
30
+ } | {
31
+ /** The harness's own instruction file, replaced by a symlink to the canonical file. */
32
+ kind: "symlink";
33
+ /** Path of the instruction file, relative to the scope's root. */
34
+ path: string;
22
35
  };
23
36
  //#endregion
24
37
  //#region src/diagnose-mcp/mcp-model.d.ts
@@ -88,6 +101,11 @@ type HarnessScope = {
88
101
  instructionBridge?: InstructionBridge;
89
102
  /** Files whose presence beside `AGENTS.md` stop the harness reading it. */
90
103
  shadowedBy?: readonly string[];
104
+ /**
105
+ * An environment variable that, set and non-empty, replaces the `detect` directory: every path
106
+ * under it is read from the variable's value instead.
107
+ */
108
+ relocatedBy?: string;
91
109
  /** Where this harness keeps its own MCP servers; `doctor` compares against it and never writes. */
92
110
  mcpConfig?: McpConfig;
93
111
  /** What this harness reads that no other can, reported so it can be converted to canonical form. */
@@ -111,6 +129,35 @@ type Harness = {
111
129
  */
112
130
  export declare const harnessRegistry: readonly Harness[];
113
131
  //#endregion
132
+ //#region src/diagnose-bridges/diagnose-global-instructions.d.ts
133
+ /** What is at a harness's user-scope instruction file. */
134
+ type GlobalInstructionKind = "import" | "symlink" | "file" | "none";
135
+ /**
136
+ * `missing`: no file, so the harness loads no user instructions at all; `unbridged`: a file that
137
+ * loads its own content and not the global one; `overridden`: a file the harness reads in its place,
138
+ * such as Codex's `AGENTS.override.md`, that does not load the global one either.
139
+ */
140
+ type GlobalInstructionStatus = "ok" | "missing" | "unbridged" | "overridden";
141
+ type GlobalInstructionReport = {
142
+ harness: HarnessName;
143
+ /**
144
+ * The harness's user-scope instruction file, written from `~` so the report is publishable, or
145
+ * from the variable that moved it, such as `$CODEX_HOME`.
146
+ */
147
+ path: string;
148
+ kind: GlobalInstructionKind;
149
+ status: GlobalInstructionStatus;
150
+ };
151
+ /**
152
+ * Whether each harness the user has installed loads `~/.agents/AGENTS.md` through its own user-scope
153
+ * file, read from wherever `env` moves it. Read-only: the repair is handed to the user, since
154
+ * nothing here writes outside the repository.
155
+ */
156
+ export declare function diagnoseGlobalInstructions(home: string, preferred: readonly HarnessName[], cli: string, env?: NodeJS.ProcessEnv): {
157
+ globalInstructions: GlobalInstructionReport[];
158
+ findings: BridgeFinding[];
159
+ };
160
+ //#endregion
114
161
  //#region src/diagnose-bridges/diagnose-instructions.d.ts
115
162
  /** What is on disk where an instruction bridge belongs, or where a shadowing file may sit. */
116
163
  type InstructionKind = "import" | "symlink" | "settings-entry" | "file" | "none";
@@ -183,8 +230,10 @@ type McpProblem = "mcp-golden-unreadable" | "mcp-target-unreadable" | "mcp-unpro
183
230
  type NonstandardProblem = "nonstandard-instructions" | "nonstandard-rule" | "nonstandard-command" | "nonstandard-skill" | "nonstandard-subagent";
184
231
  /** Every way a harness can end up reading none of `AGENTS.md`. */
185
232
  type InstructionProblem = "no-instructions" | "instructions-missing" | "instructions-unbridged" | "instructions-unreadable" | "instructions-shadowing" | "instructions-superseded";
233
+ /** Every way a harness's user-scope instruction file fails to load `~/.agents/AGENTS.md`. */
234
+ type GlobalInstructionProblem = "global-instructions-missing" | "global-instructions-unbridged" | "global-instructions-overridden";
186
235
  /** Everything `doctor` can report against, across every section. */
187
- type DoctorProblem = BridgeProblem | InstructionProblem | ConfigurationFault | McpProblem | NonstandardProblem;
236
+ type DoctorProblem = BridgeProblem | InstructionProblem | GlobalInstructionProblem | ConfigurationFault | McpProblem | NonstandardProblem;
188
237
  /** Alias kept for callers that name the whole set rather than one section. */
189
238
  type ConfigurationProblem = DoctorProblem;
190
239
  type RepairAction = {
@@ -210,6 +259,7 @@ type Repair = {
210
259
  };
211
260
  export declare const bridgeRepairs: readonly Repair[];
212
261
  export declare const instructionRepairs: readonly Repair[];
262
+ export declare const globalInstructionRepairs: readonly Repair[];
213
263
  export declare const doctorRepairs: readonly Repair[];
214
264
  export declare const doctorSkill: {
215
265
  readonly name: "doctor-buddy-agent-harness";
@@ -289,6 +339,16 @@ type DiagnoseOptions = {
289
339
  harnesses?: HarnessName[];
290
340
  /** How to name this tool in the repair commands. */
291
341
  cli: string;
342
+ /**
343
+ * The home directory whose user-scope instruction files are checked for loading
344
+ * `~/.agents/AGENTS.md`; omitted, none are.
345
+ */
346
+ home?: string;
347
+ /**
348
+ * The environment the harnesses run in, for the variables that move their user-scope files —
349
+ * `CODEX_HOME`, `COPILOT_HOME`, `CLAUDE_CONFIG_DIR`; omitted, none is followed.
350
+ */
351
+ env?: NodeJS.ProcessEnv;
292
352
  };
293
353
  type DiagnoseResult = {
294
354
  bridges: BridgeReport[];
@@ -297,6 +357,8 @@ type DiagnoseResult = {
297
357
  * is never a command.
298
358
  */
299
359
  instructions: InstructionReport[];
360
+ /** One row per installed harness whose user-scope file can load `~/.agents/AGENTS.md`. */
361
+ globalInstructions: GlobalInstructionReport[];
300
362
  divergence: DivergenceReport[];
301
363
  findings: BridgeFinding[];
302
364
  };
@@ -304,7 +366,7 @@ type DiagnoseResult = {
304
366
  * Read-only: nothing is created, moved, or repaired — the caller decides what to run from the
305
367
  * repair each finding carries.
306
368
  */
307
- export declare function diagnoseBridges({ root, harnesses: preferred, cli }: DiagnoseOptions): DiagnoseResult;
369
+ export declare function diagnoseBridges({ root, harnesses: preferred, cli, home, env }: DiagnoseOptions): DiagnoseResult;
308
370
  //#endregion
309
371
  //#region src/diagnose-configuration/diagnose-configuration.d.ts
310
372
  /**
@@ -438,6 +500,7 @@ type DoctorReport = {
438
500
  bin: string;
439
501
  bridges: DiagnoseResult["bridges"];
440
502
  instructions: DiagnoseResult["instructions"];
503
+ globalInstructions: DiagnoseResult["globalInstructions"];
441
504
  /**
442
505
  * References the managed, project, and user tiers hold, with the status `reference list` gives;
443
506
  * reported rather than diagnosed, since a reference is a choice, not a fault.
@@ -715,5 +778,5 @@ type ReferenceSearchReport = {
715
778
  };
716
779
  export declare const referenceCommand: cli$1.Command;
717
780
  //#endregion
718
- export type { BridgeFinding, BridgeKind, BridgeProblem, BridgeReport, BridgeStatus, ConfigurationFault, ConfigurationProblem, DiagnoseMcpOptions, DiagnoseOptions, DiagnoseResult, DivergenceDirection, DivergenceReport, DoctorProblem, DoctorReference, DoctorReport, GovernanceDocument, GovernanceEntry, GovernanceLayer, GovernanceListReport, GovernanceScope, GovernanceShowReport, Harness, HarnessName, HarnessScope, HarnessScopeName, InitializeOptions, InitializeResult, InstructionBridge, InstructionKind, InstructionProblem, InstructionReport, InstructionStatus, LayerOptions, ListMcpServersOptions, MatchKind, McpConfig, McpDirection, McpField, McpProblem, McpServer, McpServerEntry, McpTransport, MergeMode, ReferenceLayer, ReferenceLayerOptions, ReferenceListReport, ReferenceListing, ReferenceName, ReferenceRow, ReferenceSearchReport, ReferenceShowEntry, ReferenceStatus, ReferenceTier, Repair, ResolveOptions, ResolvedReference, SearchMatch, TraceEntry, UsedLayer };
781
+ export type { BridgeFinding, BridgeKind, BridgeProblem, BridgeReport, BridgeStatus, ConfigurationFault, ConfigurationProblem, DiagnoseMcpOptions, DiagnoseOptions, DiagnoseResult, DivergenceDirection, DivergenceReport, DoctorProblem, DoctorReference, DoctorReport, GlobalInstructionKind, GlobalInstructionProblem, GlobalInstructionReport, GlobalInstructionStatus, GovernanceDocument, GovernanceEntry, GovernanceLayer, GovernanceListReport, GovernanceScope, GovernanceShowReport, Harness, HarnessName, HarnessScope, HarnessScopeName, InitializeOptions, InitializeResult, InstructionBridge, InstructionKind, InstructionProblem, InstructionReport, InstructionStatus, LayerOptions, ListMcpServersOptions, MatchKind, McpConfig, McpDirection, McpField, McpProblem, McpServer, McpServerEntry, McpTransport, MergeMode, ReferenceLayer, ReferenceLayerOptions, ReferenceListReport, ReferenceListing, ReferenceName, ReferenceRow, ReferenceSearchReport, ReferenceShowEntry, ReferenceStatus, ReferenceTier, Repair, ResolveOptions, ResolvedReference, SearchMatch, TraceEntry, UsedLayer };
719
782
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/cli.ts","../src/harness-registry/instruction-bridge.ts","../src/diagnose-mcp/mcp-model.ts","../src/mcp-dialects/mcp-dialects.ts","../src/harness-registry/mcp-config.ts","../src/harness-registry/nonstandard-artifact.ts","../src/harness-registry/harness-registry.ts","../src/diagnose-bridges/diagnose-instructions.ts","../src/diagnose-bridges/locator.ts","../src/diagnose-bridges/doctor-guidance.ts","../src/diagnose-bridges/git-bridge-state.ts","../src/diagnose-bridges/diagnose-bridges.ts","../src/diagnose-configuration/diagnose-configuration.ts","../src/references/reference-layers.ts","../src/references/reference-document.ts","../src/references/resolve-reference.ts","../src/references/reference-catalog.ts","../src/diagnose-bridges/doctor.command.ts","../src/diagnose-mcp/diagnose-mcp.ts","../src/diagnose-mcp/mcp-baseline.ts","../src/diagnose-mcp/mcp-sources.ts","../src/governance-overrides/governance-overrides.ts","../src/governance-overrides/governance.command.ts","../src/initialize-harnesses/init.command.ts","../src/skill-projection/skill-projection.ts","../src/initialize-harnesses/initialize-harnesses.ts","../src/mcp-inventory/mcp-inventory.ts","../src/references/reference.command.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/cli.ts","../src/harness-registry/instruction-bridge.ts","../src/diagnose-mcp/mcp-model.ts","../src/mcp-dialects/mcp-dialects.ts","../src/harness-registry/mcp-config.ts","../src/harness-registry/nonstandard-artifact.ts","../src/harness-registry/harness-registry.ts","../src/diagnose-bridges/diagnose-global-instructions.ts","../src/diagnose-bridges/diagnose-instructions.ts","../src/diagnose-bridges/locator.ts","../src/diagnose-bridges/doctor-guidance.ts","../src/diagnose-bridges/git-bridge-state.ts","../src/diagnose-bridges/diagnose-bridges.ts","../src/diagnose-configuration/diagnose-configuration.ts","../src/references/reference-layers.ts","../src/references/reference-document.ts","../src/references/resolve-reference.ts","../src/references/reference-catalog.ts","../src/diagnose-bridges/doctor.command.ts","../src/diagnose-mcp/diagnose-mcp.ts","../src/diagnose-mcp/mcp-baseline.ts","../src/diagnose-mcp/mcp-sources.ts","../src/governance-overrides/governance-overrides.ts","../src/governance-overrides/governance.command.ts","../src/initialize-harnesses/init.command.ts","../src/skill-projection/skill-projection.ts","../src/initialize-harnesses/initialize-harnesses.ts","../src/mcp-inventory/mcp-inventory.ts","../src/references/reference.command.ts"],"mappings":"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"}