[{"data":1,"prerenderedAt":1691},["ShallowReactive",2],{"navigation_docs":3,"-reference-cli":172,"-reference-cli-surround":1686},[4,30,100,134],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":29},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,14,18,21,25],{"title":11,"path":12,"stem":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":15,"path":16,"stem":17},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":5,"path":19,"stem":20},"\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start",{"title":22,"path":23,"stem":24},"Build from source","\u002Fgetting-started\u002Fbuild-from-source","1.getting-started\u002F4.build-from-source",{"title":26,"path":27,"stem":28},"Troubleshooting","\u002Fgetting-started\u002Ftroubleshooting","1.getting-started\u002F5.troubleshooting",false,{"title":31,"icon":32,"path":33,"stem":34,"children":35,"page":29},"Guide","i-lucide-book-open","\u002Fguide","2.guide",[36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96],{"title":37,"path":38,"stem":39},"Interface","\u002Fguide\u002Finterface","2.guide\u002F01.interface",{"title":41,"path":42,"stem":43},"Workspace","\u002Fguide\u002Fworkspace","2.guide\u002F02.workspace",{"title":45,"path":46,"stem":47},"Collections","\u002Fguide\u002Fcollections","2.guide\u002F03.collections",{"title":49,"path":50,"stem":51},"HTTP requests","\u002Fguide\u002Fhttp-requests","2.guide\u002F04.http-requests",{"title":53,"path":54,"stem":55},"Variables","\u002Fguide\u002Fvariables","2.guide\u002F05.variables",{"title":57,"path":58,"stem":59},"Authorization","\u002Fguide\u002Fauthorization","2.guide\u002F06.authorization",{"title":61,"path":62,"stem":63},"Scripts and tests","\u002Fguide\u002Fscripts-and-tests","2.guide\u002F07.scripts-and-tests",{"title":65,"path":66,"stem":67},"Collection runner","\u002Fguide\u002Fcollection-runner","2.guide\u002F08.collection-runner",{"title":69,"path":70,"stem":71},"Import and export","\u002Fguide\u002Fimport-export","2.guide\u002F09.import-export",{"title":73,"path":74,"stem":75},"Code snippets","\u002Fguide\u002Fcode-snippets","2.guide\u002F10.code-snippets",{"title":77,"path":78,"stem":79},"gRPC","\u002Fguide\u002Fgrpc","2.guide\u002F11.grpc",{"title":81,"path":82,"stem":83},"WebSocket","\u002Fguide\u002Fwebsocket","2.guide\u002F12.websocket",{"title":85,"path":86,"stem":87},"Cookies, proxy and certificates","\u002Fguide\u002Fcookies-proxy-certificates","2.guide\u002F13.cookies-proxy-certificates",{"title":89,"path":90,"stem":91},"Settings","\u002Fguide\u002Fsettings","2.guide\u002F14.settings",{"title":93,"path":94,"stem":95},"Keyboard shortcuts","\u002Fguide\u002Fkeyboard-shortcuts","2.guide\u002F15.keyboard-shortcuts",{"title":97,"path":98,"stem":99},"Privacy and security","\u002Fguide\u002Fprivacy-and-security","2.guide\u002F16.privacy-and-security",{"title":101,"icon":102,"path":103,"stem":104,"children":105,"page":29},"Reference","i-lucide-square-terminal","\u002Freference","3.reference",[106,110,114,118,122,126,130],{"title":107,"path":108,"stem":109},"Command line","\u002Freference\u002Fcli","3.reference\u002F1.cli",{"title":111,"path":112,"stem":113},"Automation tools","\u002Freference\u002Fautomation-tools","3.reference\u002F2.automation-tools",{"title":115,"path":116,"stem":117},"Scripting API","\u002Freference\u002Fscripting-api","3.reference\u002F3.scripting-api",{"title":119,"path":120,"stem":121},"Dynamic variables","\u002Freference\u002Fdynamic-variables","3.reference\u002F4.dynamic-variables",{"title":123,"path":124,"stem":125},"UI control channel","\u002Freference\u002Fui-control-channel","3.reference\u002F5.ui-control-channel",{"title":127,"path":128,"stem":129},"Workspace format","\u002Freference\u002Fworkspace-format","3.reference\u002F6.workspace-format",{"title":131,"path":132,"stem":133},"Feature status","\u002Freference\u002Ffeature-status","3.reference\u002F7.feature-status",{"title":135,"icon":136,"path":137,"stem":138,"children":139,"page":29},"Contributing","i-lucide-git-pull-request","\u002Fcontributing","4.contributing",[140,144,148,152,156,160,164,168],{"title":141,"path":142,"stem":143},"Contributing overview","\u002Fcontributing\u002Foverview","4.contributing\u002F1.overview",{"title":145,"path":146,"stem":147},"Development","\u002Fcontributing\u002Fdevelopment","4.contributing\u002F2.development",{"title":149,"path":150,"stem":151},"Architecture","\u002Fcontributing\u002Farchitecture","4.contributing\u002F3.architecture",{"title":153,"path":154,"stem":155},"Known gaps","\u002Fcontributing\u002Fgaps","4.contributing\u002F4.gaps",{"title":157,"path":158,"stem":159},"Adding a feature","\u002Fcontributing\u002Fadding-a-feature","4.contributing\u002F5.adding-a-feature",{"title":161,"path":162,"stem":163},"Assets and clean-room","\u002Fcontributing\u002Fassets-and-clean-room","4.contributing\u002F6.assets-and-clean-room",{"title":165,"path":166,"stem":167},"Releasing","\u002Fcontributing\u002Freleasing","4.contributing\u002F7.releasing",{"title":169,"path":170,"stem":171},"Writing the documentation","\u002Fcontributing\u002Fdocumentation","4.contributing\u002F8.documentation",{"id":173,"title":107,"body":174,"description":1679,"extension":1680,"links":1681,"meta":1682,"navigation":1683,"path":108,"seo":1684,"stem":109,"__hash__":1685},"docs\u002F3.reference\u002F1.cli.md",{"type":175,"value":176,"toc":1663},"minimark",[177,181,230,237,244,275,315,378,382,393,401,422,427,482,488,493,550,560,565,594,617,622,664,667,722,737,766,771,793,796,851,1008,1029,1034,1060,1073,1236,1275,1332,1335,1341,1388,1393,1397,1499,1505,1530,1535,1540,1550,1579,1584,1593,1597,1659],[178,179,180],"p",{},"Postguy has two programs:",[182,183,184,197],"table",{},[185,186,187],"thead",{},[188,189,190,194],"tr",{},[191,192,193],"th",{},"Program",[191,195,196],{},"What it is",[198,199,200,220],"tbody",{},[188,201,202,209],{},[203,204,205],"td",{},[206,207,208],"code",{},"postguy",[203,210,211,212,215,216,219],{},"The desktop app. Two flags: ",[206,213,214],{},"--workspace"," and ",[206,217,218],{},"--control",".",[188,221,222,227],{},[203,223,224],{},[206,225,226],{},"postguy-cli",[203,228,229],{},"The headless tool. It runs automation tools and collections, and drives the app's control channel.",[178,231,232,233,236],{},"See ",[234,235,15],"a",{"href":16}," to find where each one is installed.",[238,239,241,243],"h2",{"id":240},"postguy-desktop-app",[206,242,208],{}," (desktop app)",[245,246,251],"pre",{"className":247,"code":248,"language":249,"meta":250,"style":250},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","postguy [--workspace DIR] [--control FILE]\n","sh","",[206,252,253],{"__ignoreMap":250},[254,255,258,261,265,269,272],"span",{"class":256,"line":257},"line",1,[254,259,208],{"class":260},"sBMFI",[254,262,264],{"class":263},"sTEyZ"," [--workspace ",[254,266,268],{"class":267},"sfazB","DIR]",[254,270,271],{"class":263}," [--control ",[254,273,274],{"class":267},"FILE]\n",[182,276,277,287],{},[185,278,279],{},[188,280,281,284],{},[191,282,283],{},"Flag",[191,285,286],{},"Meaning",[198,288,289,299],{},[188,290,291,296],{},[203,292,293],{},[206,294,295],{},"--workspace DIR",[203,297,298],{},"Open this workspace folder. It is created if missing.",[188,300,301,306],{},[203,302,303],{},[206,304,305],{},"--control FILE",[203,307,308,309,311,312,219],{},"Start the opt-in ",[234,310,123],{"href":124}," and write its port and token to ",[206,313,314],{},"FILE",[316,317,318,351,361,371],"ul",{},[319,320,321,322,324,325],"li",{},"With no ",[206,323,214],{},", the app picks a folder in this order:\n",[326,327,328,334,344],"ol",{},[319,329,330,333],{},[206,331,332],{},".\u002Fpostguy-workspace",", if that folder exists.",[319,335,336,339,340,343],{},[206,337,338],{},"~\u002Fpostguy-workspace"," (",[206,341,342],{},"%USERPROFILE%\\postguy-workspace"," on Windows).",[319,345,346,347,350],{},"The relative path ",[206,348,349],{},"postguy-workspace",", only when no home folder is known.",[319,352,353,354,357,358,360],{},"The Flatpak build adds ",[206,355,356],{},"--workspace \"${XDG_DATA_HOME:-$HOME\u002F.local\u002Fshare}\u002Fpostguy-workspace\""," unless you pass ",[206,359,214],{}," yourself.",[319,362,363,364,367,368,219],{},"These are the only two flags. Other arguments are ignored. There is no ",[206,365,366],{},"--help"," or ",[206,369,370],{},"--version",[319,372,373,374,377],{},"If the control channel cannot start, the app still runs. It prints ",[206,375,376],{},"control channel disabled: ..."," to stderr and shows the same text in the status bar.",[238,379,380],{"id":226},[206,381,226],{},[178,383,384,386,387,389,390,392],{},[206,385,226],{}," has no ",[206,388,366],{}," and no ",[206,391,370],{},". With no command, or an unknown command, it prints this usage to stderr and exits 2:",[245,394,399],{"className":395,"code":397,"language":398,"meta":250},[396],"language-text","usage:\n  postguy-cli tools [--json]\n  postguy-cli call \u003Ctool> --json '\u003Cargs>' [--root DIR]\n  postguy-cli run --script FILE [--root DIR]\n  postguy-cli run --collection ID_OR_NAME --workspace DIR [--folder F] [--environment E] [--iterations N] [--delay MS] [--data FILE] [--bail] [--requests ID,ID] [--reporters cli,json,junit,html,csv,xlsx,pdf] [--out DIR] [--root DIR]\n  postguy-cli fuzz-target \u003Cname> \u003Cseed-file>   (dev tooling)\n  postguy-cli ui --control FILE inspect|command ID|set KEY=VALUE|screenshot --out FILE|click X Y|key NAME|type TEXT [--root DIR]\n\nRun `postguy-cli tools` for the tool table; `ui` talks to an app launched with `--control FILE`.\n","text",[206,400,397],{"__ignoreMap":250},[402,403,404,405,409,410,413,414,417,418,421],"note",{},"Flags are parsed by a small hand-written parser. ",[406,407,408],"strong",{},"Unknown flags are ignored silently",", and a flag with no value after it is dropped. A typo such as ",[206,411,412],{},"--reporter"," instead of ",[206,415,416],{},"--reporters"," is not an error. To check that the binary works, run ",[206,419,420],{},"postguy-cli tools",". The installer tests do the same.",[423,424,426],"h3",{"id":425},"exit-codes","Exit codes",[182,428,429,438],{},[185,430,431],{},[188,432,433,436],{},[191,434,435],{},"Code",[191,437,286],{},[198,439,440,454,464],{},[188,441,442,447],{},[203,443,444],{},[206,445,446],{},"0",[203,448,449,450,453],{},"Success. For ",[206,451,452],{},"run --collection",": every request, script and test passed.",[188,455,456,461],{},[203,457,458],{},[206,459,460],{},"1",[203,462,463],{},"A failure: a tool returned an error, a script step failed, a test failed, or a report could not be written.",[188,465,466,471],{},[203,467,468],{},[206,469,470],{},"2",[203,472,473,474,477,478,481],{},"Usage problem: missing or conflicting arguments, invalid JSON, a number that is not a number, an unknown reporter, a name that matches nothing (or too much), an unreadable script, or a script outside ",[206,475,476],{},"--root",". Every ",[206,479,480],{},"ui"," error also exits 2.",[423,483,485],{"id":484},"root-dir",[206,486,487],{},"--root DIR",[178,489,490,492],{},[206,491,487],{}," limits every path argument to one directory. The directory is created if it does not exist.",[316,494,495,498,505,512,532,538],{},[319,496,497],{},"Relative paths resolve against the root, not the current directory.",[319,499,500,501,504],{},"Absolute paths are accepted only inside the root; ",[206,502,503],{},".."," is resolved before the check, and symlinks that point outside are refused.",[319,506,507,508,511],{},"A path outside the root is refused with ",[206,509,510],{},"PATH is outside the allowed directory ROOT",". The message is the same whether or not the path exists, so a confined caller cannot probe the disk.",[319,513,514,515,518,519,522,523,525,526,215,529,219],{},"It applies to the ",[206,516,517],{},"--script"," file itself, ",[206,520,521],{},"workspace_open"," paths, imports, exports, ",[206,524,214],{},", ",[206,527,528],{},"--data",[206,530,531],{},"--out",[319,533,534,535,537],{},"Without ",[206,536,476],{},", nothing is confined and relative paths resolve against the current directory.",[319,539,540,542,543,545,546,549],{},[206,541,480],{}," uses ",[206,544,476],{}," only for the ",[206,547,548],{},"screenshot --out"," path.",[178,551,552,553,556,557,559],{},"The workspace's config folder is always ",[206,554,555],{},"\u003Cworkspace>\u002F.postguy-config"," in a ",[206,558,226],{}," session.",[423,561,563],{"id":562},"tools",[206,564,562],{},[245,566,568],{"className":247,"code":567,"language":249,"meta":250,"style":250},"postguy-cli tools          # one line per tool\npostguy-cli tools --json   # full schemas\n",[206,569,570,581],{"__ignoreMap":250},[254,571,572,574,577],{"class":256,"line":257},[254,573,226],{"class":260},[254,575,576],{"class":267}," tools",[254,578,580],{"class":579},"sHwdD","          # one line per tool\n",[254,582,584,586,588,591],{"class":256,"line":583},2,[254,585,226],{"class":260},[254,587,576],{"class":267},[254,589,590],{"class":267}," --json",[254,592,593],{"class":579},"   # full schemas\n",[178,595,596,597,525,600,367,603,606,607,610,611,614,615,219],{},"Plain output is one line per tool: the name (padded to 20 columns), the safety (",[206,598,599],{},"read-only",[206,601,602],{},"write",[206,604,605],{},"destructive",") and the title. With ",[206,608,609],{},"--json"," it prints one JSON object, ",[206,612,613],{},"{\"tools\":[{\"name\",\"title\",\"description\",\"inputSchema\",\"readOnly\",\"destructive\"}]}",". Exit code is 0. The tools are described in ",[234,616,111],{"href":112},[423,618,620],{"id":619},"call",[206,621,619],{},[245,623,625],{"className":247,"code":624,"language":249,"meta":250,"style":250},"postguy-cli call \u003Ctool> --json '\u003Cargs>' [--root DIR]\n",[206,626,627],{"__ignoreMap":250},[254,628,629,631,634,638,641,644,647,649,652,655,658,661],{"class":256,"line":257},[254,630,226],{"class":260},[254,632,633],{"class":267}," call",[254,635,637],{"class":636},"sMK4o"," \u003C",[254,639,640],{"class":267},"too",[254,642,643],{"class":263},"l",[254,645,646],{"class":636},">",[254,648,590],{"class":267},[254,650,651],{"class":636}," '",[254,653,654],{"class":267},"\u003Cargs>",[254,656,657],{"class":636},"'",[254,659,660],{"class":263}," [--root ",[254,662,663],{"class":267},"DIR]\n",[178,665,666],{},"Runs one tool and prints its JSON result on stdout (exit 0).",[182,668,669,679],{},[185,670,671],{},[188,672,673,676],{},[191,674,675],{},"Case",[191,677,678],{},"Result",[198,680,681,695,709],{},[188,682,683,689],{},[203,684,685,686,688],{},"The tool fails (unknown tool, bad argument, not found, outside ",[206,687,476],{},", ...)",[203,690,691,694],{},[206,692,693],{},"{\"ok\":false,\"error\":\"...\"}"," on stderr, exit 1.",[188,696,697,706],{},[203,698,699,700,702,703,705],{},"No tool name, ",[206,701,609],{}," is not valid JSON, or ",[206,704,476],{}," cannot be created",[203,707,708],{},"Message on stderr, exit 2.",[188,710,711,716],{},[203,712,713,715],{},[206,714,609],{}," omitted",[203,717,718,719,219],{},"The arguments are ",[206,720,721],{},"{}",[178,723,724,725,727,728,730,731,734,735,219],{},"Each ",[206,726,619],{}," starts a new process with no workspace open. On its own, only ",[206,729,521],{}," (and tools that need no workspace) can succeed. For anything with more than one step, use ",[206,732,733],{},"run --script",". See ",[234,736,111],{"href":112},[245,738,740],{"className":247,"code":739,"language":249,"meta":250,"style":250},"postguy-cli call workspace_open --json '{\"path\":\"work\"}' --root \u002Ftmp\u002Fpg\n",[206,741,742],{"__ignoreMap":250},[254,743,744,746,748,751,753,755,758,760,763],{"class":256,"line":257},[254,745,226],{"class":260},[254,747,633],{"class":267},[254,749,750],{"class":267}," workspace_open",[254,752,590],{"class":267},[254,754,651],{"class":636},[254,756,757],{"class":267},"{\"path\":\"work\"}",[254,759,657],{"class":636},[254,761,762],{"class":267}," --root",[254,764,765],{"class":267}," \u002Ftmp\u002Fpg\n",[423,767,769],{"id":768},"run-script",[206,770,733],{},[245,772,774],{"className":247,"code":773,"language":249,"meta":250,"style":250},"postguy-cli run --script FILE [--root DIR]\n",[206,775,776],{"__ignoreMap":250},[254,777,778,780,783,786,789,791],{"class":256,"line":257},[254,779,226],{"class":260},[254,781,782],{"class":267}," run",[254,784,785],{"class":267}," --script",[254,787,788],{"class":267}," FILE",[254,790,660],{"class":263},[254,792,663],{"class":267},[178,794,795],{},"Runs a JSON script of tool steps in one process and one session.",[316,797,798,815,820,830,841],{},[319,799,800,802,803,806,807,810,811,814],{},[206,801,314],{}," is a JSON array of steps, or an object with a ",[206,804,805],{},"steps"," array, at most 8 MiB. Each step is ",[206,808,809],{},"{\"tool\": \"\u003Cname>\", \"args\": {...}}","; ",[206,812,813],{},"args"," is optional.",[319,816,817,818,219],{},"Steps run in order. The first step normally is ",[206,819,521],{},[319,821,822,823,826,827,219],{},"Each successful step prints one stdout line ",[206,824,825],{},"{\"step\":N,\"tool\":\"...\",\"ok\":true,\"result\":{...}}",". After the last step it prints ",[206,828,829],{},"{\"ok\":true,\"steps\":N}",[319,831,832,833,836,837,840],{},"The first failing step prints ",[206,834,835],{},"{\"step\":N,\"tool\":\"...\",\"ok\":false,\"error\":\"...\"}"," on stderr, stops the run and exits 1. A step without a ",[206,838,839],{},"tool"," also exits 1.",[319,842,843,844,847,848,850],{},"A script that is not readable, not JSON, not an array or ",[206,845,846],{},"{\"steps\":[...]}",", or outside ",[206,849,476],{}," exits 2.",[245,852,856],{"className":853,"code":854,"language":855,"meta":250,"style":250},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[\n  {\"tool\": \"workspace_open\", \"args\": {\"path\": \"work\"}},\n  {\"tool\": \"collection_create\", \"args\": {\"name\": \"Smoke\"}},\n  {\"tool\": \"collection_list\", \"args\": {}}\n]\n","json",[206,857,858,863,919,969,1002],{"__ignoreMap":250},[254,859,860],{"class":256,"line":257},[254,861,862],{"class":636},"[\n",[254,864,865,868,871,874,876,879,882,884,886,889,891,893,895,897,900,902,905,907,909,911,914,916],{"class":256,"line":583},[254,866,867],{"class":636},"  {",[254,869,870],{"class":636},"\"",[254,872,839],{"class":873},"spNyl",[254,875,870],{"class":636},[254,877,878],{"class":636},":",[254,880,881],{"class":636}," \"",[254,883,521],{"class":267},[254,885,870],{"class":636},[254,887,888],{"class":636},",",[254,890,881],{"class":636},[254,892,813],{"class":873},[254,894,870],{"class":636},[254,896,878],{"class":636},[254,898,899],{"class":636}," {",[254,901,870],{"class":636},[254,903,904],{"class":260},"path",[254,906,870],{"class":636},[254,908,878],{"class":636},[254,910,881],{"class":636},[254,912,913],{"class":267},"work",[254,915,870],{"class":636},[254,917,918],{"class":636},"}},\n",[254,920,922,924,926,928,930,932,934,937,939,941,943,945,947,949,951,953,956,958,960,962,965,967],{"class":256,"line":921},3,[254,923,867],{"class":636},[254,925,870],{"class":636},[254,927,839],{"class":873},[254,929,870],{"class":636},[254,931,878],{"class":636},[254,933,881],{"class":636},[254,935,936],{"class":267},"collection_create",[254,938,870],{"class":636},[254,940,888],{"class":636},[254,942,881],{"class":636},[254,944,813],{"class":873},[254,946,870],{"class":636},[254,948,878],{"class":636},[254,950,899],{"class":636},[254,952,870],{"class":636},[254,954,955],{"class":260},"name",[254,957,870],{"class":636},[254,959,878],{"class":636},[254,961,881],{"class":636},[254,963,964],{"class":267},"Smoke",[254,966,870],{"class":636},[254,968,918],{"class":636},[254,970,972,974,976,978,980,982,984,987,989,991,993,995,997,999],{"class":256,"line":971},4,[254,973,867],{"class":636},[254,975,870],{"class":636},[254,977,839],{"class":873},[254,979,870],{"class":636},[254,981,878],{"class":636},[254,983,881],{"class":636},[254,985,986],{"class":267},"collection_list",[254,988,870],{"class":636},[254,990,888],{"class":636},[254,992,881],{"class":636},[254,994,813],{"class":873},[254,996,870],{"class":636},[254,998,878],{"class":636},[254,1000,1001],{"class":636}," {}}\n",[254,1003,1005],{"class":256,"line":1004},5,[254,1006,1007],{"class":636},"]\n",[245,1009,1011],{"className":247,"code":1010,"language":249,"meta":250,"style":250},"postguy-cli run --script steps.json --root .\n",[206,1012,1013],{"__ignoreMap":250},[254,1014,1015,1017,1019,1021,1024,1026],{"class":256,"line":257},[254,1016,226],{"class":260},[254,1018,782],{"class":267},[254,1020,785],{"class":267},[254,1022,1023],{"class":267}," steps.json",[254,1025,762],{"class":267},[254,1027,1028],{"class":267}," .\n",[423,1030,1032],{"id":1031},"run-collection",[206,1033,452],{},[245,1035,1037],{"className":247,"code":1036,"language":249,"meta":250,"style":250},"postguy-cli run --collection ID_OR_NAME --workspace DIR [options]\n",[206,1038,1039],{"__ignoreMap":250},[254,1040,1041,1043,1045,1048,1051,1054,1057],{"class":256,"line":257},[254,1042,226],{"class":260},[254,1044,782],{"class":267},[254,1046,1047],{"class":267}," --collection",[254,1049,1050],{"class":267}," ID_OR_NAME",[254,1052,1053],{"class":267}," --workspace",[254,1055,1056],{"class":267}," DIR",[254,1058,1059],{"class":263}," [options]\n",[178,1061,1062,1063,1066,1067,215,1070,1072],{},"This opens the workspace, runs the collection with the ",[234,1064,1065],{"href":66},"collection runner",", and prints or writes reports. ",[206,1068,1069],{},"--collection",[206,1071,214],{}," are both required.",[182,1074,1075,1083],{},[185,1076,1077],{},[188,1078,1079,1081],{},[191,1080,283],{},[191,1082,286],{},[198,1084,1085,1094,1106,1116,1126,1140,1150,1162,1172,1182,1215,1227],{},[188,1086,1087,1091],{},[203,1088,1089],{},[206,1090,1069],{},[203,1092,1093],{},"Collection id, or a unique exact name.",[188,1095,1096,1100],{},[203,1097,1098],{},[206,1099,295],{},[203,1101,1102,1103,1105],{},"The workspace folder. Resolved inside ",[206,1104,476],{}," when one is given.",[188,1107,1108,1113],{},[203,1109,1110],{},[206,1111,1112],{},"--folder F",[203,1114,1115],{},"Run only this folder (id or unique name).",[188,1117,1118,1123],{},[203,1119,1120],{},[206,1121,1122],{},"--environment E",[203,1124,1125],{},"Environment id or unique name. Default: the workspace's active environment.",[188,1127,1128,1133],{},[203,1129,1130],{},[206,1131,1132],{},"--iterations N",[203,1134,1135,1136,1139],{},"Number of iterations, a whole number. The ",[206,1137,1138],{},"collection_run"," tool accepts 1 to 10000. Default: one per data row, or 1.",[188,1141,1142,1147],{},[203,1143,1144],{},[206,1145,1146],{},"--delay MS",[203,1148,1149],{},"Pause between requests in milliseconds (at most 600000).",[188,1151,1152,1157],{},[203,1153,1154],{},[206,1155,1156],{},"--data FILE",[203,1158,1159,1160,219],{},"A CSV (header row) or JSON array-of-objects data file. Resolved inside ",[206,1161,476],{},[188,1163,1164,1169],{},[203,1165,1166],{},[206,1167,1168],{},"--bail",[203,1170,1171],{},"A switch, no value: stop after the first request error, script failure or failed test.",[188,1173,1174,1179],{},[203,1175,1176],{},[206,1177,1178],{},"--requests ID,ID",[203,1180,1181],{},"Request ids to run, comma-separated, in that order.",[188,1183,1184,1189],{},[203,1185,1186],{},[206,1187,1188],{},"--reporters LIST",[203,1190,1191,1192,525,1195,525,1197,525,1200,525,1203,525,1206,525,1209,1212,1213,219],{},"Comma-separated from ",[206,1193,1194],{},"cli",[206,1196,855],{},[206,1198,1199],{},"junit",[206,1201,1202],{},"html",[206,1204,1205],{},"csv",[206,1207,1208],{},"xlsx",[206,1210,1211],{},"pdf",". Default ",[206,1214,1194],{},[188,1216,1217,1222],{},[203,1218,1219],{},[206,1220,1221],{},"--out DIR",[203,1223,1224,1225,219],{},"Directory for report files. Default ",[206,1226,219],{},[188,1228,1229,1233],{},[203,1230,1231],{},[206,1232,487],{},[203,1234,1235],{},"Path confinement, as above.",[316,1237,1238,1253,1270],{},[319,1239,1240,1242,1243,525,1246,367,1249,1252],{},[206,1241,1194],{}," prints the text summary to stdout: ",[206,1244,1245],{},"Iteration i\u002Fn",[206,1247,1248],{},"✓ name",[206,1250,1251],{},"✗ name: reason"," lines, and a totals line.",[319,1254,1255,1256,1259,1260,1263,1264,1266,1267,219],{},"Every other reporter writes ",[206,1257,1258],{},"\u003Cout>\u002Fpostguy-run-\u003Crun id>.\u003Cext>"," and prints ",[206,1261,1262],{},"wrote \u003Cpath>",". The extension is the reporter name, except ",[206,1265,1199],{},", which uses ",[206,1268,1269],{},".xml",[319,1271,1272,1273,219],{},"The run is also stored in the workspace (newest 20 per collection). See ",[234,1274,127],{"href":128},[182,1276,1277,1287],{},[185,1278,1279],{},[188,1280,1281,1284],{},[191,1282,1283],{},"Exit",[191,1285,1286],{},"When",[198,1288,1289,1298,1312],{},[188,1290,1291,1295],{},[203,1292,1293],{},[206,1294,446],{},[203,1296,1297],{},"Everything passed.",[188,1299,1300,1304],{},[203,1301,1302],{},[206,1303,460],{},[203,1305,1306,1307,1309,1310,219],{},"Any failed request, script or test; an error from the run itself; a report that could not be written; a ",[206,1308,528],{}," path outside ",[206,1311,476],{},[188,1313,1314,1318],{},[203,1315,1316],{},[206,1317,470],{},[203,1319,1320,367,1322,1324,1325,367,1328,1331],{},[206,1321,1069],{},[206,1323,214],{}," missing, ",[206,1326,1327],{},"--iterations",[206,1329,1330],{},"--delay"," not a whole number, an unknown reporter, or a collection, folder or environment name that matches nothing or more than one.",[178,1333,1334],{},"Name errors list the candidates, for example:",[245,1336,1339],{"className":1337,"code":1338,"language":398,"meta":250},[396],"no collection `X`; known: Smoke (col1)\n`X` matches 2 collections; use an id: Smoke (col1), Smoke (col2)\n",[206,1340,1338],{"__ignoreMap":250},[245,1342,1344],{"className":247,"code":1343,"language":249,"meta":250,"style":250},"postguy-cli run --collection \"Smoke\" --workspace ~\u002Fpostguy-workspace \\\n  --environment dev --reporters cli,junit --out reports\n",[206,1345,1346,1368],{"__ignoreMap":250},[254,1347,1348,1350,1352,1354,1356,1358,1360,1362,1365],{"class":256,"line":257},[254,1349,226],{"class":260},[254,1351,782],{"class":267},[254,1353,1047],{"class":267},[254,1355,881],{"class":636},[254,1357,964],{"class":267},[254,1359,870],{"class":636},[254,1361,1053],{"class":267},[254,1363,1364],{"class":267}," ~\u002Fpostguy-workspace",[254,1366,1367],{"class":263}," \\\n",[254,1369,1370,1373,1376,1379,1382,1385],{"class":256,"line":583},[254,1371,1372],{"class":267},"  --environment",[254,1374,1375],{"class":267}," dev",[254,1377,1378],{"class":267}," --reporters",[254,1380,1381],{"class":267}," cli,junit",[254,1383,1384],{"class":267}," --out",[254,1386,1387],{"class":267}," reports\n",[178,1389,1390,1391,219],{},"For a CI step, see ",[234,1392,65],{"href":66},[423,1394,1395],{"id":480},[206,1396,480],{},[245,1398,1400],{"className":247,"code":1399,"language":249,"meta":250,"style":250},"postguy-cli ui --control FILE inspect\npostguy-cli ui --control FILE command \u003Cid>\npostguy-cli ui --control FILE set \u003Ckey>=\u003Cvalue>\npostguy-cli ui --control FILE screenshot --out FILE [--root DIR]\n",[206,1401,1402,1417,1441,1478],{"__ignoreMap":250},[254,1403,1404,1406,1409,1412,1414],{"class":256,"line":257},[254,1405,226],{"class":260},[254,1407,1408],{"class":267}," ui",[254,1410,1411],{"class":267}," --control",[254,1413,788],{"class":267},[254,1415,1416],{"class":267}," inspect\n",[254,1418,1419,1421,1423,1425,1427,1430,1432,1435,1438],{"class":256,"line":583},[254,1420,226],{"class":260},[254,1422,1408],{"class":267},[254,1424,1411],{"class":267},[254,1426,788],{"class":267},[254,1428,1429],{"class":267}," command",[254,1431,637],{"class":636},[254,1433,1434],{"class":267},"i",[254,1436,1437],{"class":263},"d",[254,1439,1440],{"class":636},">\n",[254,1442,1443,1445,1447,1449,1451,1454,1456,1459,1462,1464,1467,1470,1473,1476],{"class":256,"line":921},[254,1444,226],{"class":260},[254,1446,1408],{"class":267},[254,1448,1411],{"class":267},[254,1450,788],{"class":267},[254,1452,1453],{"class":267}," set",[254,1455,637],{"class":636},[254,1457,1458],{"class":267},"ke",[254,1460,1461],{"class":263},"y",[254,1463,646],{"class":636},[254,1465,1466],{"class":267},"=",[254,1468,1469],{"class":636},"\u003C",[254,1471,1472],{"class":267},"valu",[254,1474,1475],{"class":263},"e",[254,1477,1440],{"class":636},[254,1479,1480,1482,1484,1486,1488,1491,1493,1495,1497],{"class":256,"line":971},[254,1481,226],{"class":260},[254,1483,1408],{"class":267},[254,1485,1411],{"class":267},[254,1487,788],{"class":267},[254,1489,1490],{"class":267}," screenshot",[254,1492,1384],{"class":267},[254,1494,788],{"class":267},[254,1496,660],{"class":263},[254,1498,663],{"class":267},[178,1500,1501,1502,219],{},"This talks to an app started with ",[206,1503,1504],{},"postguy --control FILE",[316,1506,1507,1512,1515,1518],{},[319,1508,1509,1511],{},[206,1510,305],{}," is required.",[319,1513,1514],{},"On success it prints the response body and exits 0. Any error exits 2.",[319,1516,1517],{},"On Unix the control file must be owner-only. Otherwise the client refuses to read the token.",[319,1519,1520,525,1523,215,1526,1529],{},[206,1521,1522],{},"click X Y",[206,1524,1525],{},"key NAME",[206,1527,1528],{},"type TEXT"," are accepted by the client but refused by the app.",[178,1531,1532,1533,219],{},"The actions, keys and limits are in ",[234,1534,123],{"href":124},[423,1536,1538],{"id":1537},"fuzz-target",[206,1539,1537],{},[178,1541,1542,1545,1546,1549],{},[206,1543,1544],{},"postguy-cli fuzz-target \u003Cname> \u003Cseed-file>"," is a development command used by ",[206,1547,1548],{},"cargo xtask fuzz",". It is not for end users.",[316,1551,1552,1576],{},[319,1553,1554,1555,525,1558,525,1561,525,1564,525,1567,525,1570,215,1573,219],{},"The names are ",[206,1556,1557],{},"url",[206,1559,1560],{},"vars",[206,1562,1563],{},"curl",[206,1565,1566],{},"script",[206,1568,1569],{},"data",[206,1571,1572],{},"openapi",[206,1574,1575],{},"har",[319,1577,1578],{},"Exit 0 means the code survived the input. Exit 2 means an error or bad usage.",[423,1580,1582],{"id":1581},"mcp",[206,1583,1581],{},[402,1585,1586,1589,1590,219],{},[206,1587,1588],{},"postguy-cli mcp"," does not exist yet. It is planned as an opt-in stdio server over the same tool table. Today the command falls through to the usage text and exits 2. See ",[234,1591,111],{"href":1592},"\u002Freference\u002Fautomation-tools#mcp-server-planned",[238,1594,1596],{"id":1595},"environment-variables","Environment variables",[182,1598,1599,1611],{},[185,1600,1601],{},[188,1602,1603,1606,1609],{},[191,1604,1605],{},"Variable",[191,1607,1608],{},"Read by",[191,1610,286],{},[198,1612,1613,1634],{},[188,1614,1615,1625,1629],{},[203,1616,1617,1620,1621,1624],{},[206,1618,1619],{},"HOME",", or ",[206,1622,1623],{},"USERPROFILE"," on Windows",[203,1626,1627],{},[206,1628,208],{},[203,1630,1631,1632,219],{},"Locates the default workspace ",[206,1633,338],{},[188,1635,1636,1651,1654],{},[203,1637,1638,525,1641,525,1644,525,1647,1650],{},[206,1639,1640],{},"HTTP_PROXY",[206,1642,1643],{},"HTTPS_PROXY",[206,1645,1646],{},"ALL_PROXY",[206,1648,1649],{},"NO_PROXY"," (and the lowercase forms)",[203,1652,1653],{},"Both programs",[203,1655,1656,1657,219],{},"Proxy settings used when the proxy mode is System, the default. A custom proxy in the settings wins. Empty values are ignored. They are read once, when the HTTP client is created. See ",[234,1658,85],{"href":86},[1660,1661,1662],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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}",{"title":250,"searchDepth":583,"depth":583,"links":1664},[1665,1667,1678],{"id":240,"depth":583,"text":1666},"postguy (desktop app)",{"id":226,"depth":583,"text":226,"children":1668},[1669,1670,1671,1672,1673,1674,1675,1676,1677],{"id":425,"depth":921,"text":426},{"id":484,"depth":921,"text":487},{"id":562,"depth":921,"text":562},{"id":619,"depth":921,"text":619},{"id":768,"depth":921,"text":733},{"id":1031,"depth":921,"text":452},{"id":480,"depth":921,"text":480},{"id":1537,"depth":921,"text":1537},{"id":1581,"depth":921,"text":1581},{"id":1595,"depth":583,"text":1596},"Every flag of the postguy app and every postguy-cli command: tools, call, run, ui, flags, output and exit codes.","md",null,{},true,{"title":107,"description":1679},"D-qcN0vfMYhNMB94dYpLgB6vcz4xRPOhNbTzpiPP2u4",[1687,1689],{"title":97,"path":98,"stem":99,"description":1688,"children":-1},"What Postguy sends over the network, where secrets are stored, what scripts can do, and how the opt-in control channel is protected.",{"title":111,"path":112,"stem":113,"description":1690,"children":-1},"The JSON tool table behind postguy-cli: call rules, the run --script step format, and all 71 tools with their arguments and safety flags.",1793179613009]