[{"data":1,"prerenderedAt":530},["ShallowReactive",2],{"-docs-guide-configuration":3,"-docs-guide-configuration-surround":518},{"id":4,"title":5,"body":6,"description":508,"extension":509,"links":510,"meta":511,"navigation":512,"path":514,"seo":515,"stem":516,"__hash__":517},"docs\u002Fdocs\u002F2.guide\u002F1.configuration.md","Configuration",{"type":7,"value":8,"toc":499},"minimark",[9,23,28,31,52,56,144,182,186,191,205,208,212,223,287,290,332,336,364,430,441,445,455,470,474,495],[10,11,12,13,17,18,22],"p",{},"The agent's entire local footprint is one TOML file: a server URL, a token reference, a project, and a list of ",[14,15,16],"code",{},"model_code → command"," bindings. ",[19,20,21],"strong",{},"Everything else is brain-side"," — methodology, buckets, passes, categories, fingerprint\u002Fdedupe config, all state.",[24,25,27],"h2",{"id":26},"locate-the-config-file","Locate the config file",[10,29,30],{},"Path resolution order:",[32,33,34,41,47],"ol",{},[35,36,37,40],"li",{},[14,38,39],{},"--config \u003Cpath>"," flag",[35,42,43,46],{},[14,44,45],{},"THESPIDER_CONFIG"," env var",[35,48,49],{},[14,50,51],{},"~\u002F.thespider\u002Fconfig.toml",[24,53,55],{"id":54},"write-a-minimal-config","Write a minimal config",[57,58,63],"pre",{"className":59,"code":60,"filename":51,"language":61,"meta":62,"style":62},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","server  = \"https:\u002F\u002Fthespider.xyz\"   # required. On-prem: your instance URL. Only mode coupling.\ntoken   = \"keychain:thespider\"         # optional; see \"Token storage\"\nproject = \"shipstream\u002Fthespider\"       # optional; else the token's single project is used\nconcurrency = 2                        # optional; parallel model runs (default 1)\n\n[[model]]\ncode    = \"sonnet\"                      # must match a server-side GET \u002Fv1\u002Fmodels code\ncommand = \"bash runners\u002Fopencode-runner.sh {prompt_path} anthropic\u002Fclaude-sonnet-4-6\"\ntimeout_seconds = 900                   # optional; falls back to the lease's advisory timeout\n\n[[model]]\ncode    = \"claude-cli\"\ncommand = \"claude --print \u003C {prompt_path}\"\n","toml","",[14,64,65,73,79,85,91,98,104,110,116,122,127,132,138],{"__ignoreMap":62},[66,67,70],"span",{"class":68,"line":69},"line",1,[66,71,72],{},"server  = \"https:\u002F\u002Fthespider.xyz\"   # required. On-prem: your instance URL. Only mode coupling.\n",[66,74,76],{"class":68,"line":75},2,[66,77,78],{},"token   = \"keychain:thespider\"         # optional; see \"Token storage\"\n",[66,80,82],{"class":68,"line":81},3,[66,83,84],{},"project = \"shipstream\u002Fthespider\"       # optional; else the token's single project is used\n",[66,86,88],{"class":68,"line":87},4,[66,89,90],{},"concurrency = 2                        # optional; parallel model runs (default 1)\n",[66,92,94],{"class":68,"line":93},5,[66,95,97],{"emptyLinePlaceholder":96},true,"\n",[66,99,101],{"class":68,"line":100},6,[66,102,103],{},"[[model]]\n",[66,105,107],{"class":68,"line":106},7,[66,108,109],{},"code    = \"sonnet\"                      # must match a server-side GET \u002Fv1\u002Fmodels code\n",[66,111,113],{"class":68,"line":112},8,[66,114,115],{},"command = \"bash runners\u002Fopencode-runner.sh {prompt_path} anthropic\u002Fclaude-sonnet-4-6\"\n",[66,117,119],{"class":68,"line":118},9,[66,120,121],{},"timeout_seconds = 900                   # optional; falls back to the lease's advisory timeout\n",[66,123,125],{"class":68,"line":124},10,[66,126,97],{"emptyLinePlaceholder":96},[66,128,130],{"class":68,"line":129},11,[66,131,103],{},[66,133,135],{"class":68,"line":134},12,[66,136,137],{},"code    = \"claude-cli\"\n",[66,139,141],{"class":68,"line":140},13,[66,142,143],{},"command = \"claude --print \u003C {prompt_path}\"\n",[145,146,147,150,151,155,156,159,160,159,163,159,166,169,170,173,174,177,178,181],"caution",{},[19,148,149],{},"TOML ordering gotcha."," TOML binds a bare key to the ",[152,153,154],"em",{},"most recent"," table. Put all root scalars (",[14,157,158],{},"server",", ",[14,161,162],{},"token",[14,164,165],{},"project",[14,167,168],{},"concurrency",") ",[19,171,172],{},"before"," the first ",[14,175,176],{},"[[model]]"," block, otherwise a trailing ",[14,179,180],{},"concurrency = 2"," is parsed as a field of the last model, not the root.",[24,183,185],{"id":184},"resolve-the-project","Resolve the project",[10,187,188,190],{},[14,189,165],{}," accepts:",[192,193,194,199,202],"ul",{},[35,195,196],{},[14,197,198],{},"org-slug\u002Fproject-slug",[35,200,201],{},"a bare project slug",[35,203,204],{},"a numeric id",[10,206,207],{},"If omitted, the token's single project is used.",[24,209,211],{"id":210},"substitute-command-variables","Substitute command variables",[10,213,214,215,218,219,222],{},"Each model ",[14,216,217],{},"command"," is a template. These variables are substituted and ",[19,220,221],{},"POSIX-single-quoted",":",[224,225,226,239],"table",{},[227,228,229],"thead",{},[230,231,232,236],"tr",{},[233,234,235],"th",{},"Variable",[233,237,238],{},"Value",[240,241,242,253,267,277],"tbody",{},[230,243,244,250],{},[245,246,247],"td",{},[14,248,249],{},"{prompt_path}",[245,251,252],{},"absolute path to the rendered prompt written to a private temp file",[230,254,255,260],{},[245,256,257],{},[14,258,259],{},"{target_path}",[245,261,262,263,266],{},"the repo checkout root (",[14,264,265],{},"--target-path",", else the git top-level, else cwd)",[230,268,269,274],{},[245,270,271],{},[14,272,273],{},"{model_code}",[245,275,276],{},"the slice's model code",[230,278,279,284],{},[245,280,281],{},[14,282,283],{},"{slice_id}",[245,285,286],{},"the slice id",[10,288,289],{},"Rules:",[192,291,292,315],{},[35,293,294,295,298,299,302,303,306,307,310,311,314],{},"An ",[19,296,297],{},"unknown"," ",[14,300,301],{},"{variable}"," is a hard error naming the variable. (",[14,304,305],{},"{thespider_dir}"," \u002F ",[14,308,309],{},"{workspace_path}"," from the legacy CLI do ",[19,312,313],{},"not"," exist here.)",[35,316,317,318,321,322,159,325,159,328,331],{},"A ",[14,319,320],{},"{...}"," that is not a valid identifier (e.g. ",[14,323,324],{},"{}",[14,326,327],{},"{1x}",[14,329,330],{},"{a-b}",") is left literal.",[24,333,335],{"id":334},"store-the-token","Store the token",[10,337,338,341,342,345,346,349,350,356,357,360,361,363],{},[14,339,340],{},"login"," stores the enrolled token in the ",[19,343,344],{},"OS keychain"," (",[14,347,348],{},"keyring",") when a keychain service is available, otherwise in a ",[19,351,352,355],{},[14,353,354],{},"0600"," token file"," next to the config (",[14,358,359],{},"\u003Cconfig-dir>\u002Ftoken",") — the headless-Linux \u002F CI path. Resolution follows the config ",[14,362,162],{}," reference:",[224,365,366,378],{},[227,367,368],{},[230,369,370,375],{},[233,371,372,374],{},[14,373,162],{}," value",[233,376,377],{},"behaviour",[240,379,380,397,407,417],{},[230,381,382,390],{},[245,383,384,306,387],{},[152,385,386],{},"(omitted)",[14,388,389],{},"keychain",[245,391,392,393,396],{},"keychain service ",[14,394,395],{},"thespider",", else the token file",[230,398,399,404],{},[245,400,401],{},[14,402,403],{},"keychain:\u003Cservice>",[245,405,406],{},"that keychain service, else the token file",[230,408,409,414],{},[245,410,411],{},[14,412,413],{},"env:THESPIDER_TOKEN",[245,415,416],{},"read from the named environment variable",[230,418,419,424],{},[245,420,421],{},[14,422,423],{},"\u003Cliteral token>",[245,425,426,427,429],{},"used verbatim (nothing for ",[14,428,340],{}," to manage)",[10,431,432,433,436,437,440],{},"Set ",[14,434,435],{},"THESPIDER_NO_KEYCHAIN=1"," to ",[19,438,439],{},"force the token-file fallback"," — deterministic on headless hosts. The keychain \"account\" is the server URL, so multiple servers can share one keychain service.",[24,442,444],{"id":443},"author-methodology-in-the-web-ui","Author methodology in the web UI",[10,446,447,448,345,451,454],{},"Buckets, passes, categories, and prompt sections are ",[19,449,450],{},"server-authored and versioned",[14,452,453],{},"config_versions","). Each save becomes a new immutable version; campaigns pin the version they started with, so in-flight work renders from the methodology it began with. On-prem instances pull methodology updates from the mothership using the license JWT as auth, and every image release bundles a snapshot for air-gapped installs.",[10,456,457,458,461,462,465,466,469],{},"The default project is ",[19,459,460],{},"campaign-ready at first boot"," — the image bundles a default methodology snapshot seeded as ",[14,463,464],{},"config_version"," 1 with the ",[14,467,468],{},"sonnet"," model enabled.",[24,471,473],{"id":472},"next-steps","Next steps",[192,475,476,488],{},[35,477,478,483,484,487],{},[479,480,482],"a",{"href":481},"\u002Fdocs\u002Fguide\u002Fagent","Run the agent"," — every ",[14,485,486],{},"thespider-agent"," command.",[35,489,490,494],{},[479,491,493],{"href":492},"\u002Fdocs\u002Freference\u002Fenv-vars","Environment reference"," — server-side knobs.",[496,497,498],"style",{},"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);}",{"title":62,"searchDepth":75,"depth":75,"links":500},[501,502,503,504,505,506,507],{"id":26,"depth":75,"text":27},{"id":54,"depth":75,"text":55},{"id":184,"depth":75,"text":185},{"id":210,"depth":75,"text":211},{"id":334,"depth":75,"text":335},{"id":443,"depth":75,"text":444},{"id":472,"depth":75,"text":473},"Configure the TheSpider agent and its model command bindings","md",null,{},{"icon":513},"i-lucide-settings","\u002Fdocs\u002Fguide\u002Fconfiguration",{"title":5,"description":508},"docs\u002F2.guide\u002F1.configuration","DGe1Cjfu9RtorD4whDWQpjLfjrjQmrqmDgO5KLNDPi8",[519,525],{"title":520,"path":521,"stem":522,"description":523,"icon":524,"children":-1},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002F1.getting-started\u002F4.quickstart","Run your first TheSpider audit end-to-end","i-lucide-zap",{"title":526,"path":481,"stem":527,"description":528,"icon":529,"children":-1},"The agent","docs\u002F2.guide\u002F2.agent","Run the TheSpider Rust agent to claim slices, run models, and gate PRs","i-lucide-terminal",1783955419458]