[{"data":1,"prerenderedAt":954},["ShallowReactive",2],{"navigation_docs":3,"-guide":104,"-guide-surround":951},[4,48],{"title":5,"path":6,"stem":7,"children":8,"icon":47},"Guide","\u002Fguide","1.guide\u002F01.index",[9,11,15,19,23,27,31,35,39,43],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"Registry and paths","\u002Fguide\u002Fregistry","1.guide\u002F02.registry",{"title":16,"path":17,"stem":18},"Running another harness","\u002Fguide\u002Finvoke","1.guide\u002F03.invoke",{"title":20,"path":21,"stem":22},"MCP servers","\u002Fguide\u002Fmcp-servers","1.guide\u002F04.mcp-servers",{"title":24,"path":25,"stem":26},"Instructions files","\u002Fguide\u002Fagents-sync","1.guide\u002F05.agents-sync",{"title":28,"path":29,"stem":30},"CLI","\u002Fguide\u002Fcli","1.guide\u002F06.cli",{"title":32,"path":33,"stem":34},"Agents","\u002Fguide\u002Fagents","1.guide\u002F07.agents",{"title":36,"path":37,"stem":38},"Sessions","\u002Fguide\u002Fsessions","1.guide\u002F08.sessions",{"title":40,"path":41,"stem":42},"Custom harnesses","\u002Fguide\u002Fcustom","1.guide\u002F09.custom",{"title":44,"path":45,"stem":46},"Explorer","\u002Fguide\u002Fexplorer","1.guide\u002F10.explorer","i-solar-book-2-linear",{"title":49,"path":50,"stem":51,"children":52,"icon":103},"Harnesses","\u002Fharnesses","2.harnesses\u002F00.index",[53,55,59,63,67,71,75,79,83,87,91,95,99],{"title":54,"path":50,"stem":51},"Overview",{"title":56,"path":57,"stem":58},"Claude Code","\u002Fharnesses\u002Fclaude","2.harnesses\u002F01.claude",{"title":60,"path":61,"stem":62},"Codex CLI","\u002Fharnesses\u002Fcodex","2.harnesses\u002F02.codex",{"title":64,"path":65,"stem":66},"Gemini CLI","\u002Fharnesses\u002Fgemini","2.harnesses\u002F03.gemini",{"title":68,"path":69,"stem":70},"Antigravity CLI","\u002Fharnesses\u002Fantigravity","2.harnesses\u002F04.antigravity",{"title":72,"path":73,"stem":74},"Grok CLI","\u002Fharnesses\u002Fgrok","2.harnesses\u002F05.grok",{"title":76,"path":77,"stem":78},"OpenCode","\u002Fharnesses\u002Fopencode","2.harnesses\u002F06.opencode",{"title":80,"path":81,"stem":82},"Pi","\u002Fharnesses\u002Fpi","2.harnesses\u002F07.pi",{"title":84,"path":85,"stem":86},"OMP","\u002Fharnesses\u002Fomp","2.harnesses\u002F08.omp",{"title":88,"path":89,"stem":90},"Cursor","\u002Fharnesses\u002Fcursor","2.harnesses\u002F09.cursor",{"title":92,"path":93,"stem":94},"GitHub Copilot","\u002Fharnesses\u002Fgithub-copilot","2.harnesses\u002F10.github-copilot",{"title":96,"path":97,"stem":98},"Mastra Code","\u002Fharnesses\u002Fmastracode","2.harnesses\u002F11.mastracode",{"title":100,"path":101,"stem":102},"Freebuff","\u002Fharnesses\u002Ffreebuff","2.harnesses\u002F12.freebuff","i-solar-library-linear",{"id":105,"title":10,"body":106,"description":945,"extension":946,"links":947,"meta":948,"navigation":225,"path":6,"seo":949,"stem":7,"__hash__":950},"docs\u002F1.guide\u002F01.index.md",{"type":107,"value":108,"toc":936},"minimark",[109,117,122,135,142,146,171,174,178,381,407,411,526,540,544,547,775,811,815,854,867,871,932],[110,111,112,116],"warning",{},[113,114,115],"strong",{},"Pre-1.0."," The API and the tool list can still move, and so do the upstream CLIs the paths follow. Pin exact versions if you build on it now.",[118,119,121],"h2",{"id":120},"why-this-exists","Why this exists",[123,124,125,126,130,131,134],"p",{},"Every coding agent keeps its state somewhere slightly different. Claude Code writes JSONL transcripts under a dash-encoded copy of your working directory, Codex keeps TOML with comments you'd like to survive an edit, OpenCode puts one SQLite database under XDG on every platform, Gemini CLI has a ",[127,128,129],"code",{},"%PROGRAMDATA%"," path on Windows and nowhere else. Every tool that reads a session, adds an MCP server or looks for the right ",[127,132,133],{},"AGENTS.md"," needs that table, and a table kept in twelve heads is wrong in at least one of them.",[123,136,137,138,141],{},"So ",[127,139,140],{},"@agntn\u002Fharnesses"," writes it down once. Each harness is a class with the same fields, each path carries a scope and an evidence level, and the same object knows how to detect the harness, run a prompt through it headlessly, and edit its MCP list. Nothing is scanned or guessed at runtime. You get the table, expanded for your platform, and that's it.",[118,143,145],{"id":144},"install","Install",[147,148,153],"pre",{"className":149,"code":150,"language":151,"meta":152,"style":152},"language-bash shiki shiki-themes github-light github-light poimandres","pnpm add @agntn\u002Fharnesses\n","bash","",[127,154,155],{"__ignoreMap":152},[156,157,160,164,168],"span",{"class":158,"line":159},"line",1,[156,161,163],{"class":162},"sseY5","pnpm",[156,165,167],{"class":166},"sX7Zv"," add",[156,169,170],{"class":166}," @agntn\u002Fharnesses\n",[123,172,173],{},"Node 22 or newer. The package is ESM only.",[118,175,177],{"id":176},"first-call","First call",[147,179,184],{"className":180,"code":181,"filename":182,"language":183,"meta":152,"style":152},"language-ts shiki shiki-themes github-light github-light poimandres","import { getHarness } from \"@agntn\u002Fharnesses\";\n\nconst claude = getHarness(\"claude\");\n\nclaude.name; \u002F\u002F \"Anthropic Claude Code\"\nclaude.skills; \u002F\u002F [{ path: \".claude\u002Fskills\u002F\", scope: \"project\", level: \"official\" }, ...]\n\nconst paths = claude.resolve({ platform: \"linux\", homeDir: \"\u002Fhome\u002Fdev\" });\npaths.config[0]?.path; \u002F\u002F \"\u002Fhome\u002Fdev\u002F.claude\u002Fsettings.json\"\n","paths.ts","ts",[127,185,186,220,227,257,262,281,296,301,352],{"__ignoreMap":152},[156,187,188,192,196,200,203,207,211,214,217],{"class":158,"line":159},[156,189,191],{"class":190},"sP0CR","import",[156,193,195],{"class":194},"sKlNE"," {",[156,197,199],{"class":198},"snHMy"," getHarness",[156,201,202],{"class":194}," }",[156,204,206],{"class":205},"stCPd"," from",[156,208,210],{"class":209},"scVjq"," \"",[156,212,140],{"class":213},"sQ7BG",[156,215,216],{"class":209},"\"",[156,218,219],{"class":194},";\n",[156,221,223],{"class":158,"line":222},2,[156,224,226],{"emptyLinePlaceholder":225},true,"\n",[156,228,230,234,238,241,244,247,249,252,254],{"class":158,"line":229},3,[156,231,233],{"class":232},"s1TYA","const",[156,235,237],{"class":236},"saoiD"," claude",[156,239,240],{"class":232}," =",[156,242,199],{"class":243},"sULi6",[156,245,246],{"class":194},"(",[156,248,216],{"class":209},[156,250,251],{"class":213},"claude",[156,253,216],{"class":209},[156,255,256],{"class":194},");\n",[156,258,260],{"class":158,"line":259},4,[156,261,226],{"emptyLinePlaceholder":225},[156,263,265,268,271,274,277],{"class":158,"line":264},5,[156,266,251],{"class":267},"spVlQ",[156,269,270],{"class":194},".",[156,272,273],{"class":267},"name",[156,275,276],{"class":194},"; ",[156,278,280],{"class":279},"sjhu3","\u002F\u002F \"Anthropic Claude Code\"\n",[156,282,284,286,288,291,293],{"class":158,"line":283},6,[156,285,251],{"class":267},[156,287,270],{"class":194},[156,289,290],{"class":267},"skills",[156,292,276],{"class":194},[156,294,295],{"class":279},"\u002F\u002F [{ path: \".claude\u002Fskills\u002F\", scope: \"project\", level: \"official\" }, ...]\n",[156,297,299],{"class":158,"line":298},7,[156,300,226],{"emptyLinePlaceholder":225},[156,302,304,306,309,311,313,315,318,321,324,327,329,332,334,337,340,342,344,347,349],{"class":158,"line":303},8,[156,305,233],{"class":232},[156,307,308],{"class":236}," paths",[156,310,240],{"class":232},[156,312,237],{"class":267},[156,314,270],{"class":194},[156,316,317],{"class":243},"resolve",[156,319,320],{"class":194},"({",[156,322,323],{"class":198}," platform",[156,325,326],{"class":194},":",[156,328,210],{"class":209},[156,330,331],{"class":213},"linux",[156,333,216],{"class":209},[156,335,336],{"class":194},",",[156,338,339],{"class":198}," homeDir",[156,341,326],{"class":194},[156,343,210],{"class":209},[156,345,346],{"class":213},"\u002Fhome\u002Fdev",[156,348,216],{"class":209},[156,350,351],{"class":194}," });\n",[156,353,355,358,360,363,366,370,373,376,378],{"class":158,"line":354},9,[156,356,357],{"class":267},"paths",[156,359,270],{"class":194},[156,361,362],{"class":267},"config",[156,364,365],{"class":194},"[",[156,367,369],{"class":368},"siHFe","0",[156,371,372],{"class":194},"]?.",[156,374,375],{"class":267},"path",[156,377,276],{"class":194},[156,379,380],{"class":279},"\u002F\u002F \"\u002Fhome\u002Fdev\u002F.claude\u002Fsettings.json\"\n",[123,382,383,386,387,390,391,394,395,398,399,402,403,270],{},[127,384,385],{},"getHarness"," wants an exact id and throws on anything else. ",[127,388,389],{},"isHarnessId(value)"," narrows a string first, ",[127,392,393],{},"listHarnesses()"," gives you the ids, ",[127,396,397],{},"getAllHarnesses()"," the objects. Importing the package registers the twelve built-ins; ",[127,400,401],{},"registerHarness"," adds ",[404,405,406],"a",{"href":41},"yours",[118,408,410],{"id":409},"which-one-am-i-in","Which one am I in",[147,412,414],{"className":180,"code":413,"language":183,"meta":152,"style":152},"import { detectHarness, detectProjectHarnesses } from \"@agntn\u002Fharnesses\";\n\nconst active = detectHarness();\nactive?.id; \u002F\u002F \"claude\" when CLAUDE_CODE is set, null when nothing is unambiguous\n\ndetectProjectHarnesses(\"\u002Fsrv\u002Fapp\").map((h) => h.id); \u002F\u002F every harness with a marker in that directory\n",[127,415,416,442,446,460,476,480],{"__ignoreMap":152},[156,417,418,420,422,425,427,430,432,434,436,438,440],{"class":158,"line":159},[156,419,191],{"class":190},[156,421,195],{"class":194},[156,423,424],{"class":198}," detectHarness",[156,426,336],{"class":194},[156,428,429],{"class":198}," detectProjectHarnesses",[156,431,202],{"class":194},[156,433,206],{"class":205},[156,435,210],{"class":209},[156,437,140],{"class":213},[156,439,216],{"class":209},[156,441,219],{"class":194},[156,443,444],{"class":158,"line":222},[156,445,226],{"emptyLinePlaceholder":225},[156,447,448,450,453,455,457],{"class":158,"line":229},[156,449,233],{"class":232},[156,451,452],{"class":236}," active",[156,454,240],{"class":232},[156,456,424],{"class":243},[156,458,459],{"class":194},"();\n",[156,461,462,465,468,471,473],{"class":158,"line":259},[156,463,464],{"class":267},"active",[156,466,467],{"class":194},"?.",[156,469,470],{"class":267},"id",[156,472,276],{"class":194},[156,474,475],{"class":279},"\u002F\u002F \"claude\" when CLAUDE_CODE is set, null when nothing is unambiguous\n",[156,477,478],{"class":158,"line":264},[156,479,226],{"emptyLinePlaceholder":225},[156,481,482,485,487,489,492,494,497,500,503,507,510,513,516,518,520,523],{"class":158,"line":283},[156,483,484],{"class":243},"detectProjectHarnesses",[156,486,246],{"class":194},[156,488,216],{"class":209},[156,490,491],{"class":213},"\u002Fsrv\u002Fapp",[156,493,216],{"class":209},[156,495,496],{"class":194},").",[156,498,499],{"class":243},"map",[156,501,502],{"class":194},"((",[156,504,506],{"class":505},"s1jWp","h",[156,508,509],{"class":194},") ",[156,511,512],{"class":232},"=>",[156,514,515],{"class":267}," h",[156,517,270],{"class":194},[156,519,470],{"class":267},[156,521,522],{"class":194},"); ",[156,524,525],{"class":279},"\u002F\u002F every harness with a marker in that directory\n",[123,527,528,529,532,533,536,537,539],{},"Environment variables win, because being inside a harness is unambiguous. Without one, a single project marker decides; two harnesses with markers in the same directory give ",[127,530,531],{},"null",", not the first one. A ",[127,534,535],{},"CLAUDE.md"," next to an ",[127,538,133],{}," is the common case, and picking one there would be a lie.",[118,541,543],{"id":542},"the-shape","The shape",[123,545,546],{},"Every harness has these:",[548,549,550,566],"table",{},[551,552,553],"thead",{},[554,555,556,560,563],"tr",{},[557,558,559],"th",{},"Field",[557,561,562],{},"Type",[557,564,565],{},"What it holds",[567,568,569,599,641,656,688,708,726,741,756],"tbody",{},[554,570,571,582,593],{},[572,573,574,576,577,576,579],"td",{},[127,575,470],{},", ",[127,578,273],{},[127,580,581],{},"binaries",[572,583,584,576,587,576,590],{},[127,585,586],{},"HarnessId",[127,588,589],{},"string",[127,591,592],{},"string[]",[572,594,595,596],{},"Registry id, display name, executables searched on ",[127,597,598],{},"PATH",[554,600,601,619,624],{},[572,602,603,576,605,576,608,576,611,576,613,576,616],{},[127,604,362],{},[127,606,607],{},"sessions",[127,609,610],{},"instructions",[127,612,290],{},[127,614,615],{},"commands",[127,617,618],{},"hooks",[572,620,621],{},[127,622,623],{},"PathCandidate[]",[572,625,626,627,576,630,633,634,637,638],{},"Templates with ",[127,628,629],{},"scope",[127,631,632],{},"level",", optional ",[127,635,636],{},"platforms"," and ",[127,639,640],{},"note",[554,642,643,648,653],{},[572,644,645],{},[127,646,647],{},"persistence",[572,649,650],{},[127,651,652],{},"StorageDescriptor[]",[572,654,655],{},"Formats on disk: JSON, JSONL, TOML, SQLite, YAML, Protocol Buffers",[554,657,658,663,668],{},[572,659,660],{},[127,661,662],{},"capabilities",[572,664,665],{},[127,666,667],{},"HarnessCapabilities",[572,669,670,576,673,576,676,576,679,576,682,576,685],{},[127,671,672],{},"mcp",[127,674,675],{},"vision",[127,677,678],{},"audio",[127,680,681],{},"video",[127,683,684],{},"tools",[127,686,687],{},"streaming",[554,689,690,695,700],{},[572,691,692],{},[127,693,694],{},"detection",[572,696,697],{},[127,698,699],{},"HarnessDetection",[572,701,702,637,705],{},[127,703,704],{},"envVars",[127,706,707],{},"projectMarkers",[554,709,710,715,720],{},[572,711,712],{},[127,713,714],{},"invocation",[572,716,717],{},[127,718,719],{},"HarnessInvocation | null",[572,721,722,723,725],{},"Argument templates per mode, or ",[127,724,531],{}," without a headless CLI",[554,727,728,733,738],{},[572,729,730],{},[127,731,732],{},"modelListing",[572,734,735],{},[127,736,737],{},"HarnessModelListing | null",[572,739,740],{},"Native model listing command, when the CLI has one",[554,742,743,748,753],{},[572,744,745],{},[127,746,747],{},"mcpConfigs",[572,749,750],{},[127,751,752],{},"McpConfigFile[]",[572,754,755],{},"Config files that hold MCP servers, with format, key and dialect",[554,757,758,763,768],{},[572,759,760],{},[127,761,762],{},"agentsFile",[572,764,765],{},[127,766,767],{},"string | null",[572,769,770,771,774],{},"The one user scope instructions file that ",[127,772,773],{},"syncAgentsFiles"," links",[123,776,777,778,576,781,576,784,576,787,576,790,576,793,576,796,576,799,576,802,576,805,576,808,270],{},"And these methods: ",[127,779,780],{},"resolve(options)",[127,782,783],{},"detectEnv()",[127,785,786],{},"detectProject(cwd)",[127,788,789],{},"isInstalled()",[127,791,792],{},"version",[127,794,795],{},"invocationModes",[127,797,798],{},"buildInvocation(prompt, options)",[127,800,801],{},"invocationError(options)",[127,803,804],{},"invoke(prompt, options)",[127,806,807],{},"buildModelListInvocation(search)",[127,809,810],{},"listModels(options)",[118,812,814],{"id":813},"evidence","Evidence",[123,816,817,819,820,823,824,827,828,831,832,834,835,819,837,576,840,576,843,846,847,850,851,853],{},[127,818,632],{}," is ",[127,821,822],{},"official"," when the path comes from the CLI's documentation or source, ",[127,825,826],{},"community"," when it comes from a maintained outside source, ",[127,829,830],{},"inferred"," when someone reasoned it out from the others and hasn't verified it. ",[127,833,636],{}," is set only where a path differs by OS. ",[127,836,629],{},[127,838,839],{},"user",[127,841,842],{},"project",[127,844,845],{},"system"," or ",[127,848,849],{},"data",", and ",[127,852,849],{}," is where transcripts and databases live as opposed to settings you edit.",[123,855,856,857,860,861,846,864,866],{},"A ",[127,858,859],{},"false"," in ",[127,862,863],{},"capabilities.audio",[127,865,681],{}," means no native route into model context was verified, not that every provider and extension was disproved. The README lists the evidence for those two, harness by harness.",[118,868,870],{"id":869},"next","Next",[872,873,874,880,885,890,898,907,912,917,926],"ul",{},[875,876,877,879],"li",{},[404,878,12],{"href":13},": resolve, platforms, what the notes are for.",[875,881,882,884],{},[404,883,16],{"href":17},": six modes, timeouts, cancellation, models.",[875,886,887,889],{},[404,888,20],{"href":21},": one master list, every dialect.",[875,891,892,894,895,897],{},[404,893,24],{"href":25},": one ",[127,896,133],{}," behind every harness's global file.",[875,899,900,902,903,906],{},[404,901,28],{"href":29},": the ",[127,904,905],{},"harnesses"," command.",[875,908,909,911],{},[404,910,32],{"href":33},": nine tools over MCP, Pi and OMP.",[875,913,914,916],{},[404,915,36],{"href":37},": typed schemas for the transcript formats.",[875,918,919,921,922,925],{},[404,920,40],{"href":41},": extend ",[127,923,924],{},"Harness",", register it.",[875,927,928,931],{},[404,929,44],{"href":930},"\u002Fexplorer",": every path, expanded in the page.",[933,934,935],"style",{},"html pre.shiki code .sseY5, html code.shiki .sseY5{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#91B4D5}html pre.shiki code .sX7Zv, html code.shiki .sX7Zv{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#ADD7FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sP0CR, html code.shiki .sP0CR{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7}html pre.shiki code .sKlNE, html code.shiki .sKlNE{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#A6ACCD}html pre.shiki code .snHMy, html code.shiki .snHMy{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#ADD7FF}html pre.shiki code .stCPd, html code.shiki .stCPd{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#A6ACCD}html pre.shiki code .scVjq, html code.shiki .scVjq{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#A6ACCD}html pre.shiki code .sQ7BG, html code.shiki .sQ7BG{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#5DE4C7}html pre.shiki code .s1TYA, html code.shiki .s1TYA{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#91B4D5}html pre.shiki code .saoiD, html code.shiki .saoiD{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#E4F0FB}html pre.shiki code .sULi6, html code.shiki .sULi6{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#E4F0FBD0}html pre.shiki code .spVlQ, html code.shiki .spVlQ{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E4F0FB}html pre.shiki code .sjhu3, html code.shiki .sjhu3{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#767C9DB0;--shiki-dark-font-style:italic}html pre.shiki code .siHFe, html code.shiki .siHFe{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#5DE4C7}html pre.shiki code .s1jWp, html code.shiki .s1jWp{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#E4F0FB}",{"title":152,"searchDepth":222,"depth":222,"links":937},[938,939,940,941,942,943,944],{"id":120,"depth":222,"text":121},{"id":144,"depth":222,"text":145},{"id":176,"depth":222,"text":177},{"id":409,"depth":222,"text":410},{"id":542,"depth":222,"text":543},{"id":813,"depth":222,"text":814},{"id":869,"depth":222,"text":870},"Install, read one harness's paths, detect which agent you're inside. The shape every harness shares.","md",null,{"icon":47},{"title":10,"description":945},"w1OQ5CeyTp5rcwLUcBwCrRfF7UG4ijpXnC2gzhwXqkY",[947,952],{"title":12,"path":13,"stem":14,"description":953,"children":-1},"How resolve expands a template, what a platform tag hides, and why some paths carry a note.",1788622197668]