[{"data":1,"prerenderedAt":777},["ShallowReactive",2],{"navigation":3,"\u002Freference\u002Fcli":169,"\u002Freference\u002Fcli-surround":772},[4,28,85,127,157],{"title":5,"path":6,"stem":7,"children":8,"icon":27},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,12,17,22],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":23,"path":24,"stem":25,"icon":26},"Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F4.architecture","i-lucide-layers","i-lucide-rocket",{"title":29,"icon":30,"path":31,"stem":32,"children":33,"page":84},"Concepts","i-lucide-lightbulb","\u002Fconcepts","2.concepts",[34,39,44,49,54,59,64,69,74,79],{"title":35,"path":36,"stem":37,"icon":38},"Durable agents","\u002Fconcepts\u002Fdurable-agents","2.concepts\u002F1.durable-agents","i-lucide-infinity",{"title":40,"path":41,"stem":42,"icon":43},"Glossary","\u002Fconcepts\u002Fglossary","2.concepts\u002F10.glossary","i-lucide-book-a",{"title":45,"path":46,"stem":47,"icon":48},"Restate in five minutes","\u002Fconcepts\u002Frestate-primer","2.concepts\u002F2.restate-primer","i-lucide-cpu",{"title":50,"path":51,"stem":52,"icon":53},"Entities & addressing","\u002Fconcepts\u002Fentities-addressing","2.concepts\u002F3.entities-addressing","i-lucide-at-sign",{"title":55,"path":56,"stem":57,"icon":58},"Timelines & events","\u002Fconcepts\u002Ftimelines-events","2.concepts\u002F4.timelines-events","i-lucide-list-ordered",{"title":60,"path":61,"stem":62,"icon":63},"Projections & the catalog","\u002Fconcepts\u002Fprojections-catalog","2.concepts\u002F5.projections-catalog","i-lucide-database",{"title":65,"path":66,"stem":67,"icon":68},"Workspaces & execution","\u002Fconcepts\u002Fworkspaces","2.concepts\u002F6.workspaces","i-lucide-terminal",{"title":70,"path":71,"stem":72,"icon":73},"Harnesses","\u002Fconcepts\u002Fharnesses","2.concepts\u002F7.harnesses","i-lucide-plug",{"title":75,"path":76,"stem":77,"icon":78},"Multi-agent patterns","\u002Fconcepts\u002Fmulti-agent","2.concepts\u002F8.multi-agent","i-lucide-network",{"title":80,"path":81,"stem":82,"icon":83},"Lifecycle & control","\u002Fconcepts\u002Flifecycle","2.concepts\u002F9.lifecycle","i-lucide-sliders-horizontal",false,{"title":86,"icon":87,"path":88,"stem":89,"children":90,"page":84},"Guides","i-lucide-book-open","\u002Fguides","3.guides",[91,106],{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":84},"Agents","i-lucide-bot","\u002Fguides\u002Fagents","3.guides\u002F1.agents",[97,101],{"title":98,"path":99,"stem":100,"icon":93},"Building agents","\u002Fguides\u002Fagents\u002Fbuilding-agents","3.guides\u002F1.agents\u002F1.building-agents",{"title":102,"path":103,"stem":104,"icon":105},"Frontend integration","\u002Fguides\u002Fagents\u002Ffrontend-integration","3.guides\u002F1.agents\u002F2.frontend-integration","i-lucide-monitor",{"title":107,"icon":108,"path":109,"stem":110,"children":111,"page":84},"Operations","i-lucide-server-cog","\u002Fguides\u002Foperations","3.guides\u002F2.operations",[112,117,122],{"title":113,"path":114,"stem":115,"icon":116},"Self-hosting","\u002Fguides\u002Foperations\u002Fself-hosting","3.guides\u002F2.operations\u002F1.self-hosting","i-lucide-server",{"title":118,"path":119,"stem":120,"icon":121},"Auth & API keys","\u002Fguides\u002Foperations\u002Fauth-api-keys","3.guides\u002F2.operations\u002F2.auth-api-keys","i-lucide-key-round",{"title":123,"path":124,"stem":125,"icon":126},"Backup & restore","\u002Fguides\u002Foperations\u002Fbackup-restore","3.guides\u002F2.operations\u002F3.backup-restore","i-lucide-database-backup",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":84},"Reference","i-lucide-book-marked","\u002Freference","4.reference",[133,138,143,148,153],{"title":134,"path":135,"stem":136,"icon":137},"Event schema","\u002Freference\u002Fevents","4.reference\u002F1.events","i-lucide-list-tree",{"title":139,"path":140,"stem":141,"icon":142},"Addressing","\u002Freference\u002Faddressing","4.reference\u002F2.addressing","i-lucide-map-pin",{"title":144,"path":145,"stem":146,"icon":147},"Gateway HTTP API","\u002Freference\u002Fgateway-api","4.reference\u002F3.gateway-api","i-lucide-webhook",{"title":149,"path":150,"stem":151,"icon":152},"CLI","\u002Freference\u002Fcli","4.reference\u002F4.cli","i-lucide-square-terminal",{"title":154,"path":155,"stem":156,"icon":83},"Configuration","\u002Freference\u002Fconfiguration","4.reference\u002F5.configuration",{"title":158,"path":159,"stem":160,"children":161,"icon":163},"Contributing","\u002Fcontributing","5.contributing\u002F1.index",[162,164],{"title":158,"path":159,"stem":160,"icon":163},"i-lucide-git-pull-request",{"title":165,"path":166,"stem":167,"icon":168},"The package map","\u002Fcontributing\u002Fpackage-map","5.contributing\u002F2.package-map","i-lucide-boxes",{"id":170,"title":149,"body":171,"description":765,"extension":766,"links":767,"meta":768,"navigation":769,"path":150,"seo":770,"stem":151,"__hash__":771},"docs\u002F4.reference\u002F4.cli.md",{"type":172,"value":173,"toc":754},"minimark",[174,191,196,206,222,239,242,246,249,340,346,349,357,368,454,473,477,483,504,513,519,522,528,543,552,558,561,567,570,579,585,588,594,614,623,629,632,638,645,681,690,692,698,715,731,737,750],[175,176,177,181,182,186,187,190],"p",{},[178,179,180],"code",{},"teaspill"," is the command-line client for a running deployment. Everything it does goes through the ",[183,184,185],"a",{"href":145},"gateway"," — except ",[178,188,189],{},"keys",", which is an operator command that talks to the database directly.",[192,193,195],"h2",{"id":194},"install-and-run","Install and run",[175,197,198,199,201,202,205],{},"The CLI ships as the ",[178,200,180],{}," bin of the ",[178,203,204],{},"@teaspill\u002Fcli"," workspace package. From the repository, run it through your package manager:",[207,208,213],"pre",{"className":209,"code":210,"language":211,"meta":212,"style":212},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm --filter @teaspill\u002Fcli exec teaspill --help\n","sh","",[178,214,215],{"__ignoreMap":212},[216,217,220],"span",{"class":218,"line":219},"line",1,[216,221,210],{},[175,223,224,225,227,228,230,231,234,235,238],{},"The examples below (and elsewhere in these docs) call ",[178,226,180],{}," directly, assuming the shell alias from ",[183,229,13],{"href":14}," (",[178,232,233],{},"alias teaspill=\"node $PWD\u002Fpackages\u002Fcli\u002Fdist\u002Findex.js\"","). Without the alias, prefix any command with ",[178,236,237],{},"pnpm --filter @teaspill\u002Fcli exec",".",[175,240,241],{},"Every command shares three global options.",[192,243,245],{"id":244},"global-configuration","Global configuration",[175,247,248],{},"Flags override environment; both fall back to a default.",[250,251,252,271],"table",{},[253,254,255],"thead",{},[256,257,258,262,265,268],"tr",{},[259,260,261],"th",{},"Flag",[259,263,264],{},"Env",[259,266,267],{},"Default",[259,269,270],{},"Meaning",[272,273,274,295,317],"tbody",{},[256,275,276,282,287,292],{},[277,278,279],"td",{},[178,280,281],{},"--gateway \u003Curl>",[277,283,284],{},[178,285,286],{},"TEASPILL_GATEWAY_URL",[277,288,289],{},[178,290,291],{},"http:\u002F\u002Flocalhost:8787",[277,293,294],{},"Gateway base URL.",[256,296,297,302,307,310],{},[277,298,299],{},[178,300,301],{},"--api-key \u003Ckey>",[277,303,304],{},[178,305,306],{},"TEASPILL_API_KEY",[277,308,309],{},"—",[277,311,312,313,316],{},"Gateway API key (",[178,314,315],{},"Authorization: Bearer",").",[256,318,319,324,329,334],{},[277,320,321],{},[178,322,323],{},"--tenant \u003Ctenant>",[277,325,326],{},[178,327,328],{},"TEASPILL_TENANT",[277,330,331],{},[178,332,333],{},"default",[277,335,336,337,238],{},"Deployment tenant, used to expand ",[178,338,339],{},"\u002Fa\u002F\u003Ctype>\u002F\u003Cid>",[175,341,342,343,345],{},"Entity arguments accept the short form ",[178,344,339],{}," or a full canonical URL. Message and argument payloads are parsed as JSON when they parse, and treated as a bare string otherwise.",[192,347,348],{"id":348},"dev",[207,350,355],{"className":351,"code":353,"language":354},[352],"language-text","teaspill dev [--deployment \u003Curl>]… [--watch] [--watch-path \u003Cdir>]… [--compose-file \u003Cpath>] [--no-compose] [--no-logs]\n","text",[178,356,353],{"__ignoreMap":212},[175,358,359,360,363,364,367],{},"Brings the stack up and keeps a local deployment registered: ",[178,361,362],{},"docker compose up -d"," → wait for the gateway to be healthy → register the deployment(s) through ",[178,365,366],{},"\u002Fregistry\u002F*"," with backoff → tail logs. The health-wait-then-register order is what avoids a register-before-ready race.",[250,369,370,378],{},[253,371,372],{},[256,373,374,376],{},[259,375,261],{},[259,377,270],{},[272,379,380,397,407,420,430,444],{},[256,381,382,387],{},[277,383,384],{},[178,385,386],{},"--deployment \u003Curl>",[277,388,389,390,393,394,238],{},"Deployment URL to register (repeatable). Defaults from ",[178,391,392],{},"TEASPILL_DEPLOYMENT_URL",", else ",[178,395,396],{},"http:\u002F\u002Fhost.docker.internal:9080",[256,398,399,404],{},[277,400,401],{},[178,402,403],{},"--watch",[277,405,406],{},"Re-register when the built output changes.",[256,408,409,414],{},[277,410,411],{},[178,412,413],{},"--watch-path \u003Cdir>",[277,415,416,417,316],{},"Directory to watch (repeatable; default ",[178,418,419],{},"dist",[256,421,422,427],{},[277,423,424],{},[178,425,426],{},"--compose-file \u003Cpath>",[277,428,429],{},"Explicit compose file path.",[256,431,432,437],{},[277,433,434],{},[178,435,436],{},"--no-compose",[277,438,439,440,443],{},"Skip ",[178,441,442],{},"docker compose up"," (infra already running).",[256,445,446,451],{},[277,447,448],{},[178,449,450],{},"--no-logs",[277,452,453],{},"Skip tailing logs.",[455,456,457],"note",{},[175,458,459,461,462,466,467,470,471,316],{},[178,460,403],{}," watches your ",[463,464,465],"strong",{},"built"," output and re-registers on change — it does not run your build. Run your bundler's watch mode (or a rebuild) alongside it. A deployment URL pointing at ",[178,468,469],{},"localhost"," is flagged with a warning, never rewritten (see ",[183,472,113],{"href":114},[192,474,476],{"id":475},"agents-ls","agents ls",[207,478,481],{"className":479,"code":480,"language":354},[352],"teaspill agents ls [--type \u003Ctype>] [--status \u003Cstatus>] [--parent \u003Curl>] [--json]\n",[178,482,480],{"__ignoreMap":212},[175,484,485,486,489,490,493,494,497,498,497,501,238],{},"Lists entities from the ",[183,487,488],{"href":61},"catalog",". ",[178,491,492],{},"--status"," is one of ",[178,495,496],{},"active",", ",[178,499,500],{},"idle",[178,502,503],{},"archived",[207,505,507],{"className":209,"code":506,"language":211,"meta":212,"style":212},"teaspill agents ls --type researcher\n",[178,508,509],{"__ignoreMap":212},[216,510,511],{"class":218,"line":219},[216,512,506],{},[207,514,517],{"className":515,"code":516,"language":354},[352],"active   \u002Ft\u002Fdefault\u002Fa\u002Fresearcher\u002Fr1  (researcher) head=12\nidle     \u002Ft\u002Fdefault\u002Fa\u002Fresearcher\u002Fr2  (researcher) head=48\n",[178,518,516],{"__ignoreMap":212},[192,520,521],{"id":521},"spawn",[207,523,526],{"className":524,"code":525,"language":354},[352],"teaspill spawn \u003Ctype> [args] [--id \u003Cid>] [--parent \u003Curl>] [--idempotency-key \u003Ckey>]\n",[178,527,525],{"__ignoreMap":212},[175,529,530,531,534,535,538,539,238],{},"Spawns an entity. ",[178,532,533],{},"args"," is JSON (or a bare string). ",[178,536,537],{},"--id"," supplies a caller-chosen instance id for ",[183,540,542],{"href":541},"\u002Freference\u002Faddressing#instance-ids","idempotent spawn",[207,544,546],{"className":209,"code":545,"language":211,"meta":212,"style":212},"teaspill spawn researcher '{\"topic\":\"the history of tea\"}'\n",[178,547,548],{"__ignoreMap":212},[216,549,550],{"class":218,"line":219},[216,551,545],{},[207,553,556],{"className":554,"code":555,"language":354},[352],"spawned \u002Ft\u002Fdefault\u002Fa\u002Fresearcher\u002F01j9z8k3q…\n  logs: teaspill logs \u002Ft\u002Fdefault\u002Fa\u002Fresearcher\u002F01j9z8k3q…\n",[178,557,555],{"__ignoreMap":212},[192,559,560],{"id":560},"send",[207,562,565],{"className":563,"code":564,"language":354},[352],"teaspill send \u003Curl> \u003Cmessage> [--idempotency-key \u003Ckey>]\n",[178,566,564],{"__ignoreMap":212},[175,568,569],{},"Sends a message wake. The message is JSON (or a bare string).",[207,571,573],{"className":209,"code":572,"language":211,"meta":212,"style":212},"teaspill send \u002Fa\u002Fresearcher\u002Fr1 '{\"kind\":\"message\",\"content\":[{\"type\":\"text\",\"text\":\"add a section on green tea\"}]}'\n",[178,574,575],{"__ignoreMap":212},[216,576,577],{"class":218,"line":219},[216,578,572],{},[207,580,583],{"className":581,"code":582,"language":354},[352],"sent → \u002Ft\u002Fdefault\u002Fa\u002Fresearcher\u002Fr1\n",[178,584,582],{"__ignoreMap":212},[192,586,587],{"id":587},"control",[207,589,592],{"className":590,"code":591,"language":354},[352],"teaspill control \u003Curl> \u003Cverb> [--reason \u003Creason>]\n",[178,593,591],{"__ignoreMap":212},[175,595,596,597,600,601,497,604,497,607,610,611,238],{},"Applies a ",[183,598,599],{"href":81},"control verb",": ",[178,602,603],{},"interrupt",[178,605,606],{},"pause",[178,608,609],{},"resume",", or ",[178,612,613],{},"archive",[207,615,617],{"className":209,"code":616,"language":211,"meta":212,"style":212},"teaspill control \u002Fa\u002Fresearcher\u002Fr1 interrupt --reason \"user cancelled\"\n",[178,618,619],{"__ignoreMap":212},[216,620,621],{"class":218,"line":219},[216,622,616],{},[207,624,627],{"className":625,"code":626,"language":354},[352],"interrupt → \u002Ft\u002Fdefault\u002Fa\u002Fresearcher\u002Fr1\n",[178,628,626],{"__ignoreMap":212},[192,630,631],{"id":631},"logs",[207,633,636],{"className":634,"code":635,"language":354},[352],"teaspill logs \u003Curl> [--deltas] [--from-snapshot \u003Cseq>]\n",[178,637,635],{"__ignoreMap":212},[175,639,640,641,644],{},"Follows and renders an entity's ",[183,642,643],{"href":56},"timeline"," until the stream closes or you press Ctrl-C. Reconnection, dedup, and drift detection are handled for you.",[250,646,647,655],{},[253,648,649],{},[256,650,651,653],{},[259,652,261],{},[259,654,270],{},[272,656,657,667],{},[256,658,659,664],{},[277,660,661],{},[178,662,663],{},"--deltas",[277,665,666],{},"Also subscribe to the live token-delta stream.",[256,668,669,674],{},[277,670,671],{},[178,672,673],{},"--from-snapshot \u003Cseq>",[277,675,676,677,680],{},"Fast-join from a ",[178,678,679],{},"state_snapshot"," at this seq instead of replaying from the start.",[207,682,684],{"className":209,"code":683,"language":211,"meta":212,"style":212},"teaspill logs \u002Fa\u002Fresearcher\u002Fr1 --deltas\n",[178,685,686],{"__ignoreMap":212},[216,687,688],{"class":218,"line":219},[216,689,683],{},[192,691,189],{"id":189},[207,693,696],{"className":694,"code":695,"language":354},[352],"teaspill keys create [--label \u003Clabel>]\nteaspill keys ls\nteaspill keys revoke \u003Cid | id-prefix | tsp_token>\n",[178,697,695],{"__ignoreMap":212},[175,699,700,701,704,705,708,709,712,713,238],{},"API-key administration. This is the one command that talks to Postgres directly rather than the gateway, so it needs a database connection: ",[178,702,703],{},"--database-url"," or ",[178,706,707],{},"DATABASE_URL",". Add ",[178,710,711],{},"--json"," to any subcommand for machine-readable output. Full context in ",[183,714,118],{"href":119},[207,716,718],{"className":209,"code":717,"language":211,"meta":212,"style":212},"export DATABASE_URL='postgresql:\u002F\u002Fteaspill:teaspill@localhost:5432\u002Fteaspill?sslmode=disable'\nteaspill keys create --label my-service\n",[178,719,720,725],{"__ignoreMap":212},[216,721,722],{"class":218,"line":219},[216,723,724],{},"export DATABASE_URL='postgresql:\u002F\u002Fteaspill:teaspill@localhost:5432\u002Fteaspill?sslmode=disable'\n",[216,726,728],{"class":218,"line":727},2,[216,729,730],{},"teaspill keys create --label my-service\n",[207,732,735],{"className":733,"code":734,"language":354},[352],"Created API key 6b1e…\n  label: my-service\n  token: tsp_…\n\nStore this token now — it is shown ONCE and cannot be recovered.\n",[178,736,734],{"__ignoreMap":212},[738,739,740],"caution",{},[175,741,742,745,746,749],{},[178,743,744],{},"create"," prints the plaintext token exactly once — capture it now. Postgres stores only its sha256 hash; the plaintext is never persisted and cannot be recovered. ",[178,747,748],{},"revoke"," is a soft delete the gateway rejects on immediately.",[751,752,753],"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);}",{"title":212,"searchDepth":219,"depth":727,"links":755},[756,757,758,759,760,761,762,763,764],{"id":194,"depth":727,"text":195},{"id":244,"depth":727,"text":245},{"id":348,"depth":727,"text":348},{"id":475,"depth":727,"text":476},{"id":521,"depth":727,"text":521},{"id":560,"depth":727,"text":560},{"id":587,"depth":727,"text":587},{"id":631,"depth":727,"text":631},{"id":189,"depth":727,"text":189},"The teaspill command-line tool — global configuration and every command: dev, agents, spawn, send, control, logs, and keys.","md",null,{},{"icon":152},{"title":149,"description":765},"bGMAikbB5xS17emWRNJsWgvE8alpJGVOyMo9FrywcI4",[773,775],{"title":144,"path":145,"stem":146,"description":774,"icon":147,"children":-1},"The gateway's public HTTP surface — command endpoints, stream and shape proxies, deployment registration, auth, idempotency, and status codes.",{"title":154,"path":155,"stem":156,"description":776,"icon":83,"children":-1},"Every environment variable, grouped by surface — the compose stack, the gateway, the CLI and clients, and the developer-deployed agent-loop and executor.",1784473423608]