[{"data":1,"prerenderedAt":894},["ShallowReactive",2],{"docs-sections":3,"docs-page-\u002Fdocs\u002Fcli-values":123},[4,9,13,17,22,26,30,34,38,42,46,50,55,59,63,67,72,76,80,85,89,93,97,102,106,110,114,119],{"path":5,"title":6,"description":7,"group":8},"\u002Fdocs","Introduction","What tunables is, the problem it solves, and the principles it holds to.","Get started",{"path":10,"title":11,"description":12,"group":8},"\u002Fdocs\u002Fquickstart","Quickstart","Take one group of settings from constants to a screen with a history, in a Nuxt app on Postgres.",{"path":14,"title":15,"description":16,"group":8},"\u002Fdocs\u002Fpatterns","What it is for","The kinds of value tunables keeps — live limits, plans, per-workspace and per-person values, model choices, values that bound each other, costly switches — and the feature that does each.",{"path":18,"title":19,"description":20,"group":21},"\u002Fdocs\u002Fsettings-and-groups","Settings and groups","Declare each setting once, in a group edited beside what it affects, and read it with types.","Concepts",{"path":23,"title":24,"description":25,"group":21},"\u002Fdocs\u002Fkinds-and-units","Kinds and units","The eight kinds of setting, the built-in units, your own units, and how values are checked and read.",{"path":27,"title":28,"description":29,"group":21},"\u002Fdocs\u002Fchecks-and-guards","Checks and guards","Rules across settings, guards for what your app keeps, within for presets, confirmations for costly changes, and notes.",{"path":31,"title":32,"description":33,"group":21},"\u002Fdocs\u002Fhistory-and-restore","History and restore","Every change is a revision with who, when, why and each value before and after; restoring one runs the same checks as any save.",{"path":35,"title":36,"description":37,"group":21},"\u002Fdocs\u002Fpresets","Presets","Named, reusable configurations with one default per slot, assigned by reference and bounded by the settings.",{"path":39,"title":40,"description":41,"group":21},"\u002Fdocs\u002Fscopes","Scopes","Values per workspace and per person, through layers — the system, a plan, the workspace, the person — each bounded by what it inherits.",{"path":43,"title":44,"description":45,"group":21},"\u002Fdocs\u002Fcatalogs","Catalogs","Lists of allowed choices, such as permitted models, whose entries are retired rather than deleted and cannot be retired while in use.",{"path":47,"title":48,"description":49,"group":21},"\u002Fdocs\u002Fdeployment-values","Deployment values","Values a deployment sets in its environment and nobody tunes while the app runs, declared once and listed in .env.example.",{"path":51,"title":52,"description":53,"group":54},"\u002Fdocs\u002Fstorage","Storage","Postgres through your own client, the four tables and how to create them, joining your transactions, and the storage contract behind it.","Integrate",{"path":56,"title":57,"description":58,"group":54},"\u002Fdocs\u002Fserver","Server and access","Mount tunables' API as a fetch handler in Nitro, Hono, Bun or Deno, as Express middleware or as an oRPC router, with access decided by your app.",{"path":60,"title":61,"description":62,"group":54},"\u002Fdocs\u002Faccess","Who can do what","End users bound by values they never see, staff who tune groups, owners and members who change only their own scope, and the terminal.",{"path":64,"title":65,"description":66,"group":54},"\u002Fdocs\u002Ftesting","Testing","Your app's tunables in memory for its own tests, with values set where a test needs them, and how to test rules, guards and confirmations.",{"path":68,"title":69,"description":70,"group":71},"\u002Fdocs\u002Fnuxt-layer","The Nuxt layer","Ready screens for a Nuxt UI app — a group's form, All settings, history, presets, assignments and catalogs — placed beside what they affect.","Screens",{"path":73,"title":74,"description":75,"group":71},"\u002Fdocs\u002Fvue-composables","Vue composables","Headless composables for building tunables' screens in any Vue app, on any design system.",{"path":77,"title":78,"description":79,"group":71},"\u002Fdocs\u002Ftheming","Theming","The screens bring no colors, fonts or CSS of their own; they take your Nuxt UI theme.",{"path":81,"title":82,"description":83,"group":84},"\u002Fdocs\u002Fcli","The CLI","The tunables command, tunables.config.ts, and which commands need a database.","CLI",{"path":86,"title":87,"description":88,"group":84},"\u002Fdocs\u002Fcli-check","Check and generate","The commands that need no database — checking definitions, writing .env.example, and keeping explanations and defaults in step with a pdd-kit Product Model.",{"path":90,"title":91,"description":92,"group":84},"\u002Fdocs\u002Fcli-values","Read and change values","The commands that read and change stored values, through the same checks and history as the screens.",{"path":94,"title":95,"description":96,"group":84},"\u002Fdocs\u002Fcli-skills","Install skills","Install tunables' agent skills for Claude Code, Codex CLI, Cursor, Gemini CLI and GitHub Copilot, and keep them current.",{"path":98,"title":99,"description":100,"group":101},"\u002Fdocs\u002Fskills","Agent skills","Three skills that let a coding agent adopt tunables, define settings the right way and verify that every value has one home.","Skills",{"path":103,"title":104,"description":105,"group":101},"\u002Fdocs\u002Fskill-adopt","tunables-adopt","Bring tunables into an app that has none yet, from an inventory of every value to a wired, synced app with the old homes removed.",{"path":107,"title":108,"description":109,"group":101},"\u002Fdocs\u002Fskill-define","tunables-define","Add, change, rename or remove one value in an app that uses tunables, with its home, its checks, its reads and what happens to stored values.",{"path":111,"title":112,"description":113,"group":101},"\u002Fdocs\u002Fskill-verify","tunables-verify","Audit an app's tunables against their rules, report every finding with where it is and the rule it breaks, and fix only the findings you choose.",{"path":115,"title":116,"description":117,"group":118},"\u002Fdocs\u002Fapi","API reference","Every export of the tunables package, by the subpath it is imported from.","Reference",{"path":120,"title":121,"description":122,"group":118},"\u002Fdocs\u002Ftasklane-example","Tasklane, the example app","A todo app with workspaces and people as tunables — two groups, plans as a layer, a catalog of models, scopes, a rule, a confirmation, and the playground that runs it.",{"id":124,"title":91,"body":125,"description":92,"extension":887,"group":84,"meta":888,"navigation":889,"order":890,"path":90,"seo":891,"stem":892,"__hash__":893},"docs\u002Fdocs\u002Fcli-values.md",{"type":126,"value":127,"toc":877},"minimark",[128,133,150,172,176,201,204,233,241,249,254,256,319,322,328,335,358,364,366,428,442,471,477,482,496,585,591,599,610,612,660,670,676,678,704,720,723,753,825,855,873],[129,130,132],"h1",{"id":131},"read-and-change-values-sync-get-set-history-restore","Read and change values: sync, get, set, history, restore",[134,135,136,137,141,142,149],"p",{},"These commands call ",[138,139,140],"code",{},"connect"," in your ",[143,144,146],"a",{"href":145},".\u002Fcli#tunablesconfigts",[138,147,148],{},"tunables.config.ts","\nand work on your app's own tunables, over its own store. A change from here\ngoes through exactly the checks a save from a screen does, and is recorded the\nsame way, with your username and the reason you give.",[134,151,152,155,156,155,159,162,163,166,167,171],{},[138,153,154],{},"get",", ",[138,157,158],{},"set",[138,160,161],{},"history"," and ",[138,164,165],{},"restore"," can instead go through your app's API;\nsee ",[143,168,170],{"href":169},"#through-your-apps-api","Through your app's API",".",[173,174,175],"h2",{"id":175},"sync",[177,178,183],"pre",{"className":179,"code":180,"language":181,"meta":182,"style":182},"language-bash shiki shiki-themes tunables-panel-light tunables-panel-light tunables-panel-dark","npx tunables sync\n","bash","",[138,184,185],{"__ignoreMap":182},[186,187,190,194,198],"span",{"class":188,"line":189},"line",1,[186,191,193],{"class":192},"sOThN","npx",[186,195,197],{"class":196},"sjCzm"," tunables",[186,199,200],{"class":196}," sync\n",[134,202,203],{},"Brings the stored values in line with the definitions, without changing any\nvalue that is already stored:",[205,206,207,211,214,217,224,230],"ul",{},[208,209,210],"li",{},"stores each new group at its defaults;",[208,212,213],{},"adds each new field to a stored group at its default;",[208,215,216],{},"adds each new preset field to every stored preset at its default;",[208,218,219,220,223],{},"creates a default preset for each slot that has none, from the set's ",[138,221,222],{},"seed",";",[208,225,226,227,229],{},"adds a catalog's ",[138,228,222],{}," entries when the catalog is empty;",[208,231,232],{},"reports stored fields no definition declares any more. It keeps them; it\nnever drops a value silently.",[177,234,239],{"className":235,"code":237,"language":238},[236],"language-text","✓ seeded workspace with its defaults\n✓ added limits.attachmentMb with its default\n✓ created free in plans, the plan default\n✓ created pro in plans\n✓ created team in plans\n! limits.maxMembers is stored but no definition declares it; it was kept.\n","text",[138,240,237],{"__ignoreMap":182},[134,242,243,245,246,248],{},[138,244,175],{}," touches only the system values; a scope's own values are never seeded.\nEach addition is a revision. Run ",[138,247,175],{}," in every deploy, after the tables exist\nand before the new code serves: a group that was never synced, or a field that\nwas never added, cannot be read. It is safe to run any number of times.",[134,250,251,252,171],{},"Changing a definition never changes a stored value. A new default applies to\nnew environments; an environment that should move to it needs a ",[138,253,158],{},[173,255,154],{"id":154},[177,257,259],{"className":179,"code":258,"language":181,"meta":182,"style":182},"npx tunables get limits\nnpx tunables get limits maxProjects\nnpx tunables get limits --json\nnpx tunables get limits --scope workspace=acme\n",[138,260,261,273,288,302],{"__ignoreMap":182},[186,262,263,265,267,270],{"class":188,"line":189},[186,264,193],{"class":192},[186,266,197],{"class":196},[186,268,269],{"class":196}," get",[186,271,272],{"class":196}," limits\n",[186,274,276,278,280,282,285],{"class":188,"line":275},2,[186,277,193],{"class":192},[186,279,197],{"class":196},[186,281,269],{"class":196},[186,283,284],{"class":196}," limits",[186,286,287],{"class":196}," maxProjects\n",[186,289,291,293,295,297,299],{"class":188,"line":290},3,[186,292,193],{"class":192},[186,294,197],{"class":196},[186,296,269],{"class":196},[186,298,284],{"class":196},[186,300,301],{"class":196}," --json\n",[186,303,305,307,309,311,313,316],{"class":188,"line":304},4,[186,306,193],{"class":192},[186,308,197],{"class":196},[186,310,269],{"class":196},[186,312,284],{"class":196},[186,314,315],{"class":196}," --scope",[186,317,318],{"class":196}," workspace=acme\n",[134,320,321],{},"Prints a group's stored values as they read, marking each one that differs from\nits default:",[177,323,326],{"className":324,"code":325,"language":238},[236],"maxProjects          5  (default 3)\nmaxTasksPerProject   200\nattachmentMb         10 MB\naiSuggestionsPerDay  20\n",[138,327,325],{"__ignoreMap":182},[134,329,330,331,334],{},"With a key, only that value. ",[138,332,333],{},"--json"," prints the raw values.",[134,336,337,340,341,345,346,349,350,353,354,357],{},[138,338,339],{},"--scope"," reads at a ",[143,342,344],{"href":343},".\u002Fscopes","scope",", written as ",[138,347,348],{},"scope=id"," pairs\nseparated by commas, broadest first: ",[138,351,352],{},"workspace=acme"," or\n",[138,355,356],{},"workspace=acme,user=dana",". Each field the scope may set says where its value\ncomes from:",[177,359,362],{"className":360,"code":361,"language":238},[236],"maxProjects          20  (set here; inherits 50 from Pro plan)\nmaxTasksPerProject   5,000  (from Pro plan)\nattachmentMb         100 MB  (from Pro plan)\naiSuggestionsPerDay  100  (from Pro plan)\n",[138,363,361],{"__ignoreMap":182},[173,365,158],{"id":158},[177,367,369],{"className":179,"code":368,"language":181,"meta":182,"style":182},"npx tunables set limits maxProjects=5 --reason \"More room on the free tier\"\nnpx tunables set limits titleLength='{\"min\":1,\"max\":300}' --reason \"Longer titles\"\n",[138,370,371,398],{"__ignoreMap":182},[186,372,373,375,377,380,382,385,388,392,395],{"class":188,"line":189},[186,374,193],{"class":192},[186,376,197],{"class":196},[186,378,379],{"class":196}," set",[186,381,284],{"class":196},[186,383,384],{"class":196}," maxProjects=5",[186,386,387],{"class":196}," --reason",[186,389,391],{"class":390},"sp9ci"," \"",[186,393,394],{"class":196},"More room on the free tier",[186,396,397],{"class":390},"\"\n",[186,399,400,402,404,406,408,411,414,417,419,421,423,426],{"class":188,"line":275},[186,401,193],{"class":192},[186,403,197],{"class":196},[186,405,379],{"class":196},[186,407,284],{"class":196},[186,409,410],{"class":196}," titleLength=",[186,412,413],{"class":390},"'",[186,415,416],{"class":196},"{\"min\":1,\"max\":300}",[186,418,413],{"class":390},[186,420,387],{"class":196},[186,422,391],{"class":390},[186,424,425],{"class":196},"Longer titles",[186,427,397],{"class":390},[134,429,430,431,434,435,155,438,441],{},"Changes values as ",[138,432,433],{},"key=value",". A value that parses as JSON is read as JSON,\nso numbers, ",[138,436,437],{},"true",[138,439,440],{},"false",", and ranges or sizes written as objects work;\nanything else is text. Several assignments change the group at once, checked\ntogether.",[205,443,444,450,468],{},[208,445,446,449],{},[138,447,448],{},"--reason"," is required, and kept in the history.",[208,451,452,453,457,458,460,461,464,465,467],{},"When the change asks to be ",[143,454,456],{"href":455},".\u002Fchecks-and-guards#confirmations-for-costly-changes","confirmed",",\n",[138,459,158],{}," prints the question and asks at the terminal. ",[138,462,463],{},"--yes"," confirms it from\na script; without a terminal and without ",[138,466,463],{},", nothing is saved.",[208,469,470],{},"A refused change prints each problem and exits 1.",[177,472,475],{"className":473,"code":474,"language":238},[236],"Saved as revision 14.\n",[138,476,474],{"__ignoreMap":182},[478,479,481],"h3",{"id":480},"at-a-scope","At a scope",[134,483,484,486,487,491,492,495],{},[138,485,339],{}," makes the change at a scope, through the same checks, including the\nfield's ",[143,488,490],{"href":489},".\u002Fscopes#bounds","bound",". ",[138,493,494],{},"--inherit"," takes comma-separated keys\nthe scope stops overriding, so it uses the inherited value again. One command\nmay set some fields and inherit others:",[177,497,499],{"className":179,"code":498,"language":181,"meta":182,"style":182},"npx tunables set limits maxProjects=20 --scope workspace=acme --reason \"Keep Acme small while it trials\"\nnpx tunables set workspace reminderHour=7 --scope workspace=acme,user=dana --reason \"Dana starts early\"\nnpx tunables set limits --scope workspace=acme --inherit maxProjects,aiSuggestionsPerDay --reason \"Back to the plan\"\n",[138,500,501,528,556],{"__ignoreMap":182},[186,502,503,505,507,509,511,514,516,519,521,523,526],{"class":188,"line":189},[186,504,193],{"class":192},[186,506,197],{"class":196},[186,508,379],{"class":196},[186,510,284],{"class":196},[186,512,513],{"class":196}," maxProjects=20",[186,515,315],{"class":196},[186,517,518],{"class":196}," workspace=acme",[186,520,387],{"class":196},[186,522,391],{"class":390},[186,524,525],{"class":196},"Keep Acme small while it trials",[186,527,397],{"class":390},[186,529,530,532,534,536,539,542,544,547,549,551,554],{"class":188,"line":275},[186,531,193],{"class":192},[186,533,197],{"class":196},[186,535,379],{"class":196},[186,537,538],{"class":196}," workspace",[186,540,541],{"class":196}," reminderHour=7",[186,543,315],{"class":196},[186,545,546],{"class":196}," workspace=acme,user=dana",[186,548,387],{"class":196},[186,550,391],{"class":390},[186,552,553],{"class":196},"Dana starts early",[186,555,397],{"class":390},[186,557,558,560,562,564,566,568,570,573,576,578,580,583],{"class":188,"line":290},[186,559,193],{"class":192},[186,561,197],{"class":196},[186,563,379],{"class":196},[186,565,284],{"class":196},[186,567,315],{"class":196},[186,569,518],{"class":196},[186,571,572],{"class":196}," --inherit",[186,574,575],{"class":196}," maxProjects,aiSuggestionsPerDay",[186,577,387],{"class":196},[186,579,391],{"class":390},[186,581,582],{"class":196},"Back to the plan",[186,584,397],{"class":390},[177,586,589],{"className":587,"code":588,"language":238},[236],"✗ Projects may be at most 50 for Acme, the value it inherits.\n",[138,590,588],{"__ignoreMap":182},[134,592,593,595,596,598],{},[138,594,494],{}," needs ",[138,597,339],{},": only a scope inherits.",[134,600,601,603,604,162,607,171],{},[138,602,158],{}," changes groups. Presets and catalog entries change through the screens,\nthe API, or your code calling ",[138,605,606],{},"tunables.presets(id)",[138,608,609],{},"tunables.catalog(id)",[173,611,161],{"id":161},[177,613,615],{"className":179,"code":614,"language":181,"meta":182,"style":182},"npx tunables history limits\nnpx tunables history limits --limit 5 --json\nnpx tunables history limits --scope workspace=acme\n",[138,616,617,628,646],{"__ignoreMap":182},[186,618,619,621,623,626],{"class":188,"line":189},[186,620,193],{"class":192},[186,622,197],{"class":196},[186,624,625],{"class":196}," history",[186,627,272],{"class":196},[186,629,630,632,634,636,638,641,644],{"class":188,"line":275},[186,631,193],{"class":192},[186,633,197],{"class":196},[186,635,625],{"class":196},[186,637,284],{"class":196},[186,639,640],{"class":196}," --limit",[186,642,643],{"class":196}," 5",[186,645,301],{"class":196},[186,647,648,650,652,654,656,658],{"class":188,"line":290},[186,649,193],{"class":192},[186,651,197],{"class":196},[186,653,625],{"class":196},[186,655,284],{"class":196},[186,657,315],{"class":196},[186,659,318],{"class":196},[134,661,662,663,666,667,669],{},"Shows a group's revisions, newest first, 20 unless ",[138,664,665],{},"--limit"," says otherwise:\nwho, when, why, and each value before and after. With ",[138,668,339],{},", that scope's\nown revisions; without it, the system values'.",[177,671,674],{"className":672,"code":673,"language":238},[236],"#14  2026-10-23T09:12:44.021Z  ada (terminal)  “More room on the free tier”\n    maxProjects: 3 → 5\n#9  2026-10-20T16:03:11.700Z  Sam  “Launch offer”\n    maxProjects: 2 → 3\n",[138,675,673],{"__ignoreMap":182},[173,677,165],{"id":165},[177,679,681],{"className":179,"code":680,"language":181,"meta":182,"style":182},"npx tunables restore 9 --reason \"The offer is over.\"\n",[138,682,683],{"__ignoreMap":182},[186,684,685,687,689,692,695,697,699,702],{"class":188,"line":189},[186,686,193],{"class":192},[186,688,197],{"class":196},[186,690,691],{"class":196}," restore",[186,693,694],{"class":196}," 9",[186,696,387],{"class":196},[186,698,391],{"class":390},[186,700,701],{"class":196},"The offer is over.",[186,703,397],{"class":390},[134,705,706,707,709,710,712,713,715,716],{},"Puts a group back as it was after revision 9, through the same checks as any\nsave. A scope's revision names its scope, so restoring it puts that scope's\nown values back, with no ",[138,708,339],{},". If the old values would break something\nnow, the restore is refused and says why. ",[138,711,448],{}," is required; ",[138,714,463],{},"\nconfirms a restore that asks to be confirmed. The new revision's reason reads\n",[717,718,719],"em",{},"\"Restored revision 9. The offer is over.\"",[173,721,170],{"id":722},"through-your-apps-api",[134,724,725,155,727,155,729,162,731,733,734,737,738,741,742,745,746,749,750,171],{},[138,726,154],{},[138,728,158],{},[138,730,161],{},[138,732,165],{}," take ",[138,735,736],{},"--url",", or read ",[138,739,740],{},"TUNABLES_URL",":\nthe address of your app's tunables API, such as\n",[138,743,744],{},"https:\u002F\u002Ftasklane.example.com\u002Fapi\u002Ftunables",". With it they call that API, as the\nscreens do, and send ",[138,747,748],{},"TUNABLES_TOKEN"," as ",[138,751,752],{},"Authorization: Bearer \u003Ctoken>",[177,754,756],{"className":179,"code":755,"language":181,"meta":182,"style":182},"export TUNABLES_URL=https:\u002F\u002Ftasklane.example.com\u002Fapi\u002Ftunables\nexport TUNABLES_TOKEN=…\nnpx tunables get limits --scope workspace=acme\nnpx tunables set limits maxProjects=20 --scope workspace=acme --reason \"Agreed with Acme's owner\"\n",[138,757,758,774,786,800],{"__ignoreMap":182},[186,759,760,764,768,771],{"class":188,"line":189},[186,761,763],{"class":762},"sZ4mS","export",[186,765,767],{"class":766},"sVz71"," TUNABLES_URL",[186,769,770],{"class":390},"=",[186,772,773],{"class":766},"https:\u002F\u002Ftasklane.example.com\u002Fapi\u002Ftunables\n",[186,775,776,778,781,783],{"class":188,"line":275},[186,777,763],{"class":762},[186,779,780],{"class":766}," TUNABLES_TOKEN",[186,782,770],{"class":390},[186,784,785],{"class":766},"…\n",[186,787,788,790,792,794,796,798],{"class":188,"line":290},[186,789,193],{"class":192},[186,791,197],{"class":196},[186,793,269],{"class":196},[186,795,284],{"class":196},[186,797,315],{"class":196},[186,799,318],{"class":196},[186,801,802,804,806,808,810,812,814,816,818,820,823],{"class":188,"line":304},[186,803,193],{"class":192},[186,805,197],{"class":196},[186,807,379],{"class":196},[186,809,284],{"class":196},[186,811,513],{"class":196},[186,813,315],{"class":196},[186,815,518],{"class":196},[186,817,387],{"class":196},[186,819,391],{"class":390},[186,821,822],{"class":196},"Agreed with Acme's owner",[186,824,397],{"class":390},[205,826,827,833,843],{},[208,828,829,830,832],{},"No ",[138,831,148],{}," and no database credentials are needed.",[208,834,835,836,162,839,842],{},"Your app's ",[138,837,838],{},"actor",[138,840,841],{},"authorize"," apply. The revision records the actor\nyour app names for the token, not your username.",[208,844,845,846,854],{},"A refusal prints what the app answered:\n",[717,847,848,849,853],{},"\"✗ ",[143,850,744],{"href":744,"rel":851},[852],"nofollow"," answered 404: Not found. Check\nthe URL, and that TUNABLES_TOKEN is one the app allows this.\""," An app\nanswers 404 to a request it does not allow, so a wrong URL and a refused\ntoken look the same.",[134,856,857,858,860,861,863,864,866,867,869,870,171],{},"Without ",[138,859,736],{},", the commands work on the database through ",[138,862,140],{},", and\n",[138,865,841],{}," is not asked: whoever has the database credentials already reaches\neverything. ",[138,868,175],{}," always works on the database. See\n",[143,871,61],{"href":872},".\u002Faccess#the-terminal",[874,875,876],"style",{},"html pre.shiki code .sOThN, html code.shiki .sOThN{--shiki-light:#2A3439;--shiki-light-font-weight:bold;--shiki-default:#2A3439;--shiki-default-font-weight:bold;--shiki-dark:#F6F8F8;--shiki-dark-font-weight:bold}html pre.shiki code .sjCzm, html code.shiki .sjCzm{--shiki-light:#92400E;--shiki-default:#92400E;--shiki-dark:#FCD34D}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 .sp9ci, html code.shiki .sp9ci{--shiki-light:#4F5D63;--shiki-default:#4F5D63;--shiki-dark:#A3AFB4}html pre.shiki code .sZ4mS, html code.shiki .sZ4mS{--shiki-light:#115E59;--shiki-default:#115E59;--shiki-dark:#5EEAD4}html pre.shiki code .sVz71, html code.shiki .sVz71{--shiki-light:#182025;--shiki-default:#182025;--shiki-dark:#E6EBEC}",{"title":182,"searchDepth":275,"depth":275,"links":878},[879,880,881,884,885,886],{"id":175,"depth":275,"text":175},{"id":154,"depth":275,"text":154},{"id":158,"depth":275,"text":158,"children":882},[883],{"id":480,"depth":290,"text":481},{"id":161,"depth":275,"text":161},{"id":165,"depth":275,"text":165},{"id":722,"depth":275,"text":170},"md",{},true,21,{"title":91,"description":92},"docs\u002Fcli-values","ahVIXy9y7-hvAc7qapgQcKXg94x5zyMap3Rju-nrCtE",1792845119239]