[{"data":1,"prerenderedAt":1194},["ShallowReactive",2],{"page-\u002Fworkflows\u002Fdecisions":3,"all-pages":859},{"id":4,"title":5,"body":6,"description":850,"extension":851,"meta":852,"navigation":829,"path":853,"robots":854,"seo":855,"sitemap":856,"stem":857,"__hash__":858},"content\u002F01.workflows\u002F10.decisions.md","Decisions",{"type":7,"value":8,"toc":841},"minimark",[9,18,24,101,224,228,235,255,289,292,296,301,340,348,352,360,399,405,414,418,424,656,659,668,672,675,692,695,699,837],[10,11,12,13,17],"p",{},"Some steps cannot be expressed as a shell command or a transform. Deciding\nwhether a finding is in scope, ranking leads, or choosing the next action needs\njudgement over messy input. ",[14,15,16],"code",{},"step.decision"," makes that judgement an explicit,\ntyped step: it declares an input state, one or more named questions, a provider,\nand where the validated result is written.",[19,20,22],"h2",{"id":21},"stepdecision",[14,23,16],{},[25,26,31],"pre",{"className":27,"code":28,"language":29,"meta":30,"style":30},"language-bhw shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","step.decision(\n    state = path.file(\"findings.json\"),\n    questions = {\n        \"relevant\": decision.noul(\"Is this finding relevant?\"),\n        \"severity\": decision.choice(\"Severity?\", options = [\"low\", \"medium\", \"high\"]),\n        \"priority\": decision.score(\"Priority?\", min = 0, max = 3),\n    },\n    provider = \"jevos\",\n    endpoint = config.var(\"jevos_endpoint\"),\n    output = path.file(\"decision.json\"),\n)\n","bhw","",[14,32,33,41,47,53,59,65,71,77,83,89,95],{"__ignoreMap":30},[34,35,38],"span",{"class":36,"line":37},"line",1,[34,39,40],{},"step.decision(\n",[34,42,44],{"class":36,"line":43},2,[34,45,46],{},"    state = path.file(\"findings.json\"),\n",[34,48,50],{"class":36,"line":49},3,[34,51,52],{},"    questions = {\n",[34,54,56],{"class":36,"line":55},4,[34,57,58],{},"        \"relevant\": decision.noul(\"Is this finding relevant?\"),\n",[34,60,62],{"class":36,"line":61},5,[34,63,64],{},"        \"severity\": decision.choice(\"Severity?\", options = [\"low\", \"medium\", \"high\"]),\n",[34,66,68],{"class":36,"line":67},6,[34,69,70],{},"        \"priority\": decision.score(\"Priority?\", min = 0, max = 3),\n",[34,72,74],{"class":36,"line":73},7,[34,75,76],{},"    },\n",[34,78,80],{"class":36,"line":79},8,[34,81,82],{},"    provider = \"jevos\",\n",[34,84,86],{"class":36,"line":85},9,[34,87,88],{},"    endpoint = config.var(\"jevos_endpoint\"),\n",[34,90,92],{"class":36,"line":91},10,[34,93,94],{},"    output = path.file(\"decision.json\"),\n",[34,96,98],{"class":36,"line":97},11,[34,99,100],{},")\n",[102,103,104,117],"table",{},[105,106,107],"thead",{},[108,109,110,114],"tr",{},[111,112,113],"th",{},"Parameter",[111,115,116],{},"Meaning",[118,119,120,135,149,167,180,197,211],"tbody",{},[108,121,122,128],{},[123,124,125],"td",{},[14,126,127],{},"state",[123,129,130,131,134],{},"Input document the decision is made over (",[14,132,133],{},"path.file(...)","), read at execution time and treated as untrusted data",[108,136,137,142],{},[123,138,139],{},[14,140,141],{},"questions",[123,143,144,145,148],{},"Ordered ",[14,146,147],{},"{name: decision_question}"," mapping; names are unique",[108,150,151,156],{},[123,152,153],{},[14,154,155],{},"provider",[123,157,158,159,162,163,166],{},"Optional decision provider: ",[14,160,161],{},"\"jevos\""," (the default) for the built-in live server, or ",[14,164,165],{},"\"mock\""," for the deterministic in-process provider",[108,168,169,174],{},[123,170,171],{},[14,172,173],{},"output",[123,175,176,177,179],{},"Where the validated result document is written (",[14,178,133],{},")",[108,181,182,187],{},[123,183,184],{},[14,185,186],{},"endpoint",[123,188,189,190,193,194,179],{},"jevos endpoint, often ",[14,191,192],{},"config.var(...)"," (default local server: ",[14,195,196],{},"http:\u002F\u002F127.0.0.1:8017\u002Fv1\u002Fsystemone",[108,198,199,204],{},[123,200,201],{},[14,202,203],{},"api_key",[123,205,206,207,210],{},"Optional jevos API key; must be a ",[14,208,209],{},"config.secret(...)"," reference",[108,212,213,218],{},[123,214,215],{},[14,216,217],{},"model",[123,219,220,221,179],{},"Optional jevos model alias (default ",[14,222,223],{},"jev-latest",[19,225,227],{"id":226},"question-types","Question types",[10,229,230,231,234],{},"Questions are created with the ",[14,232,233],{},"decision"," namespace and carry their own\nvalidation rules:",[25,236,238],{"className":27,"code":237,"language":29,"meta":30,"style":30},"decision.noul(\"Is this finding relevant?\")\ndecision.choice(\"Severity?\", options = [\"low\", \"medium\", \"high\"])\ndecision.score(\"Priority?\", min = 0, max = 3)\n",[14,239,240,245,250],{"__ignoreMap":30},[34,241,242],{"class":36,"line":37},[34,243,244],{},"decision.noul(\"Is this finding relevant?\")\n",[34,246,247],{"class":36,"line":43},[34,248,249],{},"decision.choice(\"Severity?\", options = [\"low\", \"medium\", \"high\"])\n",[34,251,252],{"class":36,"line":49},[34,253,254],{},"decision.score(\"Priority?\", min = 0, max = 3)\n",[256,257,258,269,275],"ul",{},[259,260,261,264,265,268],"li",{},[14,262,263],{},"noul"," is binary: jevos returns P(yes), the answer is ",[14,266,267],{},"P(yes) >= 0.5",", and\nthe probability is carried through as the reported confidence.",[259,270,271,274],{},[14,272,273],{},"choice"," requires a non-empty list of unique, non-empty options; the answer\nmust be one of them.",[259,276,277,280,281,284,285,288],{},[14,278,279],{},"score"," requires ordered bounds (",[14,282,283],{},"min"," must not exceed ",[14,286,287],{},"max","); the answer must\nbe an integer inside them.",[10,290,291],{},"Invalid definitions are rejected when the workflow is parsed. Invalid provider\nanswers are rejected at execution time, before anything is written.",[19,293,295],{"id":294},"inputs-and-credentials","Inputs and credentials",[10,297,298,300],{},[14,299,127],{}," is a file and is always treated as data, never as instructions. Provider\nconfiguration is referenced, never embedded:",[25,302,304],{"className":27,"code":303,"language":29,"meta":30,"style":30},"step.decision(\n    state = path.file(\"findings.json\"),\n    questions = {\"relevant\": decision.noul(\"Is this finding relevant?\")},\n    provider = \"jevos\",\n    endpoint = config.var(\"jevos_endpoint\"),\n    api_key = config.secret(\"jevos_api_key\"),\n    output = path.file(\"decision.json\"),\n)\n",[14,305,306,310,314,319,323,327,332,336],{"__ignoreMap":30},[34,307,308],{"class":36,"line":37},[34,309,40],{},[34,311,312],{"class":36,"line":43},[34,313,46],{},[34,315,316],{"class":36,"line":49},[34,317,318],{},"    questions = {\"relevant\": decision.noul(\"Is this finding relevant?\")},\n",[34,320,321],{"class":36,"line":55},[34,322,82],{},[34,324,325],{"class":36,"line":61},[34,326,88],{},[34,328,329],{"class":36,"line":67},[34,330,331],{},"    api_key = config.secret(\"jevos_api_key\"),\n",[34,333,334],{"class":36,"line":73},[34,335,94],{},[34,337,338],{"class":36,"line":79},[34,339,100],{},[10,341,342,344,345,347],{},[14,343,203],{}," accepts only a ",[14,346,209],{}," reference; literal credentials are\nrejected so they can never enter the serialized workflow definition. Endpoints\nand keys are resolved at execution time and are not written to the result\ndocument.",[19,349,351],{"id":350},"providers","Providers",[10,353,354,356,357,359],{},[14,355,155],{}," is optional and selects the decision implementation; it defaults to\n",[14,358,161],{},". Two providers ship, and the platform standardizes on them:",[256,361,362,394],{},[259,363,364,366,367,374,375,377,378,380,381,383,384,386,387,390,391,393],{},[14,365,161],{}," is the built-in live provider: a self-hosted\n",[368,369,373],"a",{"href":370,"rel":371},"https:\u002F\u002Fgithub.com\u002Ffeder-cr\u002Fjev",[372],"nofollow","jevos"," decision server, reached over HTTP at\n",[14,376,186],{}," (default ",[14,379,196],{},"). jevos answers\nyes\u002Fno (",[14,382,263],{},"), multiple-choice, and score questions on a laptop CPU and\nreturns a probability for each answer. Point ",[14,385,186],{}," at your jevos instance\nand, if you set ",[14,388,389],{},"JEV_API_KEY"," on it, supply the same key through\n",[14,392,209],{},".",[259,395,396,398],{},[14,397,165],{}," is deterministic and in-process. It needs no endpoint or credential\nand is what the test suite uses, so decision steps stay hermetic.",[10,400,401,402,404],{},"Adding a provider is a code change, not a configuration value: the engine\nrejects any other ",[14,403,155],{}," name rather than implying a provider zoo.",[10,406,407,408,410,411,413],{},"Two jevos limits surface as parse-time or step errors: a ",[14,409,273],{}," needs 2–26\noptions and a ",[14,412,279],{}," needs 2–10 levels, so keep score bounds within a ten-point\nspan.",[19,415,417],{"id":416},"the-result-document","The result document",[10,419,420,421,423],{},"The validated result is written to ",[14,422,173],{}," as JSON: a mapping from question\nname to a typed answer.",[25,425,429],{"className":426,"code":427,"language":428,"meta":30,"style":30},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"answers\": {\n    \"relevant\": {\"type\": \"noul\", \"value\": true, \"probability\": 0.82},\n    \"severity\": {\"type\": \"choice\", \"value\": \"high\"},\n    \"priority\": {\"type\": \"score\", \"value\": 2}\n  },\n  \"order\": [\"relevant\", \"severity\", \"priority\"]\n}\n","json",[14,430,431,437,455,519,565,608,613,652],{"__ignoreMap":30},[34,432,433],{"class":36,"line":37},[34,434,436],{"class":435},"sMK4o","{\n",[34,438,439,442,446,449,452],{"class":36,"line":43},[34,440,441],{"class":435},"  \"",[34,443,445],{"class":444},"spNyl","answers",[34,447,448],{"class":435},"\"",[34,450,451],{"class":435},":",[34,453,454],{"class":435}," {\n",[34,456,457,460,464,466,468,471,473,477,479,481,484,487,489,492,494,497,499,501,504,506,509,511,513,516],{"class":36,"line":49},[34,458,459],{"class":435},"    \"",[34,461,463],{"class":462},"sBMFI","relevant",[34,465,448],{"class":435},[34,467,451],{"class":435},[34,469,470],{"class":435}," {",[34,472,448],{"class":435},[34,474,476],{"class":475},"sbssI","type",[34,478,448],{"class":435},[34,480,451],{"class":435},[34,482,483],{"class":435}," \"",[34,485,263],{"class":486},"sfazB",[34,488,448],{"class":435},[34,490,491],{"class":435},",",[34,493,483],{"class":435},[34,495,496],{"class":475},"value",[34,498,448],{"class":435},[34,500,451],{"class":435},[34,502,503],{"class":435}," true,",[34,505,483],{"class":435},[34,507,508],{"class":475},"probability",[34,510,448],{"class":435},[34,512,451],{"class":435},[34,514,515],{"class":475}," 0.82",[34,517,518],{"class":435},"},\n",[34,520,521,523,526,528,530,532,534,536,538,540,542,544,546,548,550,552,554,556,558,561,563],{"class":36,"line":55},[34,522,459],{"class":435},[34,524,525],{"class":462},"severity",[34,527,448],{"class":435},[34,529,451],{"class":435},[34,531,470],{"class":435},[34,533,448],{"class":435},[34,535,476],{"class":475},[34,537,448],{"class":435},[34,539,451],{"class":435},[34,541,483],{"class":435},[34,543,273],{"class":486},[34,545,448],{"class":435},[34,547,491],{"class":435},[34,549,483],{"class":435},[34,551,496],{"class":475},[34,553,448],{"class":435},[34,555,451],{"class":435},[34,557,483],{"class":435},[34,559,560],{"class":486},"high",[34,562,448],{"class":435},[34,564,518],{"class":435},[34,566,567,569,572,574,576,578,580,582,584,586,588,590,592,594,596,598,600,602,605],{"class":36,"line":61},[34,568,459],{"class":435},[34,570,571],{"class":462},"priority",[34,573,448],{"class":435},[34,575,451],{"class":435},[34,577,470],{"class":435},[34,579,448],{"class":435},[34,581,476],{"class":475},[34,583,448],{"class":435},[34,585,451],{"class":435},[34,587,483],{"class":435},[34,589,279],{"class":486},[34,591,448],{"class":435},[34,593,491],{"class":435},[34,595,483],{"class":435},[34,597,496],{"class":475},[34,599,448],{"class":435},[34,601,451],{"class":435},[34,603,604],{"class":475}," 2",[34,606,607],{"class":435},"}\n",[34,609,610],{"class":36,"line":67},[34,611,612],{"class":435},"  },\n",[34,614,615,617,620,622,624,627,629,631,633,635,637,639,641,643,645,647,649],{"class":36,"line":73},[34,616,441],{"class":435},[34,618,619],{"class":444},"order",[34,621,448],{"class":435},[34,623,451],{"class":435},[34,625,626],{"class":435}," [",[34,628,448],{"class":435},[34,630,463],{"class":486},[34,632,448],{"class":435},[34,634,491],{"class":435},[34,636,483],{"class":435},[34,638,525],{"class":486},[34,640,448],{"class":435},[34,642,491],{"class":435},[34,644,483],{"class":435},[34,646,571],{"class":486},[34,648,448],{"class":435},[34,650,651],{"class":435},"]\n",[34,653,654],{"class":36,"line":79},[34,655,607],{"class":435},[10,657,658],{},"Downstream steps consume the file like any other workspace artifact:",[25,660,662],{"className":27,"code":661,"language":29,"meta":30,"style":30},"step.exec(command = [\"jq\", \"-r\", \".answers.severity.value\", \"decision.json\"])\n",[14,663,664],{"__ignoreMap":30},[34,665,666],{"class":36,"line":37},[34,667,661],{},[19,669,671],{"id":670},"trust-boundary","Trust boundary",[10,673,674],{},"A decision result is model-produced data, not proof. Every answer is validated\nagainst the question that produced it before the document is written, but:",[256,676,677,683],{},[259,678,679,680,682],{},"a self-reported ",[14,681,508],{}," is not a calibrated probability, and",[259,684,685,686,688,689,691],{},"a ",[14,687,273],{}," or ",[14,690,279],{}," answer is a judgement about the input, not a verified\nfact.",[10,693,694],{},"Treat the document as one more input to validate downstream, not as an\nauthority. Because the questions and their bounds are declared in the workflow,\nthe result stays typed and reviewable instead of collapsing into free text.",[19,696,698],{"id":697},"a-security-triage-workflow","A security-triage workflow",[25,700,702],{"className":27,"code":701,"language":29,"meta":30,"style":30},"triage = activity(\n    name = \"triage\",\n    triggers = [trigger.dispatch()],\n    steps = [\n        step.exec(command = [\"nuclei\", \"-l\", \"live.txt\", \"-jsonl\", \"-o\", \"findings.json\"]),\n        step.decision(\n            state = path.file(\"findings.json\"),\n            questions = {\n                \"relevant\": decision.noul(\"Is this finding relevant to the target?\"),\n                \"severity\": decision.choice(\n                    \"How severe is the finding?\",\n                    options = [\"low\", \"medium\", \"high\", \"critical\"],\n                ),\n                \"priority\": decision.score(\"Triage priority?\", min = 0, max = 3),\n            },\n            provider = \"jevos\",\n            endpoint = config.var(\"jevos_endpoint\"),\n            output = path.file(\"decision.json\"),\n        ),\n        step.exec(command = [\"sh\", \"-c\", \"jq -r '.answers.priority.value' decision.json > priority.txt\"]),\n    ],\n)\n\nworkflow(name = \"triage\", activities = [triage])\n",[14,703,704,709,714,719,724,729,734,739,744,749,754,759,765,771,777,783,789,795,801,807,813,819,824,831],{"__ignoreMap":30},[34,705,706],{"class":36,"line":37},[34,707,708],{},"triage = activity(\n",[34,710,711],{"class":36,"line":43},[34,712,713],{},"    name = \"triage\",\n",[34,715,716],{"class":36,"line":49},[34,717,718],{},"    triggers = [trigger.dispatch()],\n",[34,720,721],{"class":36,"line":55},[34,722,723],{},"    steps = [\n",[34,725,726],{"class":36,"line":61},[34,727,728],{},"        step.exec(command = [\"nuclei\", \"-l\", \"live.txt\", \"-jsonl\", \"-o\", \"findings.json\"]),\n",[34,730,731],{"class":36,"line":67},[34,732,733],{},"        step.decision(\n",[34,735,736],{"class":36,"line":73},[34,737,738],{},"            state = path.file(\"findings.json\"),\n",[34,740,741],{"class":36,"line":79},[34,742,743],{},"            questions = {\n",[34,745,746],{"class":36,"line":85},[34,747,748],{},"                \"relevant\": decision.noul(\"Is this finding relevant to the target?\"),\n",[34,750,751],{"class":36,"line":91},[34,752,753],{},"                \"severity\": decision.choice(\n",[34,755,756],{"class":36,"line":97},[34,757,758],{},"                    \"How severe is the finding?\",\n",[34,760,762],{"class":36,"line":761},12,[34,763,764],{},"                    options = [\"low\", \"medium\", \"high\", \"critical\"],\n",[34,766,768],{"class":36,"line":767},13,[34,769,770],{},"                ),\n",[34,772,774],{"class":36,"line":773},14,[34,775,776],{},"                \"priority\": decision.score(\"Triage priority?\", min = 0, max = 3),\n",[34,778,780],{"class":36,"line":779},15,[34,781,782],{},"            },\n",[34,784,786],{"class":36,"line":785},16,[34,787,788],{},"            provider = \"jevos\",\n",[34,790,792],{"class":36,"line":791},17,[34,793,794],{},"            endpoint = config.var(\"jevos_endpoint\"),\n",[34,796,798],{"class":36,"line":797},18,[34,799,800],{},"            output = path.file(\"decision.json\"),\n",[34,802,804],{"class":36,"line":803},19,[34,805,806],{},"        ),\n",[34,808,810],{"class":36,"line":809},20,[34,811,812],{},"        step.exec(command = [\"sh\", \"-c\", \"jq -r '.answers.priority.value' decision.json > priority.txt\"]),\n",[34,814,816],{"class":36,"line":815},21,[34,817,818],{},"    ],\n",[34,820,822],{"class":36,"line":821},22,[34,823,100],{},[34,825,827],{"class":36,"line":826},23,[34,828,830],{"emptyLinePlaceholder":829},true,"\n",[34,832,834],{"class":36,"line":833},24,[34,835,836],{},"workflow(name = \"triage\", activities = [triage])\n",[838,839,840],"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);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":30,"searchDepth":61,"depth":55,"links":842},[843,844,845,846,847,848,849],{"id":21,"depth":43,"text":16},{"id":226,"depth":43,"text":227},{"id":294,"depth":43,"text":295},{"id":350,"depth":43,"text":351},{"id":416,"depth":43,"text":417},{"id":670,"depth":43,"text":671},{"id":697,"depth":43,"text":698},"Make structured decisions over an input state document with step.decision, with validated typed answers from the built-in jevos provider.","md",{},"\u002Fworkflows\u002Fdecisions",null,{"title":5,"description":850},{"loc":853},"01.workflows\u002F10.decisions","F8qSjGQNjvaOY8VQGbdgx66KxCX2BldNvkL9TdoB9Pw",[860,920,936,955,990,1006,1018,1029,1040,1051,1075,1094,1114,1125,1136],{"title":861,"path":862,"stem":863,"children":864},"Workflows","\u002Fworkflows","01.workflows",[865,867,871,875,879,883,887,891,895,899,903,907,908,912,916],{"title":861,"path":862,"stem":866},"01.workflows\u002Findex",{"title":868,"path":869,"stem":870},"Workflow Quick Reference","\u002Fworkflows\u002Fquick-reference","01.workflows\u002F00.quick-reference",{"title":872,"path":873,"stem":874},"Workflows Overview","\u002Fworkflows\u002Foverview","01.workflows\u002F01.overview",{"title":876,"path":877,"stem":878},"Workflow Syntax Reference","\u002Fworkflows\u002Fsyntax-reference","01.workflows\u002F02.syntax-reference",{"title":880,"path":881,"stem":882},"Steps","\u002Fworkflows\u002Fsteps","01.workflows\u002F03.steps",{"title":884,"path":885,"stem":886},"Step Outputs","\u002Fworkflows\u002Fstep-outputs","01.workflows\u002F04.step-outputs",{"title":888,"path":889,"stem":890},"Concurrency","\u002Fworkflows\u002Fconcurrency","01.workflows\u002F05.concurrency",{"title":892,"path":893,"stem":894},"Transforms","\u002Fworkflows\u002Ftransforms","01.workflows\u002F06.transforms",{"title":896,"path":897,"stem":898},"For Each","\u002Fworkflows\u002Ffor-each","01.workflows\u002F07.for-each",{"title":900,"path":901,"stem":902},"Modules","\u002Fworkflows\u002Fmodules","01.workflows\u002F08.modules",{"title":904,"path":905,"stem":906},"Agents","\u002Fworkflows\u002Fagents","01.workflows\u002F09.agents",{"title":5,"path":853,"stem":857},{"title":909,"path":910,"stem":911},"Configuration References","\u002Fworkflows\u002Fconfig","01.workflows\u002F11.config",{"title":913,"path":914,"stem":915},"Comparison With Other Automation Systems","\u002Fworkflows\u002Fcomparison","01.workflows\u002F12.comparison",{"title":917,"path":918,"stem":919},"Generate with AI","\u002Fworkflows\u002Fai-generation","01.workflows\u002F13.ai-generation",{"title":921,"path":922,"stem":923,"children":924},"Projects","\u002Fprojects","02.projects",[925,928,932],{"title":926,"path":922,"stem":927},"Projects & Runs","02.projects\u002Findex",{"title":929,"path":930,"stem":931},"Projects Overview","\u002Fprojects\u002Foverview","02.projects\u002F1.overview",{"title":933,"path":934,"stem":935},"Runs & Artifacts","\u002Fprojects\u002Fruns-artifacts","02.projects\u002F2.runs-artifacts",{"title":937,"path":938,"stem":939,"children":940},"Runners","\u002Frunners","03.runners",[941,943,947,951],{"title":937,"path":938,"stem":942},"03.runners\u002Findex",{"title":944,"path":945,"stem":946},"Runner Overview","\u002Frunners\u002Foverview","03.runners\u002F1.overview",{"title":948,"path":949,"stem":950},"Getting Started with Runners","\u002Frunners\u002Fgetting-started","03.runners\u002F2.getting-started",{"title":952,"path":953,"stem":954},"Custom Runner Images","\u002Frunners\u002Fcustom-image","03.runners\u002F3.custom-image",{"title":956,"path":957,"stem":958,"children":959},"Datasets","\u002Fdatasets","04.datasets",[960,962,966,970,974,978,982,986],{"title":956,"path":957,"stem":961},"04.datasets\u002Findex",{"title":963,"path":964,"stem":965},"Datasets Overview","\u002Fdatasets\u002Foverview","04.datasets\u002F1.overview",{"title":967,"path":968,"stem":969},"Dataset Schemas and Identity","\u002Fdatasets\u002Fschema","04.datasets\u002F2.schema",{"title":971,"path":972,"stem":973},"Pushing and Reading Dataset Rows","\u002Fdatasets\u002Fworkflows","04.datasets\u002F3.workflows",{"title":975,"path":976,"stem":977},"Dataset SQL Reference","\u002Fdatasets\u002Fsql","04.datasets\u002F4.sql",{"title":979,"path":980,"stem":981},"Dataset Structured Filters","\u002Fdatasets\u002Ffilters","04.datasets\u002F5.filters",{"title":983,"path":984,"stem":985},"Dataset Saved Views","\u002Fdatasets\u002Fviews","04.datasets\u002F6.views",{"title":987,"path":988,"stem":989},"Datasets API and CLI","\u002Fdatasets\u002Fapi-cli","04.datasets\u002F7.api-cli",{"title":991,"path":992,"stem":993,"children":994},"Agent","\u002Fagent","05.agent",[995,998,1002],{"title":996,"path":992,"stem":997},"BH Agent","05.agent\u002Findex",{"title":999,"path":1000,"stem":1001},"BH Agent Overview","\u002Fagent\u002Foverview","05.agent\u002F1.overview",{"title":1003,"path":1004,"stem":1005},"MCP servers","\u002Fagent\u002Fmcp-servers","05.agent\u002F2.mcp-servers",{"title":1007,"path":1008,"stem":1009,"children":1010},"Bhlast","\u002Fbhlast","06.bhlast",[1011,1014],{"title":1012,"path":1008,"stem":1013},"Bhlast Servers","06.bhlast\u002Findex",{"title":1015,"path":1016,"stem":1017},"Bhlast servers overview","\u002Fbhlast\u002Foverview","06.bhlast\u002F1.overview",{"title":1019,"path":1020,"stem":1021,"children":1022},"Notifications","\u002Fnotifications","07.notifications",[1023,1025],{"title":1019,"path":1020,"stem":1024},"07.notifications\u002Findex",{"title":1026,"path":1027,"stem":1028},"Notifications Overview","\u002Fnotifications\u002Foverview","07.notifications\u002F1.overview",{"title":1030,"path":1031,"stem":1032,"children":1033},"Blob Storage","\u002Fblob-storage","08.blob-storage",[1034,1036],{"title":1030,"path":1031,"stem":1035},"08.blob-storage\u002Findex",{"title":1037,"path":1038,"stem":1039},"Blob Storage Overview","\u002Fblob-storage\u002Foverview","08.blob-storage\u002F1.overview",{"title":1041,"path":1042,"stem":1043,"children":1044},"Payloads","\u002Fpayloads","09.payloads",[1045,1047],{"title":1041,"path":1042,"stem":1046},"09.payloads\u002Findex",{"title":1048,"path":1049,"stem":1050},"Payloads overview","\u002Fpayloads\u002Foverview","09.payloads\u002F1.overview",{"title":1052,"path":1053,"stem":1054,"children":1055},"Cve Watcher","\u002Fcve-watcher","10.cve-watcher",[1056,1059,1063,1067,1071],{"title":1057,"path":1053,"stem":1058},"CVE Watcher","10.cve-watcher\u002Findex",{"title":1060,"path":1061,"stem":1062},"CVE Watcher Overview","\u002Fcve-watcher\u002Foverview","10.cve-watcher\u002F1.overview",{"title":1064,"path":1065,"stem":1066},"CVE Watcher Search and Filters","\u002Fcve-watcher\u002Fsearch","10.cve-watcher\u002F2.search",{"title":1068,"path":1069,"stem":1070},"CVE Watcher Push Notifications","\u002Fcve-watcher\u002Fnotifications","10.cve-watcher\u002F3.notifications",{"title":1072,"path":1073,"stem":1074},"CVE Watcher API and Scopes","\u002Fcve-watcher\u002Fapi","10.cve-watcher\u002F4.api",{"title":1076,"path":1077,"stem":1078,"children":1079},"Developer","\u002Fdeveloper","11.developer",[1080,1082,1086,1090],{"title":1076,"path":1077,"stem":1081},"11.developer\u002Findex",{"title":1083,"path":1084,"stem":1085},"Developer Overview","\u002Fdeveloper\u002Foverview","11.developer\u002F1.overview",{"title":1087,"path":1088,"stem":1089},"Personal Access Token Scopes","\u002Fdeveloper\u002Fscopes","11.developer\u002F2.scopes",{"title":1091,"path":1092,"stem":1093},"Personal Access Tokens","\u002Fdeveloper\u002Fpersonal-access-tokens","11.developer\u002F3.personal-access-tokens",{"title":1095,"path":1096,"stem":1097,"children":1098},"Bh","\u002Fbh","12.bh",[1099,1102,1106,1110],{"title":1100,"path":1096,"stem":1101},"BH CLI","12.bh\u002Findex",{"title":1103,"path":1104,"stem":1105},"BH CLI Overview","\u002Fbh\u002Foverview","12.bh\u002F1.overview",{"title":1107,"path":1108,"stem":1109},"BH CLI Commands","\u002Fbh\u002Fcommands","12.bh\u002F2.commands",{"title":1111,"path":1112,"stem":1113},"BH CLI Examples","\u002Fbh\u002Fexamples","12.bh\u002F3.examples",{"title":1115,"path":1116,"stem":1117,"children":1118},"Billing","\u002Fbilling","13.billing",[1119,1121],{"title":1115,"path":1116,"stem":1120},"13.billing\u002Findex",{"title":1122,"path":1123,"stem":1124},"Billing Overview","\u002Fbilling\u002Foverview","13.billing\u002F1.overview",{"title":1126,"path":1127,"stem":1128,"children":1129},"Tools","\u002Ftools","14.tools",[1130,1132],{"title":1126,"path":1127,"stem":1131},"14.tools\u002Findex",{"title":1133,"path":1134,"stem":1135},"Cookie Lab","\u002Ftools\u002Fcookie-lab","14.tools\u002F1.cookie-lab",{"title":1137,"path":1138,"stem":1139,"children":1140},"Site Policies","\u002Fsite-policies","99.site-policies",[1141,1143,1156,1160,1164,1168,1172,1176,1180],{"title":1137,"path":1138,"stem":1142},"99.site-policies\u002Findex",{"title":1144,"path":1145,"stem":1146,"children":1147},"Privacy Policy","\u002Fsite-policies\u002Fprivacy-policy","99.site-policies\u002F1.privacy-policy",[1148,1152],{"title":1149,"path":1150,"stem":1151},"Company Processors","\u002Fsite-policies\u002Fprivacy-policy\u002Fcompany-processors","99.site-policies\u002Fprivacy-policy\u002F1.company-processors",{"title":1153,"path":1154,"stem":1155},"Data Export Instructions","\u002Fsite-policies\u002Fprivacy-policy\u002Fdata-export-instructions","99.site-policies\u002Fprivacy-policy\u002F2.data-export-instructions",{"title":1157,"path":1158,"stem":1159},"Terms of Service","\u002Fsite-policies\u002Fterms-of-service","99.site-policies\u002F2.terms-of-service",{"title":1161,"path":1162,"stem":1163},"California Resident Notice at Collection","\u002Fsite-policies\u002Fccpa","99.site-policies\u002F3.ccpa",{"title":1165,"path":1166,"stem":1167},"Cancellation Policy","\u002Fsite-policies\u002Fcancellation-policy","99.site-policies\u002F4.cancellation-policy",{"title":1169,"path":1170,"stem":1171},"Refund Policy","\u002Fsite-policies\u002Frefund-policy","99.site-policies\u002F5.refund-policy",{"title":1173,"path":1174,"stem":1175},"Taxes on Services","\u002Fsite-policies\u002Ftaxes-on-services","99.site-policies\u002F6.taxes-on-services",{"title":1177,"path":1178,"stem":1179},"Disclaimer","\u002Fsite-policies\u002Fdisclaimer","99.site-policies\u002F7.disclaimer",{"title":1181,"path":1182,"stem":1183,"children":1184},"Security","\u002Fsite-policies\u002Fsecurity","99.site-policies\u002Fsecurity\u002Findex",[1185,1186,1190],{"title":1181,"path":1182,"stem":1183},{"title":1187,"path":1188,"stem":1189},"Security Overview","\u002Fsite-policies\u002Fsecurity\u002Fsecurity-overview","99.site-policies\u002Fsecurity\u002F1.security-overview",{"title":1191,"path":1192,"stem":1193},"Security Response","\u002Fsite-policies\u002Fsecurity\u002Fsecurity-response","99.site-policies\u002Fsecurity\u002F2.security-response",1794410312375]