buddy-agent-harness 0.17.0 → 0.19.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 (42) 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 +272 -11
  5. package/dist/index.d.mts +75 -5
  6. package/dist/index.d.mts.map +1 -1
  7. package/dist/index.mjs +277 -12
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/skill-scripts/doctor.mjs +73 -72
  10. package/dist/skill-scripts/init.mjs +73 -72
  11. package/dist/skill-scripts/mcp.mjs +73 -72
  12. package/dist/skill-scripts/reference.mjs +73 -72
  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 +33 -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 +73 -72
  24. package/skills/enhance/SKILL.md +14 -2
  25. package/skills/enhance/scripts/doctor.mjs +486 -0
  26. package/skills/init-buddy-agent-harness/SKILL.md +1 -1
  27. package/skills/init-buddy-agent-harness/scripts/doctor.mjs +73 -72
  28. package/skills/init-buddy-agent-harness/scripts/init.mjs +73 -72
  29. package/skills/reference/SKILL.md +1 -1
  30. package/skills/reference/scripts/reference.mjs +73 -72
  31. package/skills/repair/SKILL.md +3 -1
  32. package/skills/repair/scripts/doctor.mjs +73 -72
  33. package/skills/repair/scripts/mcp.mjs +73 -72
  34. package/src/diagnose-bridges/diagnose-bridges.ts +27 -2
  35. package/src/diagnose-bridges/diagnose-global-instructions.ts +172 -0
  36. package/src/diagnose-bridges/diagnose-instructions.ts +7 -2
  37. package/src/diagnose-bridges/doctor-guidance.ts +175 -6
  38. package/src/diagnose-bridges/doctor.command.ts +6 -1
  39. package/src/harness-registry/harness-registry.ts +45 -4
  40. package/src/harness-registry/instruction-bridge.ts +25 -9
  41. package/src/index.ts +8 -0
  42. package/src/skill-scripts/launchers.ts +1 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "buddy-agent-harness",
3
- "version": "0.17.0",
3
+ "version": "0.19.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.17.0",
3
+ "version": "0.19.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.17.0",
3
+ "version": "0.19.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,14 @@ 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
+ emptyRelocatesToStart: true,
18010
+ instructionBridge: {
18011
+ kind: "import",
18012
+ path: ".claude/CLAUDE.md",
18013
+ line: `@~/${globalInstructions}`
18014
+ }
18002
18015
  }
18003
18016
  },
18004
18017
  {
@@ -18060,7 +18073,13 @@ const harnessRegistry = [
18060
18073
  },
18061
18074
  user: {
18062
18075
  detect: ".codex",
18063
- ...skillsProjection("codex", "user")
18076
+ ...skillsProjection("codex", "user"),
18077
+ instructionBridge: {
18078
+ kind: "symlink",
18079
+ path: ".codex/AGENTS.md"
18080
+ },
18081
+ shadowedBy: [".codex/AGENTS.override.md"],
18082
+ relocatedBy: "CODEX_HOME"
18064
18083
  }
18065
18084
  },
18066
18085
  {
@@ -18088,7 +18107,12 @@ const harnessRegistry = [
18088
18107
  },
18089
18108
  user: {
18090
18109
  detect: ".copilot",
18091
- ...skillsProjection("copilot-cli", "user")
18110
+ ...skillsProjection("copilot-cli", "user"),
18111
+ relocatedBy: "COPILOT_HOME",
18112
+ instructionBridge: {
18113
+ kind: "symlink",
18114
+ path: ".copilot/copilot-instructions.md"
18115
+ }
18092
18116
  }
18093
18117
  },
18094
18118
  {
@@ -18120,7 +18144,11 @@ const harnessRegistry = [
18120
18144
  },
18121
18145
  user: {
18122
18146
  detect: ".gemini",
18123
- ...skillsProjection("gemini-cli", "user")
18147
+ ...skillsProjection("gemini-cli", "user"),
18148
+ instructionBridge: {
18149
+ kind: "symlink",
18150
+ path: ".gemini/GEMINI.md"
18151
+ }
18124
18152
  }
18125
18153
  },
