[{"data":1,"prerenderedAt":1226},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fconfig":3,"docs-nav":1113},{"id":4,"title":5,"body":6,"description":1105,"extension":1106,"meta":1107,"navigation":157,"order":1108,"path":1109,"seo":1110,"stem":1111,"__hash__":1112},"docs\u002Fdocs\u002F5.config.md","Configuration",{"type":7,"value":8,"toc":1096},"minimark",[9,17,22,32,90,101,111,129,240,244,452,524,528,531,590,609,630,638,649,766,812,860,867,876,979,1015,1023,1039,1045,1092],[10,11,12,16],"p",{},[13,14,15],"code",{},"jawbd"," reads one optional TOML file. It sets whether purchases need\napproval, how purchases are detected, how approvals are collected, and a\ndefault for local-network access.",[18,19,21],"h2",{"id":20},"where-the-file-is","Where the file is",[10,23,24,27,28,31],{},[13,25,26],{},"\u003Cdata_dir>\u002Fconfig.toml",", next to ",[13,29,30],{},"daemon.token"," and your profiles:",[33,34,35,48],"table",{},[36,37,38],"thead",{},[39,40,41,45],"tr",{},[42,43,44],"th",{},"OS",[42,46,47],{},"Default path",[49,50,51,62,76],"tbody",{},[39,52,53,57],{},[54,55,56],"td",{},"Windows",[54,58,59],{},[13,60,61],{},"%LOCALAPPDATA%\\jawb\\config.toml",[39,63,64,67],{},[54,65,66],{},"Linux",[54,68,69,72,73],{},[13,70,71],{},"$XDG_DATA_HOME\u002Fjawb\u002Fconfig.toml",", else ",[13,74,75],{},"~\u002F.local\u002Fshare\u002Fjawb\u002Fconfig.toml",[39,77,78,81],{},[54,79,80],{},"macOS",[54,82,83,85,86,89],{},[13,84,75],{}," unless ",[13,87,88],{},"XDG_DATA_HOME"," is set",[10,91,92,93,96,97,100],{},"There is no separate override variable. A different ",[13,94,95],{},"--data-dir"," or\n",[13,98,99],{},"JAWB_DATA_DIR"," moves the config file with everything else, so a scratch\ndaemon never reads your real configuration.",[10,102,103,104,106,107,110],{},"The file is optional: without it, every key has its default. ",[13,105,15],{},"\ncreates it the first time you change a key (",[13,108,109],{},"jawb config set",", or the API\nbelow), with a first line that links back to this page. It reads the\nfile when it starts and when you ask it to reload (below); it does not\nwatch the file, so a hand edit takes effect on the next reload or start.",[10,112,113,114,117,118,121,122,124,125,128],{},"A broken file never stops the daemon and never makes it weaker. An\nunparseable file gives every key its default and the warning\n",[13,115,116],{},"W_CONFIG_INVALID"," (with line and column). An unknown key is ignored\nwith ",[13,119,120],{},"W_CONFIG_UNKNOWN_KEY",". A known key with a bad value takes its\ndefault, with ",[13,123,116],{},". The warnings appear in\n",[13,126,127],{},"GET \u002Fv1\u002Fstatus",". No flag or environment variable overrides a key.",[130,131,136],"pre",{"className":132,"code":133,"language":134,"meta":135,"style":135},"language-toml shiki shiki-themes github-light github-dark","# jawb configuration. Docs: https:\u002F\u002Fjawb.app\u002Fdocs\u002Fconfig\nversion = 1\n\n[purchase]\ngate = \"approve\"        # deny | approve | allow\ndetection = \"strict\"    # strict | standard\n\n[approval]\nassurance = \"verified-if-available\"\nchannels = [\"desktop\", \"prompt\", \"terminal\"]\ntimeout_s = 120\n\n[egress]\nallow_private_default = false\n\n[profiles.shopping.purchase]\ngate = \"deny\"           # this profile never buys\n","toml","",[13,137,138,146,152,159,165,171,177,182,188,194,200,206,211,217,223,228,234],{"__ignoreMap":135},[139,140,143],"span",{"class":141,"line":142},"line",1,[139,144,145],{},"# jawb configuration. Docs: https:\u002F\u002Fjawb.app\u002Fdocs\u002Fconfig\n",[139,147,149],{"class":141,"line":148},2,[139,150,151],{},"version = 1\n",[139,153,155],{"class":141,"line":154},3,[139,156,158],{"emptyLinePlaceholder":157},true,"\n",[139,160,162],{"class":141,"line":161},4,[139,163,164],{},"[purchase]\n",[139,166,168],{"class":141,"line":167},5,[139,169,170],{},"gate = \"approve\"        # deny | approve | allow\n",[139,172,174],{"class":141,"line":173},6,[139,175,176],{},"detection = \"strict\"    # strict | standard\n",[139,178,180],{"class":141,"line":179},7,[139,181,158],{"emptyLinePlaceholder":157},[139,183,185],{"class":141,"line":184},8,[139,186,187],{},"[approval]\n",[139,189,191],{"class":141,"line":190},9,[139,192,193],{},"assurance = \"verified-if-available\"\n",[139,195,197],{"class":141,"line":196},10,[139,198,199],{},"channels = [\"desktop\", \"prompt\", \"terminal\"]\n",[139,201,203],{"class":141,"line":202},11,[139,204,205],{},"timeout_s = 120\n",[139,207,209],{"class":141,"line":208},12,[139,210,158],{"emptyLinePlaceholder":157},[139,212,214],{"class":141,"line":213},13,[139,215,216],{},"[egress]\n",[139,218,220],{"class":141,"line":219},14,[139,221,222],{},"allow_private_default = false\n",[139,224,226],{"class":141,"line":225},15,[139,227,158],{"emptyLinePlaceholder":157},[139,229,231],{"class":141,"line":230},16,[139,232,233],{},"[profiles.shopping.purchase]\n",[139,235,237],{"class":141,"line":236},17,[139,238,239],{},"gate = \"deny\"           # this profile never buys\n",[18,241,243],{"id":242},"keys","Keys",[33,245,246,262],{},[36,247,248],{},[39,249,250,253,256,259],{},[42,251,252],{},"Key",[42,254,255],{},"Values",[42,257,258],{},"Default",[42,260,261],{},"Safety key",[49,263,264,283,309,330,354,381,398,420,437],{},[39,265,266,271,276,280],{},[54,267,268],{},[13,269,270],{},"version",[54,272,273],{},[13,274,275],{},"1",[54,277,278],{},[13,279,275],{},[54,281,282],{},"no",[39,284,285,290,302,306],{},[54,286,287],{},[13,288,289],{},"purchase.gate",[54,291,292,295,296,295,299],{},[13,293,294],{},"deny",", ",[13,297,298],{},"approve",[13,300,301],{},"allow",[54,303,304],{},[13,305,298],{},[54,307,308],{},"yes",[39,310,311,316,324,328],{},[54,312,313],{},[13,314,315],{},"purchase.detection",[54,317,318,295,321],{},[13,319,320],{},"strict",[13,322,323],{},"standard",[54,325,326],{},[13,327,320],{},[54,329,308],{},[39,331,332,337,348,352],{},[54,333,334],{},[13,335,336],{},"approval.assurance",[54,338,339,295,342,295,345],{},[13,340,341],{},"verified",[13,343,344],{},"verified-if-available",[13,346,347],{},"asserted",[54,349,350],{},[13,351,344],{},[54,353,308],{},[39,355,356,361,374,379],{},[54,357,358],{},[13,359,360],{},"approval.channels",[54,362,363,364,295,367,295,370,373],{},"an ordered list drawn from ",[13,365,366],{},"desktop",[13,368,369],{},"prompt",[13,371,372],{},"terminal",", no duplicates; may be empty",[54,375,376],{},[13,377,378],{},"[\"desktop\", \"prompt\", \"terminal\"]",[54,380,282],{},[39,382,383,388,391,396],{},[54,384,385],{},[13,386,387],{},"approval.timeout_s",[54,389,390],{},"integer, 30 to 600",[54,392,393],{},[13,394,395],{},"120",[54,397,282],{},[39,399,400,405,414,418],{},[54,401,402],{},[13,403,404],{},"egress.allow_private_default",[54,406,407,410,411],{},[13,408,409],{},"true"," or ",[13,412,413],{},"false",[54,415,416],{},[13,417,413],{},[54,419,282],{},[39,421,422,427,432,435],{},[54,423,424],{},[13,425,426],{},"profiles.\u003Cname>.purchase.gate",[54,428,429,430],{},"as ",[13,431,289],{},[54,433,434],{},"unset: the profile uses the global value",[54,436,308],{},[39,438,439,444,448,450],{},[54,440,441],{},[13,442,443],{},"profiles.\u003Cname>.purchase.detection",[54,445,429,446],{},[13,447,315],{},[54,449,434],{},[54,451,308],{},[453,454,455,475,487,499,506],"ul",{},[456,457,458,463,464,468,469,474],"li",{},[459,460,461],"strong",{},[13,462,289],{}," and ",[459,465,466],{},[13,467,315],{},": see\n",[470,471,473],"a",{"href":472},"\u002Fdocs\u002Fcli\u002Fpolicy#the-purchase-gate","the purchase gate",". A profile's value\noverrides the global one; incognito sessions use the global one.",[456,476,477,481,482,486],{},[459,478,479],{},[13,480,336],{},": whether approvals must be verified by the\noperating system. See ",[470,483,485],{"href":484},"\u002Fdocs\u002Fcli\u002Fpolicy#assurance-labels","assurance labels",".",[456,488,489,493,494,496,497,486],{},[459,490,491],{},[13,492,360],{},": the order in which approval channels are tried.\nA channel only requests verification; ",[13,495,336],{}," decides\nwhether verification is required. An empty list means nothing can\napprove, which has the same effect as ",[13,498,294],{},[456,500,501,505],{},[459,502,503],{},[13,504,387],{},": how long a held action or setting change waits\nfor a human.",[456,507,508,512,513,516,517,520,521,523],{},[459,509,510],{},[13,511,404],{},": whether a public page may reach local\nand private-network addresses (the ",[13,514,515],{},"--allow-private"," rule) for a profile\nthat has no setting of its own, and for incognito sessions. A profile's\nown setting (",[13,518,519],{},"jawb profile settings",") wins. The addresses that are\nalways refused (link-local, cloud metadata, ",[13,522,15],{},"'s own control port)\nstay refused whatever this says.",[18,525,527],{"id":526},"the-floor-rule","The floor rule",[10,529,530],{},"For each safety key, the floor is its built-in default.",[453,532,533,563,583],{},[456,534,535,536,538,539,538,541,543,544,546,547,538,549,551,552,554,555,538,557,538,559,543,561,486],{},"A file value equal to or stronger than the default applies immediately.\nThe order, strongest first, is ",[13,537,294],{}," > ",[13,540,298],{},[13,542,301],{}," for\n",[13,545,289],{},"; ",[13,548,320],{},[13,550,323],{}," for ",[13,553,315],{},"; and\n",[13,556,341],{},[13,558,344],{},[13,560,347],{},[13,562,336],{},[456,564,565,566,570,571,573,574,577,578,582],{},"A value weaker than the default is ",[567,568,569],"em",{},"unconfirmed",". The default stays in\nforce, and ",[13,572,15],{}," holds one pending confirmation of class ",[13,575,576],{},"config",". A\nhuman approves or denies it through the same channels as a purchase\n(see ",[470,579,581],{"href":580},"\u002Fdocs\u002Fcli\u002Fpolicy#approval-channels","Policy and confirmation","). Once\napproved, the weaker values apply until the daemon exits or the file is\nreloaded with different values. A deny, or the timeout, leaves the\ndefaults in force.",[456,584,585,586,589],{},"This happens on every daemon start with a weaker-than-default file. That\nis deliberate: nothing stored on disk is trusted to say \"a human\nagreed\", so an agent that can edit ",[13,587,588],{},"config.toml"," and restart the daemon\nstill cannot switch the gate off without a person.",[10,591,592,595,596,599,600,602,603,605,606,608],{},[459,593,594],{},"Known limit."," The floor is the default, not your last choice. If you\nset ",[13,597,598],{},"purchase.gate = \"deny\"",", a program running as you can edit it back to\n",[13,601,298],{}," without asking, because ",[13,604,298],{}," is not below the floor. You\nwould still be asked about every purchase. And on a host with no OS\nverifier (macOS and Linux today), the confirmation of a weakening is only\n",[13,607,347],{},", so a program running as you can confirm it.",[10,610,611,613,614,616,617,619,620,623,624,627,628,486],{},[13,612,127],{}," reports the effective ",[13,615,289],{}," and\n",[13,618,315],{},", lists unconfirmed keys, and warns\n",[13,621,622],{},"W_CONFIG_UNCONFIRMED"," while any are waiting and ",[13,625,626],{},"W_PURCHASE_UNGATED"," while\nthe effective gate is ",[13,629,301],{},[18,631,633,634,637],{"id":632},"the-v1config-api","The ",[13,635,636],{},"\u002Fv1\u002Fconfig"," API",[10,639,640,641,644,645,648],{},"Every route needs the bearer token and refuses an ",[13,642,643],{},"Origin"," header, like all\n",[13,646,647],{},"\u002Fv1"," routes (daemon API level 11 or later).",[33,650,651,664],{},[36,652,653],{},[39,654,655,658,661],{},[42,656,657],{},"Route",[42,659,660],{},"Body",[42,662,663],{},"Result",[49,665,666,720,748],{},[39,667,668,673,676],{},[54,669,670],{},[13,671,672],{},"GET \u002Fv1\u002Fconfig",[54,674,675],{},"none",[54,677,678,681,682,295,685,295,688,295,691,295,694,463,697,700,701,295,703,410,706,708,709,712,713,715,716,719],{},[13,679,680],{},"{path, version, keys, pending, warnings}",". Each key row has ",[13,683,684],{},"key",[13,686,687],{},"default",[13,689,690],{},"file",[13,692,693],{},"effective",[13,695,696],{},"safety",[13,698,699],{},"state"," (",[13,702,687],{},[13,704,705],{},"set",[13,707,569],{},"). ",[13,710,711],{},"pending"," is the waiting ",[13,714,576],{}," confirmation or ",[13,717,718],{},"null",". Profile overrides follow the global keys.",[39,721,722,727,733],{},[54,723,724],{},[13,725,726],{},"PUT \u002Fv1\u002Fconfig",[54,728,729,732],{},[13,730,731],{},"{\"set\": {\u003Ckey>: \u003Cvalue>}, \"unset\": [\u003Ckey>]}",", both optional; unknown fields are refused",[54,734,735,736,739,740,743,744,747],{},"Writes the file and applies it. Returns the ",[13,737,738],{},"GET"," shape, or, when a change is weaker than its floor, ",[13,741,742],{},"E_CONFIRMATION_REQUIRED"," (HTTP 428) with ",[13,745,746],{},"details: {class: \"config\", pending, summary: {changes}, digest, expires_in_ms, hint}",". The other changes in the same request are already applied.",[39,749,750,755,760],{},[54,751,752],{},[13,753,754],{},"POST \u002Fv1\u002Fconfig\u002Freload",[54,756,757],{},[13,758,759],{},"{}",[54,761,762,763,486],{},"Re-reads the file, with the same reply as ",[13,764,765],{},"PUT",[10,767,768,769,772,773,776,777,772,779,782,783,295,786,295,789,463,792,795,796,798,799,802,803,805,806,808,809,486],{},"An unknown key is ",[13,770,771],{},"E_USAGE"," with ",[13,774,775],{},"reason: \"unknown_key\"",", a bad value\n",[13,778,771],{},[13,780,781],{},"reason: \"invalid_value\"",", and in both cases nothing is\nwritten. Booleans also accept ",[13,784,785],{},"\"true\"",[13,787,788],{},"\"false\"",[13,790,791],{},"\"on\"",[13,793,794],{},"\"off\"",",\nintegers a numeric string, and ",[13,797,360],{}," a comma-separated\nstring. ",[13,800,801],{},"unset"," returns a key to its default. A newer ",[13,804,765],{}," or reload\nreplaces a waiting ",[13,807,576],{}," confirmation, and the old one is reported as\ndenied with ",[13,810,811],{},"reason: \"superseded\"",[130,813,817],{"className":814,"code":815,"language":816,"meta":135,"style":135},"language-bash shiki shiki-themes github-light github-dark","$ curl -s -H \"Authorization: Bearer $(cat \"$JAWB_DATA_DIR\u002Fdaemon.token\")\" \\\n    http:\u002F\u002F127.0.0.1:4180\u002Fv1\u002Fconfig\n","bash",[13,818,819,855],{"__ignoreMap":135},[139,820,821,825,829,833,836,839,842,845,849,852],{"class":141,"line":142},[139,822,824],{"class":823},"sScJk","$",[139,826,828],{"class":827},"sZZnC"," curl",[139,830,832],{"class":831},"sj4cs"," -s",[139,834,835],{"class":831}," -H",[139,837,838],{"class":827}," \"Authorization: Bearer $(",[139,840,841],{"class":823},"cat",[139,843,844],{"class":827}," \"",[139,846,848],{"class":847},"sVt8B","$JAWB_DATA_DIR",[139,850,851],{"class":827},"\u002Fdaemon.token\")\"",[139,853,854],{"class":831}," \\\n",[139,856,857],{"class":141,"line":148},[139,858,859],{"class":827},"    http:\u002F\u002F127.0.0.1:4180\u002Fv1\u002Fconfig\n",[18,861,633,863,866],{"id":862},"the-jawb-config-command",[13,864,865],{},"jawb config"," command",[868,869,870],"blockquote",{},[10,871,872,873,875],{},"Available from jawb 0.1.1. Release 0.1.0 has no ",[13,874,865],{},"; use the\nAPI above or edit the file.",[33,877,878,888],{},[36,879,880],{},[39,881,882,885],{},[42,883,884],{},"Command",[42,886,887],{},"What it does",[49,889,890,903,921,934,959,969],{},[39,891,892,897],{},[54,893,894],{},[13,895,896],{},"jawb config path",[54,898,899,900,902],{},"Prints ",[13,901,26],{},". Local; does not contact the daemon.",[39,904,905,910],{},[54,906,907],{},[13,908,909],{},"jawb config show",[54,911,912,913,916,917,920],{},"Shows every key: the effective value, the default, whether it is a safety key, and a note with the file value when it differs. Unconfirmed keys are flagged with their pending ID. Profile overrides follow the global keys. ",[13,914,915],{},"-q"," prints ",[13,918,919],{},"key=value"," lines.",[39,922,923,928],{},[54,924,925],{},[13,926,927],{},"jawb config get \u003Ckey>",[54,929,930,931,933],{},"The effective value, plus the file value and pending ID when they differ. A profile override that is not set reports the global value it uses. ",[13,932,915],{}," prints the value only.",[39,935,936,941],{},[54,937,938],{},[13,939,940],{},"jawb config set \u003Ckey> \u003Cvalue>",[54,942,943,944,295,946,295,948,295,951,954,955,958],{},"Sets a key. Booleans accept ",[13,945,409],{},[13,947,413],{},[13,949,950],{},"on",[13,952,953],{},"off","; integers a number; lists are comma-separated, for example ",[13,956,957],{},"desktop,terminal"," (an empty string is the empty list). Prints the key's new line.",[39,960,961,966],{},[54,962,963],{},[13,964,965],{},"jawb config unset \u003Ckey>",[54,967,968],{},"Returns a key to its default. Never needs approval.",[39,970,971,976],{},[54,972,973],{},[13,974,975],{},"jawb config reload",[54,977,978],{},"Re-reads the file.",[10,980,981,982,985,986,988,989,992,993,995,996,999,1000,1002,1003,463,1005,1007,1008,1011,1012,1014],{},"Every command takes ",[13,983,984],{},"--json"," for the usual envelope. The ",[13,987,984],{}," result of\n",[13,990,991],{},"show"," is the ",[13,994,672],{}," shape; ",[13,997,998],{},"get"," returns that key's row (plus\n",[13,1001,711],{}," while it is unconfirmed); ",[13,1004,705],{},[13,1006,801],{}," add ",[13,1009,1010],{},"changed"," (the\nkey) to the ",[13,1013,738],{}," shape.",[130,1016,1021],{"className":1017,"code":1019,"language":1020,"meta":135},[1018],"language-text","$ jawb config get purchase.gate\npurchase.gate = approve (file: allow, unconfirmed, pending pc_7m2kq4x9d1ab)\n","text",[13,1022,1019],{"__ignoreMap":135},[10,1024,1025,1026,410,1028,1031,1032,1035,1036,1038],{},"When ",[13,1027,705],{},[13,1029,1030],{},"reload"," would weaken a safety setting, the file is saved\nbut the default stays in force, and jawb shows the changes. On an\ninteractive terminal it asks you to type ",[13,1033,1034],{},"weaken"," to approve, or ",[13,1037,294],{},":",[130,1040,1043],{"className":1041,"code":1042,"language":1020,"meta":135},[1018],"$ jawb config set purchase.gate allow\njawb: this change WEAKENS a safety setting and needs a human (pc_7m2kq4x9d1ab):\n  purchase.gate: approve -> allow\n  the file is saved; until you approve, the default stays in force\n  approving applies it until jawbd exits; denying keeps the default\nType `weaken` to approve it, or `deny` to decline it: weaken\njawb: Verify with Windows Hello on this computer to finish the approval (up to 120s)...\napproved pc_7m2kq4x9d1ab (confirmed via tty-verified: the operating system verified you)\npurchase.gate = allow\n",[13,1044,1042],{"__ignoreMap":135},[10,1046,1047,1048,1050,1051,1053,1054,1057,1058,1060,1061,1064,1065,1067,1068,1070,1071,1073,1074,1077,1078,1081,1082,1084,1085,1087,1088,1091],{},"After ",[13,1049,1034],{},", the approval goes through the normal confirmation flow:\nwhere ",[13,1052,15],{}," has an OS verifier (Windows Hello), it raises the prompt and\njawb waits for it, and the result shows the\n",[470,1055,1056],{"href":484},"assurance label",". ",[13,1059,294],{}," declines it\n(exit 5; the default stays in force). Any other answer leaves it pending\nuntil it expires (exit 5). ",[13,1062,1063],{},"--yes"," never answers this prompt. In ",[13,1066,984],{},"\nmode, without a terminal, or with ",[13,1069,1063],{},", jawb exits 5\n(",[13,1072,742],{},") with the pending ID in ",[13,1075,1076],{},"details.pending",", and\na human runs ",[13,1079,1080],{},"jawb confirm \u003Cpc_id>"," in their own terminal and types\n",[13,1083,1034],{},". The CLI refuses a ",[13,1086,15],{}," older than the configuration API\n(API level 11) with ",[13,1089,1090],{},"E_VERSION_MISMATCH"," (exit 3).",[1093,1094,1095],"style",{},"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 .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":135,"searchDepth":148,"depth":148,"links":1097},[1098,1099,1100,1101,1103],{"id":20,"depth":148,"text":21},{"id":242,"depth":148,"text":243},{"id":526,"depth":148,"text":527},{"id":632,"depth":148,"text":1102},"The \u002Fv1\u002Fconfig API",{"id":862,"depth":148,"text":1104},"The jawb config command","jawbd's config.toml: the purchase gate, approvals, and local-network access.","md",{},null,"\u002Fdocs\u002Fconfig",{"title":5,"description":1105},"docs\u002F5.config","eLgBaNplSfNeb_luBoe1a8vlwKmidPrr3AH7PIPf90M",[1114],{"title":1115,"path":1116,"stem":1117,"children":1118},"Documentation","\u002Fdocs","docs\u002F1.index",[1119,1120,1124,1128,1132,1154,1195,1209,1210,1214,1218,1222],{"title":1115,"path":1116,"stem":1117},{"title":1121,"path":1122,"stem":1123},"Protocol adapters","\u002Fdocs\u002Fprotocol","docs\u002F10.protocol",{"title":1125,"path":1126,"stem":1127},"Extensions","\u002Fdocs\u002Fextensions","docs\u002F11.extensions",{"title":1129,"path":1130,"stem":1131},"Roadmap and status","\u002Fdocs\u002Froadmap","docs\u002F12.roadmap",{"title":1133,"path":1134,"stem":1135,"children":1136},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F2.getting-started\u002F1.index",[1137,1138,1142,1146,1150],{"title":1133,"path":1134,"stem":1135},{"title":1139,"path":1140,"stem":1141},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F2.getting-started\u002F2.installation",{"title":1143,"path":1144,"stem":1145},"Desktop app","\u002Fdocs\u002Fgetting-started\u002Fdesktop-app","docs\u002F2.getting-started\u002F3.desktop-app",{"title":1147,"path":1148,"stem":1149},"Running the daemon","\u002Fdocs\u002Fgetting-started\u002Frunning-the-daemon","docs\u002F2.getting-started\u002F4.running-the-daemon",{"title":1151,"path":1152,"stem":1153},"Using the CLI","\u002Fdocs\u002Fgetting-started\u002Fusing-the-cli","docs\u002F2.getting-started\u002F5.using-the-cli",{"title":1155,"path":1156,"stem":1157,"children":1158},"CLI reference","\u002Fdocs\u002Fcli","docs\u002F3.cli\u002F1.index",[1159,1160,1164,1168,1172,1176,1180,1184,1188,1191],{"title":1155,"path":1156,"stem":1157},{"title":1161,"path":1162,"stem":1163},"JSON envelope and exit codes","\u002Fdocs\u002Fcli\u002Fjson-and-exit-codes","docs\u002F3.cli\u002F10.json-and-exit-codes",{"title":1165,"path":1166,"stem":1167},"jawb status","\u002Fdocs\u002Fcli\u002Fstatus","docs\u002F3.cli\u002F2.status",{"title":1169,"path":1170,"stem":1171},"Tabs, profiles and sessions","\u002Fdocs\u002Fcli\u002Ftabs-and-profiles","docs\u002F3.cli\u002F3.tabs-and-profiles",{"title":1173,"path":1174,"stem":1175},"jawb observe [\u003Curl>] [--full] [--interactive-only] [--js]","\u002Fdocs\u002Fcli\u002Fobserve","docs\u002F3.cli\u002F4.observe",{"title":1177,"path":1178,"stem":1179},"jawb read [--format md|text|json] [--element \u003Cid>] [--full] [--js]","\u002Fdocs\u002Fcli\u002Fread","docs\u002F3.cli\u002F5.read",{"title":1181,"path":1182,"stem":1183},"Act commands","\u002Fdocs\u002Fcli\u002Fact","docs\u002F3.cli\u002F6.act",{"title":1185,"path":1186,"stem":1187},"See commands","\u002Fdocs\u002Fcli\u002Fsee","docs\u002F3.cli\u002F7.see",{"title":581,"path":1189,"stem":1190},"\u002Fdocs\u002Fcli\u002Fpolicy","docs\u002F3.cli\u002F8.policy",{"title":1192,"path":1193,"stem":1194},"Install lifecycle and profile settings","\u002Fdocs\u002Fcli\u002Flifecycle","docs\u002F3.cli\u002F9.lifecycle",{"title":1196,"path":1197,"stem":1198,"children":1199},"SDK reference","\u002Fdocs\u002Fsdk","docs\u002F4.sdk\u002F1.index",[1200,1201,1205],{"title":1196,"path":1197,"stem":1198},{"title":1202,"path":1203,"stem":1204},"Rust SDK — jawb-sdk-rust","\u002Fdocs\u002Fsdk\u002Frust-sdk","docs\u002F4.sdk\u002F2.rust-sdk",{"title":1206,"path":1207,"stem":1208},"Website SDK — @4hum-ai\u002Fjawb-sdk","\u002Fdocs\u002Fsdk\u002Fwebsite-sdk","docs\u002F4.sdk\u002F3.website-sdk",{"title":5,"path":1109,"stem":1111},{"title":1211,"path":1212,"stem":1213},"WebMCP","\u002Fdocs\u002Fwebmcp","docs\u002F6.webmcp",{"title":1215,"path":1216,"stem":1217},"Agents","\u002Fdocs\u002Fagents","docs\u002F7.agents",{"title":1219,"path":1220,"stem":1221},"MCP server","\u002Fdocs\u002Fmcp","docs\u002F8.mcp",{"title":1223,"path":1224,"stem":1225},"Security and trust","\u002Fdocs\u002Fsecurity","docs\u002F9.security",1792595702009]