[{"data":1,"prerenderedAt":31},["ShallowReactive",2],{"$f2yvwlroqruww":3},{"href":4,"title":5,"description":6,"kind":7,"mark":7,"planned":8,"contributors":9,"provenance":7,"express":8,"bridge":8,"html":10,"headings":11},"\u002Fdocs\u002Fengineering-team","An engineering team on your repository","From a repository and an empty enterprise to a cloned engineering team working on it: the steps, what only you can do, and a prompt your coding assistant can follow.",null,false,[],"\u003Cp>This page takes a repository you already have and puts an engineering team from the catalog to work on it: issues\npicked up on a schedule, tests written first, pull requests opened, reviewed and verified, and every merge waiting\nfor you. Most of it can be done by a coding assistant working in the repository, such as Claude Code. The\n\u003Ca href=\"#the-setup-prompt\">setup prompt\u003C\u002Fa> below is written for one. The steps it cannot take are yours, and it stops and asks\nyou for each.\u003C\u002Fp>\n\u003Ch2 id=\"what-you-end-up-with\">What you end up with\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>A repository that answers the commands the engineering tasks run: setup from a clean clone, and the tests,\nchecks and coverage of \u003Ca href=\"\u002Fdocs\u002Ftools\u002Fworkspaces#what-the-repository-provides\">Workspaces\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>An API token for the assistant, and your enterprise's \u003Ca href=\"\u002Fdocs\u002Fmcp\">MCP server\u003C\u002Fa> connected to it.\u003C\u002Fli>\n\u003Cli>Your code host connected on \u003Cstrong>Tools\u003C\u002Fstrong>, filling the team's code host \u003Ca href=\"\u002Fdocs\u002Fwork\u002Ftool-slots\">tool slot\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>An engineering team cloned from the \u003Ca href=\"\u002Fdocs\u002Fcommunity\u002Fteams\">Team directory\u003C\u002Fa>, with a lead, a CTO among its members,\nthe repository set as each task's input value, and the schedules you chose switched on.\u003C\u002Fli>\n\u003Cli>One small issue taken from intake to a pull request waiting at the merge gate.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"before-you-start\">Before you start\u003C\u002Fh2>\n\u003Cp>You need:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>an enterprise you own, with a model connected on \u003Cstrong>Agents\u003C\u002Fstrong> and a day cap on \u003Cstrong>Spend\u003C\u002Fstrong>\n(\u003Ca href=\"\u002Fdocs\u002Fcontrol\u002Fspend\">Spend and models\u003C\u002Fa>);\u003C\u002Fli>\n\u003Cli>the repository, with permission to open pull requests on it and create labels;\u003C\u002Fli>\n\u003Cli>an account on the code host for the team to act as. A member of its own is best, so its work shows under its own\nname (\u003Ca href=\"\u002Fdocs\u002Ftools\u002Fgithub#giving-a-member-its-own-github-account\">GitHub\u003C\u002Fa>). Your own account works too, and then\neverything the team does appears as you;\u003C\u002Fli>\n\u003Cli>room on your plan for the team's members and the schedules you want on.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"what-stays-yours\">What stays yours\u003C\u002Fh2>\n\u003Cp>A coding assistant with an API token can do most of the setup over the \u003Ca href=\"\u002Fdocs\u002Fapi\">API\u003C\u002Fa>. Some steps belong to a\nperson, and the prompt hands them to you:\u003C\u002Fp>\n\u003Cdiv class=\"prose__table\">\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Step\u003C\u002Fth>\n\u003Cth>Why it is yours\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Creating the API token\u003C\u002Ftd>\n\u003Ctd>No token can manage tokens (\u003Ca href=\"\u002Fdocs\u002Fapi\u002Fauthentication\">Authentication\u003C\u002Fa>).\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Connecting a model\u003C\u002Ftd>\n\u003Ctd>It is your account and your key.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Connecting a tool on the enterprise\u003C\u002Ftd>\n\u003Ctd>Only the owner, or a person the owner allows, binds a tool on the enterprise itself.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Signing off the team's KPIs\u003C\u002Ftd>\n\u003Ctd>A team cloned with a token arrives with its KPIs waiting for sign-off (\u003Ca href=\"\u002Fdocs\u002Fcompany\u002Fteams\">Teams\u003C\u002Fa>).\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Merging the repository's own change\u003C\u002Ftd>\n\u003Ctd>It is a change to your code. Review it like any other.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Every gate\u003C\u002Ftd>\n\u003Ctd>A merge waits on you in \u003Cstrong>Gates\u003C\u002Fstrong>. Give the assistant's token no \u003Ccode>gates:write\u003C\u002Fcode>, and it cannot decide one.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003C\u002Fdiv>\n\u003Ch2 id=\"the-steps\">The steps\u003C\u002Fh2>\n\u003Col>\n\u003Cli>\u003Cstrong>The repository.\u003C\u002Fstrong> Add the commands the engineering tasks call (\u003Ccode>os:red\u003C\u002Fcode>, \u003Ccode>os:check\u003C\u002Fcode>, \u003Ccode>os:coverage\u003C\u002Fcode>), and a\nsetup that works from a clean clone, as \u003Ca href=\"\u002Fdocs\u002Ftools\u002Fworkspaces#what-the-repository-provides\">Workspaces\u003C\u002Fa>\nspecifies. Its \u003Ca href=\"\u002Fdocs\u002Ftools\u002Fworkspaces#llm-instruction-for-migrating-an-existing-workspace\">migration instruction\u003C\u002Fa>\nis the contract. Merge it before the first run, so every new branch has it.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>A token and the MCP server.\u003C\u002Fstrong> Create a token under \u003Cstrong>Settings → API tokens\u003C\u002Fstrong> with only the scopes the setup\nneeds, and \u003Ca href=\"\u002Fdocs\u002Fmcp\u002Fconnect\">connect\u003C\u002Fa> your assistant to the MCP server with it.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>The code host.\u003C\u002Fstrong> On \u003Cstrong>Tools\u003C\u002Fstrong>, connect your code host's MCP server. Add the \u003Ccode>git.*\u003C\u002Fcode> custom props, so a\nworkspace can clone and push (\u003Ca href=\"\u002Fdocs\u002Ftools\u002Fworkspaces#the-credential-comes-from-the-code-host-tool-you-bind\">The credential comes from the code host tool you bind\u003C\u002Fa>).\nSet \u003Cstrong>Fills slots\u003C\u002Fstrong> to \u003Ccode>codehost\u003C\u002Fcode>, and give it the action map (\u003Ca href=\"\u002Fdocs\u002Fwork\u002Ftool-slots#slot-actions\">Slot actions\u003C\u002Fa>).\nFor GitHub, \u003Cstrong>Add git settings\u003C\u002Fstrong> and \u003Cstrong>Add missing actions\u003C\u002Fstrong> fill both in one save each.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>The team.\u003C\u002Fstrong> Clone an engineering team from the \u003Ca href=\"\u002Fdocs\u002Fcommunity\u002Fteams\">Team directory\u003C\u002Fa>. Fill its \u003Ccode>codehost\u003C\u002Fcode>\nslot with that connection, and switch every schedule off for now. Name the member who holds the CTO role, and\nmake them the team's lead.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Inputs, labels and schedules.\u003C\u002Fstrong> A clone brings each task's schedule but not its run input\n(\u003Ca href=\"\u002Fdocs\u002Fwork\u002Fschedules#schedules-on-a-clone\">Schedules on a clone\u003C\u002Fa>), and these tasks need a repository. Set it as\neach task's own \u003Ca href=\"\u002Fdocs\u002Fwork\u002Ftasks#your-own-input-values\">input value\u003C\u002Fa>. Create the issue labels the tasks use.\nThen switch on the schedules you want.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>A first run.\u003C\u002Fstrong> File one small issue and start intake by hand. Follow it to the merge gate, then decide it.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"the-setup-prompt\">The setup prompt\u003C\u002Fh2>\n\u003Cp>Open the repository in a coding assistant that can read and edit files, run commands and call an API. Fill in the\nvalues at the top, then paste the prompt. It works phase by phase and checks each phase before the next. It stops\nfor every step that is yours. It never changes what a task does: a cloned task stays linked to its publisher, and\nthis setup only configures it.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-text\">You are onboarding this repository and its company into Zero Human OS, so a cloned\nengineering team (led by a CTO) can work on it by itself. Work through the phases\nbelow in order. Each phase ends with a check; do not start the next phase until the\ncheck passes or I have said to skip it.\n\n## Values (ask me for any left as &lt;&lt;…&gt;&gt; before Phase 1)\n\n- Enterprise slug:            &lt;&lt;acme&gt;&gt;\n- Repository (owner\u002Fname):    &lt;&lt;acme\u002Fapp&gt;&gt;\n- Code host:                  &lt;&lt;GitHub&gt;&gt;\n- Team template:              &lt;&lt;the engineering team I chose in the Team directory&gt;&gt;\n- Team name \u002F slug:           &lt;&lt;Engineering&gt;&gt; \u002F &lt;&lt;engineering&gt;&gt;\n- CTO name and one-line persona: &lt;&lt;Ada: calm, exact, ships small pull requests&gt;&gt;\n- Whose code host account the team acts as: &lt;&lt;a member account of its own | mine&gt;&gt;\n- Timezone for schedules:     &lt;&lt;Europe\u002FLondon&gt;&gt;\n- Team daily spend cap (USD): &lt;&lt;10&gt;&gt;\n- Other tools to connect now: &lt;&lt;none&gt;&gt;\n\n## Sources of truth (read these first, in full)\n\n- https:\u002F\u002Fzerohuman.com\u002Fdocs\u002Fengineering-team   (this guide)\n- https:\u002F\u002Fzerohuman.com\u002Fdocs\u002Ftools\u002Fworkspaces   (the repository contract, including its\n  &quot;LLM Instruction for migrating an existing workspace&quot;)\n- https:\u002F\u002Fzerohuman.com\u002Fdocs\u002Fmcp\u002Fconnect and https:\u002F\u002Fzerohuman.com\u002Fdocs\u002Fapi\u002Fauthentication\n- https:\u002F\u002Fzerohuman.com\u002Fdocs\u002Fapi\u002Fendpoints      (every route and the scope it needs)\n- https:\u002F\u002Fzerohuman.com\u002Fdocs\u002Fwork\u002Ftool-slots    (the codehost slot, action maps, slotFills)\n- https:\u002F\u002Fzerohuman.com\u002Fdocs\u002Ftools\u002Fgithub       (or the page for my code host)\n- https:\u002F\u002Fzerohuman.com\u002Fdocs\u002Fwork\u002Fschedules     (including &quot;Schedules on a clone&quot;)\n- https:\u002F\u002Fzerohuman.com\u002Fdocs\u002Fwork\u002Ftasks#your-own-input-values\nIf a page cannot be fetched, ask me to paste it. Never guess a route, field or exit code.\nWhere these pages and this prompt disagree, the pages win: tell me what differed.\n\n## Hard rules\n\n1. Never change what a task says or does. Cloned tasks are linked to their publisher.\n   Configure them only through input values, schedules, tool connections, and roles,\n   members and teams. Never publish a task version, never copy a task to edit it, and\n   never put this repository's name or paths into any task's text.\n2. Secrets never enter git, logs, pull request bodies or chat output. The API token lives\n   in a gitignored .env and in the MCP client's local configuration. Print only its last\n   four characters.\n3. You never decide a gate, merge a pull request, or create or revoke API tokens. For a\n   step only I can take (a token, a model, a tool on the enterprise, KPI sign-off), give\n   me the exact portal steps and values, then verify the result over the API once I say\n   &quot;done&quot;.\n4. Read before every write. GET the object first and show me the diff for anything\n   already set. Put related writes in one script outside the repository, show it to me,\n   and run it only after I say go.\n5. Stay within the plan's members and schedules.\n6. If anything fails, stop and report the exact status, error code and body. Do not try\n   another route around a refusal.\n\n## Phase 0: Preflight (read only)\n\n- Confirm `git remote -v` matches the repository value, and find the remote's real\n  default branch. Check that you can create labels on the code host (for GitHub,\n  `gh auth status`).\n- Read this repository's AGENTS.md, CLAUDE.md, contributor docs and CI configuration.\n- Summarise for me: stack, package manager, test frameworks, lint, typecheck and build,\n  git hooks, CI, coverage policy, release process, and any existing mise.toml or .os\u002F.\nCheck: I confirm the summary and the Values block.\n\n## Phase 1: API token\n\n1. Ask me to create a token under Settings → API tokens, named for this assistant and\n   machine, with these scopes and nothing else:\n   catalog:write, tasks:write, teams:write, members:write, roles:read, tools:read,\n   runs:read, executions:read, blockers:read, gates:read, llm:read, spend:read,\n   enterprise:read.\n2. When I give it to you, make sure .env is in .gitignore, then write to .env:\n     ZEROHUMAN_API_URL=https:\u002F\u002Fapi.zerohuman.com\u002Fv1\n     ZEROHUMAN_TOKEN=zhos_…\n   Add a .env.example with the two names and empty values.\nCheck: GET $ZEROHUMAN_API_URL\u002Fhealth answers ok, and GET \u002Fteams with the token answers\n200 for this enterprise. A 403 names the missing scope. If you get one, tell me which\nscope to add with Edit scopes.\n\n## Phase 2: MCP server\n\n1. Connect the MCP server for this project only, with the token from .env, as\n   docs\u002Fmcp\u002Fconnect shows (for Claude Code: `claude mcp add --transport http zerohuman\n   https:\u002F\u002Fmcp.zerohuman.com\u002Fv1\u002Fmcp --header &quot;Authorization: Bearer $ZEROHUMAN_TOKEN&quot;`).\n   Never commit the token. If the team wants the server in a shared .mcp.json, read\n   the token from the environment there instead.\n2. Tell me to reload the session so the tools appear.\nCheck: the client lists the server as connected AND a tool call answers (os.list_blockers).\nConnecting and listing tools do not check the token. Only a call does.\n\n## Phase 3: The repository (a branch and a pull request; I merge)\n\nFollow the Workspaces page's &quot;LLM Instruction for migrating an existing workspace&quot; as\nthe contract, on a new branch. In short:\n- setup from a clean, non-interactive clone (.os\u002Fworkspace.yml only when auto-detection\n  is not enough; explicit setup replaces all auto-detection);\n- real `os:red`, `os:check` and `os:coverage` with the documented exit codes, the\n  ten-minute and 32,000-character limits, the real default branch and merge base, and\n  `--parts` where a check runs longer than ten minutes;\n- git hooks that let a RED commit through while static checks still run, with no bypass;\n- optional commands (os:deps*, os:release*, os:changelog*) only if I want them;\n- validation in a disposable fresh clone with a clean home, CI=true and NODE_ENV=test,\n  exercising every command and exit, with commands, exits and timings reported.\nIf there is no coverage policy, propose one and ask me. Never default to zero.\nOpen the pull request with that evidence. Do not merge it.\nCheck: I have merged the pull request.\n\n## Phase 4: Enterprise prerequisites (you check; I act in the portal)\n\n- GET \u002Fllm\u002Fbindings shows a model connected for the enterprise. If not, tell me to add\n  one on Agents. Schedules wait without one, and show nothing on Blockers.\n- GET \u002Fspend shows an enterprise day cap. If not, tell me to set one on Spend.\n\n## Phase 5: The code host connection, filling the codehost slot\n\nThe engineering tasks name no vendor's tools. They name the slot `codehost` and actions\nunder it, and one connection of mine fills that slot and maps every action.\n\n1. If the team acts as a member account of its own, it is created after Phase 6, with\n   the CTO's own address. Walk me through it then, as my code host's page describes,\n   and come back to this phase.\n2. Ask me to connect the code host on Tools, on the enterprise or on the CTO member when\n   the account is the CTO's own, as its page describes (for GitHub: a classic token\n   with `repo read:org`, the MCP server URL left blank). Then ask me to:\n   - add the git.* custom props: git.host, git.username, git.repoTemplate (GitHub's are\n     github.com, x-access-token and https:\u002F\u002Fgithub.com\u002F{repo}.git; &quot;Add git settings&quot;\n     fills them);\n   - set Fills slots to codehost;\n   - give it the full action map (&quot;Add missing actions&quot;).\n   Every connection of that tool that a run can reach before this one needs the git.*\n   props as well, including a member's own.\n3. Connect any other tool from the Values block the same way.\nCheck over the API: GET \u002Ftools\u002Fbindings shows the connection with `codehost` in its slots,\nits git.* props set, and `missingSlotActions` empty. Note its id.\n\n## Phase 6: The team and its CTO\n\n1. Find the team template in GET \u002Fcatalog\u002Fteams, then read GET \u002Fcatalog\u002Fteams\u002F{id}\u002Freview.\n   Show me its roles, tasks, the tools they need, the slots to fill, the suggested\n   schedules and the plan size.\n2. Clone it with POST \u002Fcatalog\u002Fteams\u002F{id}\u002Fclone:\n   { name, slug, teammateNames (one per teammate, the CTO first),\n     moneyCentsDay (the cap in cents),\n     slotFills: [{ &quot;slot&quot;: &quot;codehost&quot;, &quot;bindingId&quot;: &quot;&lt;the connection's id&gt;&quot; }],\n     schedules: [] }\n   An empty schedules list means every schedule arrives paused. They are switched on in\n   Phase 7, once their inputs are set. Record the team, member, role and task ids, plus\n   reusedTaskIds and awaitingSignOff. A role or task I already had is reused. Tell me\n   which were.\n3. The CTO: the member holding the CTO role.\n   - PATCH \u002Fmembers\u002F{id} with their name and persona.\n   - PATCH \u002Fteams\u002F{teamId} with leadMemberId set to the CTO. A team with no lead shows\n     on Blockers.\n   - Tell me which KPIs wait for my sign-off on the team's page.\n   - Read the member's page data for any tool their tasks need that no connection reaches.\n4. Successors: a clone keeps a task's successor only when the enterprise has that task.\n   For every cloned task, compare its successors with its catalog entry's\n   (GET \u002Fcatalog\u002Ftasks\u002F{id}) and list any edge that did not come across, with the task\n   it named.\nCheck: the team has its members, roles, lead and tasks, and Blockers shows nothing for a\ntool that is not bound, an unmapped action or an ambiguous slot.\n\n## Phase 7: Inputs, labels and schedules\n\n1. Input values: for every cloned task whose current version declares a `repo` input,\n   PUT \u002Ftasks\u002F{id}\u002Finput-values with { &quot;values&quot;: { &quot;repo&quot;: &quot;&lt;&lt;owner\u002Fname&gt;&gt;&quot; } }. Read the\n   task first and keep any value already set. Set no other key unless I agree.\n2. Labels: read the cloned tasks (GET \u002Ftasks\u002F{id}: skill, guardrails, inputs) and list\n   every issue label they read or write. Compare that list with the repository's labels,\n   show me the missing ones, and create them after I say go. A task that cannot find\n   its label stops.\n3. Schedules: show me a table with every task the review suggests a schedule for. Give\n   each one's cron, timezone and run input { &quot;repo&quot;: &quot;&lt;&lt;owner\u002Fname&gt;&gt;&quot; }, whether its\n   prerequisites hold (a tool it needs that is not connected, an optional repository\n   command that is not there, CI it reads that the repository does not run), and your\n   recommendation. Add the tasks that take a repo input and have no suggested schedule,\n   such as sweeps, verifications and measurements, and ask me whether any should run on\n   one. Recommend within the plan's allowance, intake first. I choose. Then, for each\n   row, PUT \u002Ftasks\u002F{id}\u002Fschedule\n   { &quot;cron&quot;: &quot;…&quot;, &quot;timezone&quot;: &quot;&lt;&lt;timezone&gt;&gt;&quot;, &quot;enabled&quot;: &lt;true|false&gt;,\n     &quot;input&quot;: { &quot;repo&quot;: &quot;&lt;&lt;owner\u002Fname&gt;&gt;&quot; } }.\nCheck: each schedule reads back as chosen, an enabled one has a next run time, and\nBlockers lists no task with a missing input.\n\n## Phase 8: The first run (I decide; you watch)\n\n1. Ask me to file one small, well-specified issue, or to point you at one.\n2. Start intake by hand: POST \u002Ftasks\u002F{id}\u002Fruns, with the run's input as the body,\n   { &quot;repo&quot;: &quot;&lt;&lt;owner\u002Fname&gt;&gt;&quot; }. The body is the input itself, not wrapped in &quot;input&quot;.\n3. Follow the run and its execution (os.list_runs, os.get_run), hop by hop until the\n   pull request reaches its merge gate. Report each step's outcome and cost, and\n   anything on Blockers, with the run id and the exact reason.\n4. Stop at the merge gate and tell me it is waiting for me in Gates. Do not decide it.\nCheck: the pull request exists, carries a &quot;## Verification: &lt;commit&gt;&quot; note, and its merge\nwaits on me.\n\n## Phase 9: Handover\n\nOn a branch, as a pull request, write a short onboarding note into the repository's\ndeveloper docs with no secrets in it:\n- what the repository provides (commands, setup, optional commands adopted or declined);\n- the team, its roles, its CTO, the code host connection (by name, never its token),\n  the schedules table and the input values;\n- what is still mine: KPI sign-off, every merge gate, and the date the code host token\n  expires;\n- how to pause everything (switch the schedules off) and where to look (Blockers, Gates,\n  Runs).\nThen give me a table of each phase as done, waiting on me or skipped, and anything you\ncould not verify.\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"after-the-first-run\">After the first run\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Watch Blockers for the first days.\u003C\u002Fstrong> A run that stops says why there, and so does a schedule that cannot\nstart (\u003Ca href=\"\u002Fdocs\u002Fwork\u002Fschedules#when-the-last-run-failed\">Schedules\u003C\u002Fa>).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Keep the merge for yourself.\u003C\u002Fstrong> Every pull request reaches its merge gate with a verification note for the\ncommit it would merge (\u003Ca href=\"\u002Fdocs\u002Ftools\u002Fworkspaces#verification-before-merge\">Verification before merge\u003C\u002Fa>).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Updates arrive by themselves.\u003C\u002Fstrong> A linked clone takes its publisher's quiet updates unless you turn that off on\nthe Enterprise page (\u003Ca href=\"\u002Fdocs\u002Fcompany\u002Fenterprise#settings-on-the-enterprise-page\">Enterprise\u003C\u002Fa>). Your input values and\nschedules stay as you set them.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Note when the code host token expires.\u003C\u002Fstrong> The connection stops working when it lapses.\u003C\u002Fli>\n\u003C\u002Ful>\n",[12,16,19,22,25,28],{"id":13,"text":14,"level":15,"planned":8},"what-you-end-up-with","What you end up with",2,{"id":17,"text":18,"level":15,"planned":8},"before-you-start","Before you start",{"id":20,"text":21,"level":15,"planned":8},"what-stays-yours","What stays yours",{"id":23,"text":24,"level":15,"planned":8},"the-steps","The steps",{"id":26,"text":27,"level":15,"planned":8},"the-setup-prompt","The setup prompt",{"id":29,"text":30,"level":15,"planned":8},"after-the-first-run","After the first run",1794401587036]