[{"data":1,"prerenderedAt":447},["ShallowReactive",2],{"-docs-getting-started-quickstart":3,"-docs-getting-started-quickstart-surround":436},{"id":4,"title":5,"body":6,"description":426,"extension":427,"links":428,"meta":429,"navigation":430,"path":432,"seo":433,"stem":434,"__hash__":435},"docs\u002Fdocs\u002F1.getting-started\u002F4.quickstart.md","Quickstart",{"type":7,"value":8,"toc":416},"minimark",[9,19,378,383,412],[10,11,12,13,18],"p",{},"This quickstart runs a full audit against a local repo using a deterministic fake model, then checks the gate. It assumes you have ",[14,15,17],"a",{"href":16},"\u002Fdocs\u002Fgetting-started\u002Finstallation","installed"," the server and built the agent.",[20,21,22,27,96,100,103,136,140,151,205,236,240,268,286,290,312,326,330,363,367],"steps",{},[23,24,26],"h3",{"id":25},"start-the-server","Start the server",[28,29,35],"pre",{"className":30,"code":31,"filename":32,"language":33,"meta":34,"style":34},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cd server && bun install\ndocker compose up -d && bun run migrate && bun run serve\n","server\u002F","bash","",[36,37,38,62],"code",{"__ignoreMap":34},[39,40,43,47,51,55,59],"span",{"class":41,"line":42},"line",1,[39,44,46],{"class":45},"s2Zo4","cd",[39,48,50],{"class":49},"sfazB"," server",[39,52,54],{"class":53},"sMK4o"," &&",[39,56,58],{"class":57},"sBMFI"," bun",[39,60,61],{"class":49}," install\n",[39,63,65,68,71,74,77,79,81,84,87,89,91,93],{"class":41,"line":64},2,[39,66,67],{"class":57},"docker",[39,69,70],{"class":49}," compose",[39,72,73],{"class":49}," up",[39,75,76],{"class":49}," -d",[39,78,54],{"class":53},[39,80,58],{"class":57},[39,82,83],{"class":49}," run",[39,85,86],{"class":49}," migrate",[39,88,54],{"class":53},[39,90,58],{"class":57},[39,92,83],{"class":49},[39,94,95],{"class":49}," serve\n",[23,97,99],{"id":98},"mint-an-enrollment-code","Mint an enrollment code",[10,101,102],{},"Enrollment codes are single-use and short-lived. Mint one for the default project:",[28,104,106],{"className":30,"code":105,"filename":32,"language":33,"meta":34,"style":34},"bun run src\u002Fmint-enrollment-code.ts --org default --project default\n# copy the printed `code:` value\n",[36,107,108,130],{"__ignoreMap":34},[39,109,110,113,115,118,121,124,127],{"class":41,"line":42},[39,111,112],{"class":57},"bun",[39,114,83],{"class":49},[39,116,117],{"class":49}," src\u002Fmint-enrollment-code.ts",[39,119,120],{"class":49}," --org",[39,122,123],{"class":49}," default",[39,125,126],{"class":49}," --project",[39,128,129],{"class":49}," default\n",[39,131,132],{"class":41,"line":64},[39,133,135],{"class":134},"sHwdD","# copy the printed `code:` value\n",[23,137,139],{"id":138},"point-the-agent-at-the-server","Point the agent at the server",[10,141,142,143,146,147,150],{},"Create ",[36,144,145],{},"~\u002F.thespider\u002Fconfig.toml",". For local dev use the deterministic ",[36,148,149],{},"fake-model.ts"," so you don't need real model credentials:",[28,152,156],{"className":153,"code":154,"filename":145,"language":155,"meta":34,"style":34},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","server  = \"http:\u002F\u002Flocalhost:8080\"\ntoken   = \"keychain:thespider\"\nproject = \"default\"\n\n[[model]]\ncode    = \"sonnet\"\ncommand = \"bun run ..\u002Ffake-model.ts {prompt_path}\"\ntimeout_seconds = 120\n","toml",[36,157,158,163,168,174,181,187,193,199],{"__ignoreMap":34},[39,159,160],{"class":41,"line":42},[39,161,162],{},"server  = \"http:\u002F\u002Flocalhost:8080\"\n",[39,164,165],{"class":41,"line":64},[39,166,167],{},"token   = \"keychain:thespider\"\n",[39,169,171],{"class":41,"line":170},3,[39,172,173],{},"project = \"default\"\n",[39,175,177],{"class":41,"line":176},4,[39,178,180],{"emptyLinePlaceholder":179},true,"\n",[39,182,184],{"class":41,"line":183},5,[39,185,186],{},"[[model]]\n",[39,188,190],{"class":41,"line":189},6,[39,191,192],{},"code    = \"sonnet\"\n",[39,194,196],{"class":41,"line":195},7,[39,197,198],{},"command = \"bun run ..\u002Ffake-model.ts {prompt_path}\"\n",[39,200,202],{"class":41,"line":201},8,[39,203,204],{},"timeout_seconds = 120\n",[206,207,208,209,213,214,217,218,217,221,217,224,227,228,231,232,235],"warning",{},"TOML binds a bare key to the ",[210,211,212],"strong",{},"most recent"," table. Put every root scalar (",[36,215,216],{},"server",", ",[36,219,220],{},"token",[36,222,223],{},"project",[36,225,226],{},"concurrency",") ",[210,229,230],{},"before"," the first ",[36,233,234],{},"[[model]]"," block, or a trailing key is silently parsed as a field of the last model.",[23,237,239],{"id":238},"enroll-the-agent","Enroll the agent",[28,241,243],{"className":30,"code":242,"language":33,"meta":34,"style":34},"echo \"\u003Ccode>\" | thespider-agent login\n",[36,244,245],{"__ignoreMap":34},[39,246,247,250,253,256,259,262,265],{"class":41,"line":42},[39,248,249],{"class":45},"echo",[39,251,252],{"class":53}," \"",[39,254,255],{"class":49},"\u003Ccode>",[39,257,258],{"class":53},"\"",[39,260,261],{"class":53}," |",[39,263,264],{"class":57}," thespider-agent",[39,266,267],{"class":49}," login\n",[10,269,270,273,274,277,278,281,282,285],{},[36,271,272],{},"login"," opens ",[36,275,276],{},"\u003Cserver>\u002Factivate",", reads the enrollment code from stdin, and stores the client token in the ",[210,279,280],{},"OS keychain"," (or a ",[36,283,284],{},"0600"," token file on headless hosts).",[23,287,289],{"id":288},"run-the-audit","Run the audit",[28,291,293],{"className":30,"code":292,"language":33,"meta":34,"style":34},"cd \u002Fpath\u002Fto\u002Fyour\u002Frepo\nthespider-agent run --once\n",[36,294,295,302],{"__ignoreMap":34},[39,296,297,299],{"class":41,"line":42},[39,298,46],{"class":45},[39,300,301],{"class":49}," \u002Fpath\u002Fto\u002Fyour\u002Frepo\n",[39,303,304,307,309],{"class":41,"line":64},[39,305,306],{"class":57},"thespider-agent",[39,308,83],{"class":49},[39,310,311],{"class":49}," --once\n",[10,313,314,317,318,321,322,325],{},[36,315,316],{},"run --once"," claims a batch of slices, writes each prompt to a temp file, spawns the model command via ",[36,319,320],{},"sh -c",", heartbeats the lease, and POSTs the raw stdout to ",[36,323,324],{},"\u002Fv1\u002Fleases\u002F{id}\u002Fresults",".",[23,327,329],{"id":328},"check-the-gate","Check the gate",[28,331,333],{"className":30,"code":332,"language":33,"meta":34,"style":34},"thespider-agent gate --campaign \u003Cid>\n# exit 0 = pass, 1 = fail (new findings), 2 = pending\n",[36,334,335,358],{"__ignoreMap":34},[39,336,337,339,342,345,348,351,355],{"class":41,"line":42},[39,338,306],{"class":57},[39,340,341],{"class":49}," gate",[39,343,344],{"class":49}," --campaign",[39,346,347],{"class":53}," \u003C",[39,349,350],{"class":49},"i",[39,352,354],{"class":353},"sTEyZ","d",[39,356,357],{"class":53},">\n",[39,359,360],{"class":41,"line":64},[39,361,362],{"class":134},"# exit 0 = pass, 1 = fail (new findings), 2 = pending\n",[23,364,366],{"id":365},"view-findings-in-the-web-ui","View findings in the web UI",[10,368,369,370,373,374,377],{},"Open ",[36,371,372],{},"http:\u002F\u002Flocalhost:8080\u002F"," — findings are parsed, fingerprinted, deduped, and ready to triage. Project-level identity means statuses you set on ",[36,375,376],{},"main"," carry over to PR branches.",[379,380,382],"h2",{"id":381},"next-steps","Next steps",[384,385,386,398,405],"ul",{},[387,388,389,393,394,397],"li",{},[14,390,392],{"href":391},"\u002Fdocs\u002Fguide\u002Fconfiguration","Configure the agent"," — every ",[36,395,396],{},"config.toml"," option.",[387,399,400,404],{},[14,401,403],{"href":402},"\u002Fdocs\u002Fguide\u002Fcampaigns","Campaigns"," — full, incremental, and retest semantics.",[387,406,407,411],{},[14,408,410],{"href":409},"\u002Fdocs\u002Fguide\u002Fpr-gate","PR gate"," — wire up the forge webhook + daemon pattern.",[413,414,415],"style",{},"html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":34,"searchDepth":64,"depth":64,"links":417},[418,419,420,421,422,423,424,425],{"id":25,"depth":170,"text":26},{"id":98,"depth":170,"text":99},{"id":138,"depth":170,"text":139},{"id":238,"depth":170,"text":239},{"id":288,"depth":170,"text":289},{"id":328,"depth":170,"text":329},{"id":365,"depth":170,"text":366},{"id":381,"depth":64,"text":382},"Run your first TheSpider audit end-to-end","md",null,{},{"icon":431},"i-lucide-zap","\u002Fdocs\u002Fgetting-started\u002Fquickstart",{"title":5,"description":426},"docs\u002F1.getting-started\u002F4.quickstart","N7h5KgF7pxeEfZspIn-44p8RQSIq2jskkilqTfvWiaI",[437,442],{"title":438,"path":16,"stem":439,"description":440,"icon":441,"children":-1},"Installation","docs\u002F1.getting-started\u002F3.installation","How to install TheSpider — the brain server, the web UI, and the Rust agent","i-lucide-download",{"title":443,"path":391,"stem":444,"description":445,"icon":446,"children":-1},"Configuration","docs\u002F2.guide\u002F1.configuration","Configure the TheSpider agent and its model command bindings","i-lucide-settings",1783955419117]