18126
18154
  {
@@ -18328,6 +18356,69 @@ const instructionTable = {
18328
18356
  }
18329
18357
  };
18330
18358
  repairsOf(instructionTable);
18359
+ const globalFile = `~/${globalInstructions}`;
18360
+ /**
18361
+ * The step that bridges one harness's user-scope file, in the words it is handed over in; `file` is
18362
+ * where it was found, which a variable such as `$CODEX_HOME` may have moved.
18363
+ */
18364
+ function globalBridgeStep(bridge, file = `~/${bridge.path}`) {
18365
+ return bridge.kind === "import" ? `add the line \`${bridge.line}\` to ${file}` : `run \`ln -s ${globalFile} ${file}\``;
18366
+ }
18367
+ /** Every spelling of a user-scope path a report can carry: from `~`, and from the variable that moves it. */
18368
+ function userSpellings(scope, path) {
18369
+ const under = `${scope.detect}/`;
18370
+ return scope.relocatedBy !== void 0 && path.startsWith(under) ? [`~/${path}`, `$${scope.relocatedBy}/${path.slice(under.length)}`] : [`~/${path}`];
18371
+ }
18372
+ /** The bridge for a reported path; undefined for a path no harness registers, such as a table's `<path>`. */
18373
+ function userBridgeAt(file) {
18374
+ for (const { user } of harnessRegistry) {
18375
+ const bridge = user?.instructionBridge;
18376
+ if (user && bridge && userSpellings(user, bridge.path).includes(file)) return bridge;
18377
+ }
18378
+ }
18379
+ /** The step for one reported file, or a pointer to where it is written when the path is not one. */
18380
+ function stepAt(file, keepContent) {
18381
+ const bridge = userBridgeAt(file);
18382
+ if (bridge === void 0) return `add the bridge the harness page names for ${file}`;
18383
+ return `${keepContent && bridge.kind !== "import" ? `move what ${file} says into ${globalFile} and remove it, then ` : ""}${globalBridgeStep(bridge, file)}`;
18384
+ }
18385
+ /** Outside the repository, so never written: a repair is a step handed to the user. */
18386
+ const handOver = "hand the user this step, since nothing here writes outside the repository:";
18387
+ const globalInstructionTable = {
18388
+ "global-instructions-missing": {
18389
+ detail: `no user-scope instruction file at this path — the harness loads none of ${globalFile}`,
18390
+ repair: ({ file }) => ({
18391
+ command: "",
18392
+ instruction: `${handOver} ${stepAt(file, false)}`
18393
+ }),
18394
+ skillRepair: () => "hand the user the step the harness page names for that file; write nothing yourself"
18395
+ },
18396
+ "global-instructions-unbridged": {
18397
+ detail: `the file holds its own content and does not load ${globalFile} — text placed there reaches no session of this harness`,
18398
+ repair: ({ file }) => ({
18399
+ command: "",
18400
+ instruction: `${handOver} ${stepAt(file, true)}`
18401
+ }),
18402
+ skillRepair: () => "hand the user the step the harness page names for that file, keeping what the file says; write nothing yourself"
18403
+ },
18404
+ "global-instructions-overridden": {
18405
+ 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}`,
18406
+ repair: ({ file }) => ({
18407
+ command: "",
18408
+ instruction: `${handOver} move what ${file} says into ${globalFile} and remove it`
18409
+ }),
18410
+ skillRepair: () => "hand the user the move of what that file says into the global file, and its removal; write nothing yourself"
18411
+ },
18412
+ "global-instructions-emptied": {
18413
+ detail: "the variable is set but empty, which this harness reads as the directory it starts in rather than as unset — its user-scope file is whichever one sits there, not the one in its own folder",
18414
+ repair: ({ file }) => ({
18415
+ command: "",
18416
+ instruction: `${handOver} unset ${file.slice(1)} where your shell sets it, or set it to the folder you meant`
18417
+ }),
18418
+ skillRepair: () => "hand the user the step of unsetting that variable; write nothing yourself"
18419
+ }
18420
+ };
18421
+ repairsOf(globalInstructionTable);
18331
18422
  const configurationTable = {
18332
18423
  "deprecated-harness": {
18333
18424
  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 +18595,7 @@ repairsOf(nonstandardTable);
18504
18595
  const doctorTable = {
18505
18596
  ...bridgeTable,
18506
18597
  ...instructionTable,
18598
+ ...globalInstructionTable,
18507
18599
  ...configurationTable,
18508
18600
  ...mcpTable,
18509
18601
  ...nonstandardTable
@@ -27649,7 +27741,7 @@ function projectChain(root) {
27649
27741
  dir = parent;
27650
27742
  }
27651
27743
  }
27652
- function isDirectory$1(path) {
27744
+ function isDirectory$2(path) {
27653
27745
  try {
27654
27746
  return statSync(path).isDirectory();
27655
27747
  } catch {
@@ -27685,7 +27777,7 @@ function dependencyLayers(root, skip) {
27685
27777
  const dir = packageDir(pkg, manifestPath);
27686
27778
  if (!dir || skip.has(canonical(dir))) continue;
27687
27779
  const references = join(dir, "references");
27688
- if (!isDirectory$1(references)) continue;
27780
+ if (!isDirectory$2(references)) continue;
27689
27781
  const manifest = readJson(join(dir, "plugin.json"));
27690
27782
  const manifestName = isRecord$1(manifest) && typeof manifest["name"] === "string" ? manifest["name"] : void 0;
27691
27783
  const plugins = manifestName && manifestName !== pkg ? [pkg, manifestName] : [pkg];
@@ -27735,7 +27827,7 @@ async function referenceLayers({ root, home, platform, programData, packageRoot
27735
27827
  plugins: self,
27736
27828
  status: LEGACY_STATUS
27737
27829
  },
27738
- ...enabled.filter(({ dir, skipped }) => skipped || isDirectory$1(dir) && canonical(dirname(dir)) !== ownRoot),
27830
+ ...enabled.filter(({ dir, skipped }) => skipped || isDirectory$2(dir) && canonical(dirname(dir)) !== ownRoot),
27739
27831
  ...dependencyLayers(root, /* @__PURE__ */ new Set([ownRoot]))
27740
27832
  ];
27741
27833
  const seen = /* @__PURE__ */ new Set();
@@ -27832,6 +27924,165 @@ function projectSkills({ root, canonicalSkills, harnesses, copy, force }) {
27832
27924
  };
27833
27925
  }
27834
27926
  //#endregion
27927
+ //#region src/diagnose-bridges/diagnose-global-instructions.ts
27928
+ function isDirectory$1(path) {
27929
+ try {
27930
+ return lstatSync(path).isDirectory();
27931
+ } catch {
27932
+ return false;
27933
+ }
27934
+ }
27935
+ function exists$1(path) {
27936
+ try {
27937
+ lstatSync(path);
27938
+ return true;
27939
+ } catch {
27940
+ return false;
27941
+ }
27942
+ }
27943
+ /** The import a user wrote may spell the home directory either way; both load the same file. */
27944
+ function importsGlobal(body, bridge, home) {
27945
+ const spellings = bridge.kind === "import" ? [bridge.line, `@${join(home, globalInstructions)}`] : [];
27946
+ return body.split("\n").some((line) => spellings.includes(line.trim()));
27947
+ }
27948
+ /**
27949
+ * Follows `relocatedBy` the way each harness does. An empty value is no value to Codex and Copilot CLI
27950
+ * (E-CODEX-06, E-COPILOT-06), and the directory Claude Code starts in to Claude Code (E-CC-20).
27951
+ */
27952
+ function base(scope, env, start) {
27953
+ const variable = scope.relocatedBy;
27954
+ const value = variable === void 0 ? void 0 : env[variable];
27955
+ if (variable === void 0 || value === void 0) return {};
27956
+ if (value !== "") return { moved: {
27957
+ root: resolve(value),
27958
+ display: `$${variable}`
27959
+ } };
27960
+ return scope.emptyRelocatesToStart ? {
27961
+ moved: {
27962
+ root: start,
27963
+ display: "."
27964
+ },
27965
+ emptied: variable
27966
+ } : {};
27967
+ }
27968
+ function locate(home, scope, { moved }, path) {
27969
+ if (!moved || path !== scope.detect && !path.startsWith(`${scope.detect}/`)) return {
27970
+ absolute: join(home, path),
27971
+ display: `~/${path}`
27972
+ };
27973
+ const rest = path.slice(scope.detect.length);
27974
+ return {
27975
+ absolute: join(moved.root, rest),
27976
+ display: `${moved.display}${rest}`
27977
+ };
27978
+ }
27979
+ /** A shadow is read only where it is a file holding more than whitespace (E-CODEX-06). */
27980
+ function readsAsShadow(path) {
27981
+ try {
27982
+ return statSync(path).isFile() && readFileSync(path, "utf8").trim() !== "";
27983
+ } catch {
27984
+ return false;
27985
+ }
27986
+ }
27987
+ function inspect$1(home, target, bridge) {
27988
+ let stats;
27989
+ try {
27990
+ stats = lstatSync(target);
27991
+ } catch {
27992
+ return {
27993
+ kind: "none",
27994
+ status: "missing",
27995
+ problem: "global-instructions-missing"
27996
+ };
27997
+ }
27998
+ if (stats.isSymbolicLink()) return resolve(dirname(target), readlinkSync(target)) === join(home, ".agents/AGENTS.md") ? {
27999
+ kind: "symlink",
28000
+ status: "ok"
28001
+ } : {
28002
+ kind: "symlink",
28003
+ status: "unbridged",
28004
+ problem: "global-instructions-unbridged"
28005
+ };
28006
+ let body;
28007
+ try {
28008
+ body = readFileSync(target, "utf8");
28009
+ } catch {
28010
+ return {
28011
+ kind: "file",
28012
+ status: "unbridged",
28013
+ problem: "global-instructions-unbridged"
28014
+ };
28015
+ }
28016
+ return importsGlobal(body, bridge, home) ? {
28017
+ kind: "import",
28018
+ status: "ok"
28019
+ } : {
28020
+ kind: "file",
28021
+ status: "unbridged",
28022
+ problem: "global-instructions-unbridged"
28023
+ };
28024
+ }
28025
+ function finding(path, problem, cli) {
28026
+ const { detail, repair } = repairFor(problem);
28027
+ return {
28028
+ path,
28029
+ problem,
28030
+ detail,
28031
+ repair: repair({ file: path }, cli)
28032
+ };
28033
+ }
28034
+ /**
28035
+ * Whether each harness the user has installed loads `~/.agents/AGENTS.md` through its own user-scope
28036
+ * file, read from wherever `env` moves it — `start`, for a harness that reads an empty variable as
28037
+ * the directory it starts in. Read-only: the repair is handed to the user, since nothing here
28038
+ * writes outside the repository.
28039
+ */
28040
+ function diagnoseGlobalInstructions(home, preferred, cli, env = {}, start = process.cwd()) {
28041
+ const hasGlobal = exists$1(join(home, globalInstructions));
28042
+ const rows = [];
28043
+ const findings = [];
28044
+ for (const harness of harnessRegistry) {
28045
+ const user = harness.user;
28046
+ const bridge = user?.instructionBridge;
28047
+ if (!user || !bridge) continue;
28048
+ const moved = base(user, env, start);
28049
+ if (!preferred.includes(harness.name) && !isDirectory$1(locate(home, user, moved, user.detect).absolute)) continue;
28050
+ const file = locate(home, user, moved, bridge.path);
28051
+ const inspection = inspect$1(home, file.absolute, bridge);
28052
+ const shadow = (user.shadowedBy ?? []).map((path) => locate(home, user, moved, path)).find(({ absolute }) => readsAsShadow(absolute));
28053
+ if (shadow !== void 0) {
28054
+ const read = inspect$1(home, shadow.absolute, bridge);
28055
+ if (read.status === "ok") {
28056
+ rows.push({
28057
+ harness: harness.name,
28058
+ path: shadow.display,
28059
+ kind: read.kind,
28060
+ status: "ok"
28061
+ });
28062
+ continue;
28063
+ }
28064
+ rows.push({
28065
+ harness: harness.name,
28066
+ path: file.display,
28067
+ kind: inspection.kind,
28068
+ status: "overridden"
28069
+ });
28070
+ if (hasGlobal) findings.push(finding(shadow.display, "global-instructions-overridden", cli));
28071
+ } else rows.push({
28072
+ harness: harness.name,
28073
+ path: file.display,
28074
+ kind: inspection.kind,
28075
+ status: inspection.status
28076
+ });
28077
+ if (hasGlobal && moved.emptied) findings.push(finding(`$${moved.emptied}`, "global-instructions-emptied", cli));
28078
+ else if (hasGlobal && inspection.problem) findings.push(finding(file.display, inspection.problem, cli));
28079
+ }
28080
+ return {
28081
+ globalInstructions: rows,
28082
+ findings
28083
+ };
28084
+ }
28085
+ //#endregion
27835
28086
  //#region src/diagnose-bridges/agents-files.ts
27836
28087
  /** Directories that never hold instructions this repository is responsible for bridging. */
27837
28088
  const pruned = /* @__PURE__ */ new Set(["node_modules"]);
@@ -27946,7 +28197,7 @@ function diagnoseInstructions(root, harnesses, cli) {
27946
28197
  const bridged = harnesses.map((harness) => ({
27947
28198
  name: harness.name,
27948
28199
  bridge: harness.project.instructionBridge
27949
- })).filter((harness) => Boolean(harness.bridge));
28200
+ })).filter((harness) => harness.bridge?.kind === "settings-entry");
27950
28201
  const instructions = [];
27951
28202
  const findings = [];
27952
28203
  const directories = agentsFileDirectories(root);
@@ -28202,7 +28453,7 @@ function inspect(target, path, canonical, git) {
28202
28453
  * Read-only: nothing is created, moved, or repaired — the caller decides what to run from the
28203
28454
  * repair each finding carries.
28204
28455
  */
28205
- function diagnoseBridges({ root, harnesses: preferred = [], cli }) {
28456
+ function diagnoseBridges({ root, harnesses: preferred = [], cli, home, env }) {
28206
28457
  const canonical = join(root, ".agents", "skills");
28207
28458
  const git = new GitBridgeState(root);
28208
28459
  const selected = selectHarnesses(root, preferred);
@@ -28247,9 +28498,15 @@ function diagnoseBridges({ root, harnesses: preferred = [], cli }) {
28247
28498
  }
28248
28499
  const instructions = diagnoseInstructions(root, selected, cli);
28249
28500
  findings.push(...instructions.findings);
28501
+ const global = home === void 0 ? {
28502
+ globalInstructions: [],
28503
+ findings: []
28504
+ } : diagnoseGlobalInstructions(home, preferred, cli, env, root);
28505
+ findings.push(...global.findings);
28250
28506
  return {
28251
28507
  bridges,
28252
28508
  instructions: instructions.instructions,
28509
+ globalInstructions: global.globalInstructions,
28253
28510
  divergence,
28254
28511
  findings
28255
28512
  };
@@ -28270,6 +28527,7 @@ function buildDoctorReport(bin, result, configuration = [], held = []) {
28270
28527
  bin,
28271
28528
  bridges: result.bridges,
28272
28529
  instructions: result.instructions,
28530
+ globalInstructions: result.globalInstructions,
28273
28531
  references,
28274
28532
  findings: `0 problems found — ${bridges} and the configuration around them is current`
28275
28533
  };
@@ -28278,6 +28536,7 @@ function buildDoctorReport(bin, result, configuration = [], held = []) {
28278
28536
  bin,
28279
28537
  bridges: result.bridges,
28280
28538
  instructions: result.instructions,
28539
+ globalInstructions: result.globalInstructions,
28281
28540
  references,
28282
28541
  ...result.divergence.length ? { divergence: result.divergence } : {},
28283
28542
  findings: findings.map(({ path, problem, detail }) => ({
@@ -28290,7 +28549,7 @@ function buildDoctorReport(bin, result, configuration = [], held = []) {
28290
28549
  }
28291
28550
  const doctorCommand = command({
28292
28551
  name: "doctor",
28293
- description: "Report whether this repository's harness bridges still resolve — skills into .agents/skills, instructions into AGENTS.md. Read-only.",
28552
+ 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
28553
  options: {
28295
28554
  root: {
28296
28555
  description: "Repository or package directory. Defaults to the current directory.",
@@ -28315,7 +28574,9 @@ const doctorCommand = command({
28315
28574
  const result = diagnoseBridges({
28316
28575
  root,
28317
28576
  ...harnesses.length ? { harnesses } : {},
28318
- cli: commandInvocation
28577
+ cli: commandInvocation,
28578
+ home,
28579
+ env: process.env
28319
28580
  });
28320
28581
  const git = new GitBridgeState(root);
28321
28582
  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,16 @@ 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;
109
+ /**
110
+ * `relocatedBy` set to an empty string is read as the directory the harness starts in, rather
111
+ * than as unset.
112
+ */
113
+ emptyRelocatesToStart?: true;
91
114
  /** Where this harness keeps its own MCP servers; `doctor` compares against it and never writes. */
92
115
  mcpConfig?: McpConfig;
93
116
  /** What this harness reads that no other can, reported so it can be converted to canonical form. */
@@ -111,6 +134,37 @@ type Harness = {
111
134
  */
112
135
  export declare const harnessRegistry: readonly Harness[];
113
136
  //#endregion
137
+ //#region src/diagnose-bridges/diagnose-global-instructions.d.ts
138
+ /** What is at a harness's user-scope instruction file. */
139
+ type GlobalInstructionKind = "import" | "symlink" | "file" | "none";
140
+ /**
141
+ * `missing`: no file, so the harness loads no user instructions at all; `unbridged`: a file that
142
+ * loads its own content and not the global one; `overridden`: a file the harness reads in its place,
143
+ * such as Codex's `AGENTS.override.md`, that does not load the global one either.
144
+ */
145
+ type GlobalInstructionStatus = "ok" | "missing" | "unbridged" | "overridden";
146
+ type GlobalInstructionReport = {
147
+ harness: HarnessName;
148
+ /**
149
+ * The harness's user-scope instruction file, written from `~` so the report is publishable, or
150
+ * from the variable that moved it, such as `$CODEX_HOME`, or from `.` where an empty variable moved
151
+ * it to the directory the harness starts in.
152
+ */
153
+ path: string;
154
+ kind: GlobalInstructionKind;
155
+ status: GlobalInstructionStatus;
156
+ };
157
+ /**
158
+ * Whether each harness the user has installed loads `~/.agents/AGENTS.md` through its own user-scope
159
+ * file, read from wherever `env` moves it — `start`, for a harness that reads an empty variable as
160
+ * the directory it starts in. Read-only: the repair is handed to the user, since nothing here
161
+ * writes outside the repository.
162
+ */
163
+ export declare function diagnoseGlobalInstructions(home: string, preferred: readonly HarnessName[], cli: string, env?: NodeJS.ProcessEnv, start?: string): {
164
+ globalInstructions: GlobalInstructionReport[];
165
+ findings: BridgeFinding[];
166
+ };
167
+ //#endregion
114
168
  //#region src/diagnose-bridges/diagnose-instructions.d.ts
115
169
  /** What is on disk where an instruction bridge belongs, or where a shadowing file may sit. */
116
170
  type InstructionKind = "import" | "symlink" | "settings-entry" | "file" | "none";
@@ -183,8 +237,10 @@ type McpProblem = "mcp-golden-unreadable" | "mcp-target-unreadable" | "mcp-unpro
183
237
  type NonstandardProblem = "nonstandard-instructions" | "nonstandard-rule" | "nonstandard-command" | "nonstandard-skill" | "nonstandard-subagent";
184
238
  /** Every way a harness can end up reading none of `AGENTS.md`. */
185
239
  type InstructionProblem = "no-instructions" | "instructions-missing" | "instructions-unbridged" | "instructions-unreadable" | "instructions-shadowing" | "instructions-superseded";
240
+ /** Every way a harness's user-scope instruction file fails to load `~/.agents/AGENTS.md`. */
241
+ type GlobalInstructionProblem = "global-instructions-missing" | "global-instructions-unbridged" | "global-instructions-overridden" | "global-instructions-emptied";
186
242
  /** Everything `doctor` can report against, across every section. */
187
- type DoctorProblem = BridgeProblem | InstructionProblem | ConfigurationFault | McpProblem | NonstandardProblem;
243
+ type DoctorProblem = BridgeProblem | InstructionProblem | GlobalInstructionProblem | ConfigurationFault | McpProblem | NonstandardProblem;
188
244
  /** Alias kept for callers that name the whole set rather than one section. */
189
245
  type ConfigurationProblem = DoctorProblem;
190
246
  type RepairAction = {
@@ -210,6 +266,7 @@ type Repair = {
210
266
  };
211
267
  export declare const bridgeRepairs: readonly Repair[];
212
268
  export declare const instructionRepairs: readonly Repair[];
269
+ export declare const globalInstructionRepairs: readonly Repair[];
213
270
  export declare const doctorRepairs: readonly Repair[];
214
271
  export declare const doctorSkill: {
215
272
  readonly name: "doctor-buddy-agent-harness";
@@ -289,6 +346,16 @@ type DiagnoseOptions = {
289
346
  harnesses?: HarnessName[];
290
347
  /** How to name this tool in the repair commands. */
291
348
  cli: string;
349
+ /**
350
+ * The home directory whose user-scope instruction files are checked for loading
351
+ * `~/.agents/AGENTS.md`; omitted, none are.
352
+ */
353
+ home?: string;
354
+ /**
355
+ * The environment the harnesses run in, for the variables that move their user-scope files —
356
+ * `CODEX_HOME`, `COPILOT_HOME`, `CLAUDE_CONFIG_DIR`; omitted, none is followed.
357
+ */
358
+ env?: NodeJS.ProcessEnv;
292
359
  };
293
360
  type DiagnoseResult = {
294
361
  bridges: BridgeReport[];
@@ -297,6 +364,8 @@ type DiagnoseResult = {
297
364
  * is never a command.
298
365
  */
299
366
  instructions: InstructionReport[];
367
+ /** One row per installed harness whose user-scope file can load `~/.agents/AGENTS.md`. */
368
+ globalInstructions: GlobalInstructionReport[];
300
369
  divergence: DivergenceReport[];
301
370
  findings: BridgeFinding[];
302
371
  };
@@ -304,7 +373,7 @@ type DiagnoseResult = {
304
373
  * Read-only: nothing is created, moved, or repaired — the caller decides what to run from the
305
374
  * repair each finding carries.
306
375
  */
307
- export declare function diagnoseBridges({ root, harnesses: preferred, cli }: DiagnoseOptions): DiagnoseResult;
376
+ export declare function diagnoseBridges({ root, harnesses: preferred, cli, home, env }: DiagnoseOptions): DiagnoseResult;
308
377
  //#endregion
309
378
  //#region src/diagnose-configuration/diagnose-configuration.d.ts
310
379
  /**
@@ -438,6 +507,7 @@ type DoctorReport = {
438
507
  bin: string;
439
508
  bridges: DiagnoseResult["bridges"];
440
509
  instructions: DiagnoseResult["instructions"];
510
+ globalInstructions: DiagnoseResult["globalInstructions"];
441
511
  /**
442
512
  * References the managed, project, and user tiers hold, with the status `reference list` gives;
443
513
  * reported rather than diagnosed, since a reference is a choice, not a fault.
@@ -715,5 +785,5 @@ type ReferenceSearchReport = {
715
785
  };
716
786
  export declare const referenceCommand: cli$1.Command;
717
787
  //#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 };
788
+ 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
789
  //# 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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"}