For engineers: bring a GitHub repo into a session, plan a change, review it and open a pull request.
This guide takes one of your GitHub repositories from the home screen to an open pull request: the agent plans the change with you, builds it on a branch, runs your tests and reviews its own diff before you push. It ends by saving the machine as a setup, so the next session on that repository starts with everything installed. To start from an idea rather than a codebase, follow the Quickstart instead.About 20 minutesBy the end of this guide you will have a pull request on harbor-api, Harbor Sailing School’s booking API, that adds a waitlist to full classes. You will also have a setup that boots new harbor-api sessions with the repository cloned and its dependencies installed.
A GitHub repository you can push to. This guide uses harbor-sailing/harbor-api; use any repository of your own.
A test command that runs from the terminal, such as npm test or pytest. The agent uses it to check its work.
If the GitHub card says “GitHub isn’t set up on this server yet — ask whoever runs it.”, GitHub isn’t turned on for your Alpha. Public repositories can still be added by name, but nothing can be pushed.
On the home screen, click the repos chip in the composer, then Connect GitHub. GitHub opens in a new browser tab. Pick your account or an organization, choose which repositories Alpha may work in, and authorize. When you come back, Alpha’s tab has already picked up the connection. You do this once per account: every session you own gets an authenticated git and gh, and the token is redacted if it ever reaches the transcript. To add an organization later, use add account in the same popover. Connect GitHub and add repositories covers organizations and access requests.
2
Stage the repository and its branch
Open the repos chip again and type harbor in Search your repos or owner/repo. Click harbor-sailing/harbor-api. It is added to the staged list with a branch field that reads default branch. Leave it empty to start from the repository’s default branch, main here, or type an existing branch such as develop. The branch must already exist on GitHub. New work goes on a new branch, which the agent creates in the next step. You can stage up to 5 per session, and a setup’s repositories count toward it; see Limits. The repository is cloned into /workspace/harbor-api before the agent’s first turn.
3
Ask for a plan
Type the task after /plan and send it. On the home screen, /plan <task> creates the session in plan mode and sends the task as its first message. In plan mode the agent reads the code and changes no files. When it needs a decision, it asks in a question card titled “The agent has questions”. Pick an option or type into Something else…, then press Send answers. To leave the choice to the agent, press Skip — let the agent decide instead. You can also switch plan mode on and off with ⇧Tab in the composer.Alpha will:
Create the session and clone harbor-api into its machine.
Read the routes, models and tests without changing a file.
Ask you about anything the code doesn’t settle, such as whether a waitlist has a maximum length.
Write a proposed plan into the Plan tab, which opens by itself.
4
Implement the plan and run the tests
Press Implement this plan in the Plan tab. It switches plan mode off and sends “Implement the plan.” for you. As the task asked, the agent creates feature/waitlist, writes the code, runs your test suite and commits on the branch. The turn runs on Alpha’s servers, so you can close the tab and come back to a complete transcript.To check the work yourself, open the workspace’s + menu and choose Shell. The Shell is a terminal in the same machine, as the same account the agent uses, with sudo. Run cd harbor-api && npm test. Files you change there are files the agent sees on its next turn.
The Shell opens in /workspace, the same folder the agent works in.
5
Review the branch against main
When the turn ends, type /review and press Enter. In Start a review, choose Review against a base branch. The branch field is already filled with main, the repository’s default branch. Press Start review. In a Codex session, Codex runs its review mode on the workspace and posts a “Review started” card, then a “Review findings” card. In a Claude Code session, Claude Code gets a review prompt and answers in the transcript instead. To act on what it found, reply with the findings you want fixed. While a turn is running, the review is refused with ”‘/review’ is disabled while a task is in progress.”; see Slash commands.
6
Push and open the pull request
Click GitHub in the workspace header, beside Share. The branch row shows feature/waitlist marked unpublished. If the review fixes left uncommitted changes, type a message in the commit message box under Changes and press Commit, or Commit & push (⌘Enter, Ctrl on Windows and Linux) to push at once. Then press Push & create PR in the footer. The New pull request view shows the branch, a base selector set to main, a Title taken from the last commit and an optional description. Tick Create as draft if you want, then press Push & create pull request. See Branches, commits and pull requests for why a button can be disabled.
The footer now reads View PR #12, and the pull request is pinned at the top of Pull requests. Commits carry your GitHub account as their author.
7
Save a setup for next time
Every new session on harbor-api would clone and install from scratch. A setup saves that work once: the repository cloned, a setup script run and the machine saved, so the next session boots in about a second. Ask the agent to save one from what worked in this session.Alpha will:
Write the setup from the commands that worked here: the install, the migrations, and a boot script that pulls the latest main.
Start the build on a fresh machine, which usually takes a few minutes. Your session’s machine is not touched.
Tell you when it is ready, or that it is still building and will appear in the home screen’s machine chip.
Next time, click the machine chip on the home screen, which reads blank machine, and pick harbor-api dev. You can keep 5 per account (Limits). To see a build’s progress, open Account menu → Setups.
A setup build runs with your GitHub token and secrets in its environment. Alpha removes them before saving the machine, but files are kept. A token written into .npmrc or .env during the build ends up in every machine started from the setup, including those of anyone you share it with.
You connected GitHub, planned a change before any code moved, built and reviewed it on a branch, opened a pull request, and saved the machine as a setup for your next session.
Create branches from the GitHub tab, pull when you fall behind, and see why the PR button is disabled.
Setups
Edit the setup script and boot script by hand, share a setup with your team, or rebuild it.
Plan mode and the agent's questions
Refine a plan over several replies and follow the agent’s to-do list while it builds.
Fork or delete a session
Try a second approach to the same change in a copy of this session, without disturbing the first.
⌘I
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"Alpha","colors":{"primary":"#1A54F0","light":"#749FF9","dark":"#1A54F0"},"logo":{"light":"https://mintcdn.com/lyzr-15a99e0f/peFm_Sv4KgaR4cun/images/logo/light.png?fit=max\u0026auto=format\u0026n=peFm_Sv4KgaR4cun\u0026q=85\u0026s=633788f52e3e9a8128bdaf2d7a62fff6","dark":"https://mintcdn.com/lyzr-15a99e0f/peFm_Sv4KgaR4cun/images/logo/dark.png?fit=max\u0026auto=format\u0026n=peFm_Sv4KgaR4cun\u0026q=85\u0026s=cca4899a3c056f427f80610ac85d1170","href":"https://alpha.new"},"favicon":"https://mintcdn.com/lyzr-15a99e0f/peFm_Sv4KgaR4cun/images/favicon.png?fit=max\u0026auto=format\u0026n=peFm_Sv4KgaR4cun\u0026q=85\u0026s=606bf8d8b1dd77e7fc7d13b52bd06f85","appearance":{"default":"system","strict":false},"background":{"color":{"light":"#FAFAF9","dark":"#0E0E0D"}},"navbar":{"primary":{"type":"button","label":"Open Alpha","href":"https://alpha.new"}},"footer":{"socials":{"github":"https://github.com/suyash-lyzr/alpha-documentation"}},"search":{"prompt":"Search docs"},"seo":{"metatags":{"og:site_name":"Alpha docs"}},"fonts":{"family":"Geist"},"icons":{"library":"fontawesome"},"styling":{"eyebrows":"section","codeblocks":"system","latex":false},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"lyzr-15a99e0f","hasAudioNarration":false,"actualSubdomain":"lyzr-15a99e0f","customDomains":[],"gitSource":{"type":"github","owner":"suyash-lyzr","repo":"alpha-documentation","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":"","_id":"6ae0b4f093d54c7ebe38e84c"},"chroma":{"latestBuiltDeploymentHistoryId":"6ae13e48963c9b68664e663c","collectionId":"6f6abaac-a319-483c-b30d-6356d4f82504","liveDeploymentHistoryId":"6ae13e48963c9b68664e663c","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae13f861208be8074bfe6ae","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"default","tag":"Build","count":22},{"language":"default","tag":"Get started","count":17},{"language":"default","tag":"Reference","count":12},{"language":"default","tag":"Workspace","count":10},{"language":"default","tag":"Ship","count":8},{"language":"default","tag":"Agents","count":7},{"language":"default","tag":"Connect","count":7},{"language":"default","tag":"Chat with the agent","count":6},{"language":"default","tag":"Sessions","count":6},{"language":"default","tag":"Guides","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n:root{--a-canvas:#f0f0ef;--a-bg:#fafaf9;--a-card:#ffffff;--a-fill:#f2f2f1;--a-fg:#161614;--a-soft:#3c3c39;--a-muted:#636361;--a-border:rgb(22 22 20 / 9%);--a-signal:#1a54f0;--a-signal-soft:rgb(26 84 240 / 8%);--a-radius:0.7rem;--a-shadow-card:0 0 0 1px var(--a-border), 0 1px 2px rgb(22 22 20 / 4%), 0 2px 6px rgb(22 22 20 / 4%);--a-shadow-raised:0 0 0 1px var(--a-border), 0 2px 10px rgb(22 22 20 / 7%)}.dark{--a-canvas:#0e0e0d;--a-bg:#0e0e0d;--a-card:#181817;--a-fill:#20201f;--a-fg:#f5f5f4;--a-soft:#d6d6d3;--a-muted:#9f9f9a;--a-border:rgb(255 255 255 / 8%);--a-signal:#749ff9;--a-signal-soft:rgb(116 159 249 / 10%);--a-shadow-card:0 0 0 1px var(--a-border), inset 0 1px 0 rgb(255 255 255 / 4%), 0 1px 2px rgb(0 0 0 / 25%);--a-shadow-raised:0 0 0 1px var(--a-border), inset 0 1px 0 rgb(255 255 255 / 5%), 0 2px 12px rgb(0 0 0 / 30%)}code,kbd,pre{font-family:\"Geist Mono\",ui-monospace,\"SF Mono\",Menlo,monospace!important}#page-title{font-size:1.75rem!important;line-height:1.2!important;font-weight:600!important;letter-spacing:-.025em!important}#header .eyebrow{font-size:.75rem;font-weight:500;letter-spacing:.01em}#content-area .prose{font-size:.9375rem;line-height:1.7}#content-area .prose h2{font-size:1.25rem;font-weight:600;letter-spacing:-.015em;margin-top:2.5rem}#content-area .prose h3{font-size:1rem;font-weight:600;letter-spacing:-.01em}#content-area .prose li,#content-area .prose p{color:var(--a-soft)}#content-area .prose strong{color:var(--a-fg);font-weight:560}#content-area .prose a{text-decoration-color:color-mix(in oklab,var(--a-signal) 45%,transparent);text-underline-offset:3px}::selection{background:var(--a-signal-soft)}#sidebar-content{font-size:.875rem}#content-area .prose table,#table-of-contents{font-size:.8125rem}.callout,.card{border-radius:var(--a-radius)!important;box-shadow:var(--a-shadow-card)}.card{border-color:transparent!important;background:var(--a-card);transition:box-shadow 150ms ease}.card[role=link]:hover,a.card:hover{box-shadow:0 0 0 1px color-mix(in oklab,var(--a-signal) 55%,transparent),0 2px 10px rgb(22 22 20/6%)}.card [data-component-part=card-content-container]{display:flex;align-items:flex-start;gap:.75rem;padding:.875rem 1rem!important}.card [data-component-part=card-icon]{flex:none;width:1.75rem!important;height:1.75rem!important;margin:0!important;display:grid;place-items:center;border-radius:.45rem;background:var(--a-fill);box-shadow:0 0 0 1px var(--a-border)}.card [data-component-part=card-icon] svg{width:.875rem!important;height:.875rem!important;background-color:var(--a-soft)!important}.card [data-component-part=card-title],.card [data-component-part=card-title] *{margin-top:0!important;padding-top:.25rem;font-size:.875rem!important;line-height:1.3!important;font-weight:600;letter-spacing:-.01em}.card [data-component-part=card-content]{margin-top:0!important;font-size:.8125rem!important;line-height:1.5!important;color:var(--a-muted)}.card [data-component-part=card-content] *{font-size:inherit!important;line-height:inherit!important}.callout{border:0!important;background:var(--a-card)!important;font-size:.875rem}.callout [data-component-part=callout-icon] svg{color:var(--a-muted)!important}.callout[data-callout-type=warning] [data-component-part=callout-icon] svg{color:#c27c0e!important}.callout[data-callout-type=check] [data-component-part=callout-icon] svg{color:#1f8a5b!important}.callout [data-component-part=callout-content],.callout [data-component-part=callout-content] p{color:var(--a-soft)!important}[data-component-part=frame]{border-radius:calc(var(--a-radius)*1.4)!important;background:var(--a-fill)!important;border:0!important;box-shadow:0 0 0 1px var(--a-border);padding:.5rem!important}[data-component-part=frame] img,[data-component-part=frame] video{border-radius:var(--a-radius)!important;box-shadow:var(--a-shadow-raised)}[data-component-part=frame-caption]{font-size:.8125rem;color:var(--a-muted)}[data-component-part=step-number]{font-family:\"Geist Mono\",ui-monospace,monospace;font-size:.75rem!important}[data-component-part=step-title]{font-weight:600;letter-spacing:-.01em}#content-area .prose th{font-weight:560;color:var(--a-muted)}.prose :not(pre)>code{font-size:.8125rem;border-radius:.35rem}kbd{display:inline-block;min-width:1.4em;padding:.05em .4em;font-size:.75rem;line-height:1.5;text-align:center;color:var(--a-fg);background:var(--a-card);border-radius:.35rem;box-shadow:0 0 0 1px var(--a-border),0 1px 0 var(--a-border)}.prompt-card{margin:1.5rem 0;padding:.25rem .75rem .5rem;border-radius:calc(var(--a-radius)*1.4);background:var(--a-fill);box-shadow:0 0 0 1px var(--a-border)}.prompt-card-label{margin:.6rem .25rem -.25rem;font-size:.75rem;font-weight:500;color:var(--a-muted)}@media (max-width:640px){#page-title{font-size:1.5rem!important}#content-area .prose table{display:block;overflow-x:auto}}#content-area .prose table{width:100%;table-layout:fixed}#content-area .prose td,#content-area .prose th{overflow-wrap:anywhere;vertical-align:top}#alpha-top-actions{position:fixed;top:.5rem;right:1.5rem;z-index:40;display:flex;align-items:center;gap:1rem}#alpha-top-actions[hidden]{display:none}#alpha-changelog-link{font-size:.8125rem;font-weight:500;color:var(--a-muted);text-decoration:none;transition:color 150ms ease}#alpha-changelog-link:hover{color:var(--a-fg)}#alpha-ask-ai{display:inline-flex;align-items:center;gap:.4rem;height:2rem;padding:0 .5rem 0 .75rem;border-radius:999px;font-size:.8125rem;font-weight:560;color:var(--a-signal);background:var(--a-signal-soft);box-shadow:0 0 0 1px color-mix(in oklab,var(--a-signal) 35%,transparent);cursor:pointer;transition:background 150ms ease,box-shadow 150ms ease}#alpha-ask-ai:hover{background:color-mix(in oklab,var(--a-signal) 18%,transparent);box-shadow:0 0 0 1px color-mix(in oklab,var(--a-signal) 60%,transparent)}#alpha-ask-ai[hidden]{display:none}#alpha-ask-ai kbd{padding:0 .35em;font-size:.6875rem;color:inherit;background:0 0;box-shadow:0 0 0 1px color-mix(in oklab,var(--a-signal) 30%,transparent)}@media (max-width:1023px){#alpha-top-actions{display:none}}.card-group:is([style*=\"--cols:3\"], [style*=\"--cols: 3\"], [style*=\"--cols:4\"], [style*=\"--cols: 4\"]) .card [data-component-part=card-content-container]{display:block;padding:1rem!important}.card-group:is([style*=\"--cols:3\"], [style*=\"--cols: 3\"], [style*=\"--cols:4\"], [style*=\"--cols: 4\"]) .card [data-component-part=card-icon]{margin-bottom:.75rem!important}.card-group:is([style*=\"--cols:3\"], [style*=\"--cols: 3\"], [style*=\"--cols:4\"], [style*=\"--cols: 4\"]) .card [data-component-part=card-title]{padding-top:0}.card-group:is([style*=\"--cols:3\"], [style*=\"--cols: 3\"], [style*=\"--cols:4\"], [style*=\"--cols: 4\"]) .card [data-component-part=card-content]{margin-top:.25rem!important}:root{--content-width:46rem}html.alpha-sidebar-collapsed{--sidebar-width:0px;--content-width:54rem}html.alpha-sidebar-collapsed #sidebar{display:none!important}#alpha-sidebar-toggle{position:fixed;top:.6875rem;left:calc(var(--sidebar-width, 19rem) + .5rem);z-index:40;display:grid;place-items:center;width:1.625rem;height:1.625rem;border-radius:.45rem;color:var(--a-muted);cursor:pointer;transition:color 150ms ease,background 150ms ease}#alpha-sidebar-toggle:hover{color:var(--a-fg);background:var(--a-fill)}html.alpha-sidebar-collapsed #alpha-sidebar-toggle{color:var(--a-signal)}@media (max-width:1023px){#alpha-sidebar-toggle{display:none}}.update-container{flex-direction:column!important;gap:1rem!important}.update-container>div:first-child{position:static!important;width:100%!important;display:flex!important;flex-direction:row!important;flex-wrap:wrap;align-items:center!important;gap:.5rem;padding-bottom:1rem;border-bottom:1px solid var(--a-border)}.update-container [data-component-part=update-description]{order:-1;flex-basis:100%;max-width:none!important;margin:0 0 .125rem!important;font-size:1.25rem!important;line-height:1.3!important;font-weight:600!important;letter-spacing:-.015em;color:var(--a-fg)!important}.update-container [data-component-part=update-label]{padding:0!important;background:0 0!important;font-size:.8125rem!important;font-weight:500!important;color:var(--a-muted)!important}.update-container [data-component-part=update-label]::after{content:\"·\";margin-left:.5rem;color:var(--a-muted)}.update-container [data-component-part=update-tag-list]{display:flex;flex-wrap:wrap;gap:.375rem;margin:0!important}.update-container [data-component-part=update-tag]{margin:0!important;padding:.0625rem .5rem!important;border-radius:999px;font-size:.75rem!important;font-weight:500!important;line-height:1.5!important;color:var(--a-soft)!important;background:var(--a-fill)!important;box-shadow:0 0 0 1px var(--a-border)}.update-container [data-component-part=update-content]{width:100%}.update-container [data-component-part=update-content],.update-container [data-component-part=update-description]{padding-left:0!important;padding-right:0!important}.update-container [data-component-part=update-content]>:first-child{margin-left:0!important}#pagination [data-component-part=pagination-next]>div{justify-content:space-between!important}#pagination [data-component-part=pagination-next]>div>div:first-child{flex:1;align-items:flex-start!important;gap:.125rem}#pagination [data-component-part=pagination-description],#pagination [data-component-part=pagination-title]{width:100%!important;max-width:none!important;text-align:left!important}#pagination [data-component-part=pagination-description]{font-size:.8125rem}"}],"page":{"pagePath":"guides/existing-repo","slug":"/guides/existing-repo","pageMetadata":{"title":"Work on an existing repository","sidebarTitle":"Your existing repo","description":"For engineers: bring a GitHub repo into a session, plan a change, review it and open a pull request.","href":"/guides/existing-repo"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"For engineers: bring a GitHub repo into a session, plan a change, review it and open a pull request.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const PromptCard=({label=`Prompt`,children})=>_jsxs(`div`,{className:`prompt-card not-prose`,children:[_jsx(`div`,{className:`prompt-card-label`,children:label}),children]});const setupsMax=`5 per account`;const reposMax=`5 per session`;const appUrl=`https://alpha.new`;function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Badge,Card,CardGroup,Check,CodeBlock,Frame,Heading,Note,OptimizedImage,Step,Steps,Warning,_MdxComponentBoundary}=_components;if(!Badge)_missingMdxReference(`Badge`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Check)_missingMdxReference(`Check`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Warning)_missingMdxReference(`Warning`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`This guide takes one of your GitHub repositories from the home screen to an open pull request: the agent plans the change with you, builds it on a branch, runs your tests and reviews its own diff before you push. It ends by saving the machine as a setup, so the next session on that repository starts with everything installed. To start from an idea rather than a codebase, follow the `,_jsx(_components.a,{href:`/quickstart`,children:`Quickstart`}),` instead.`]}),`\n`,_jsx(Badge,{children:`About 20 minutes`}),`\n`,_jsxs(_components.p,{children:[`By the end of this guide you will have a pull request on `,_jsx(_components.code,{children:`harbor-api`}),`, Harbor Sailing School’s booking API, that adds a waitlist to full classes. You will also have a setup that boots new `,_jsx(_components.code,{children:`harbor-api`}),` sessions with the repository cloned and its dependencies installed.`]}),`\n`,_jsx(Heading,{level:`2`,id:`before-you-start`,children:`Before you start`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`An Alpha account. Sign in at `,_jsx(_components.a,{href:appUrl,children:appUrl}),`.`]}),`\n`,_jsxs(_components.li,{children:[`A GitHub repository you can push to. This guide uses `,_jsx(_components.code,{children:`harbor-sailing/harbor-api`}),`; use any repository of your own.`]}),`\n`,_jsxs(_components.li,{children:[`A test command that runs from the terminal, such as `,_jsx(_components.code,{children:`npm test`}),` or `,_jsx(_components.code,{children:`pytest`}),`. The agent uses it to check its work.`]}),`\n`]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`If the GitHub card says “GitHub isn’t set up on this server yet — ask whoever runs it.”, GitHub isn’t turned on for your Alpha. Public repositories can still be added by name, but nothing can be pushed.`})}),`\n`,_jsx(Heading,{level:`2`,id:`take-a-repository-to-a-pull-request`,children:`Take a repository to a pull request`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Connect GitHub`,children:_jsxs(_components.p,{children:[`On the home screen, click the `,_jsx(_components.strong,{children:`repos`}),` chip in the composer, then `,_jsx(_components.strong,{children:`Connect GitHub`}),`. GitHub opens in a new browser tab. Pick your account or an organization, choose which repositories Alpha may work in, and authorize. When you come back, Alpha’s tab has already picked up the connection. You do this once per account: every session you own gets an authenticated `,_jsx(_components.code,{children:`git`}),` and `,_jsx(_components.code,{children:`gh`}),`, and the token is redacted if it ever reaches the transcript. To add an organization later, use `,_jsx(_components.strong,{children:`add account`}),` in the same popover. `,_jsx(_components.a,{href:`/github/connect`,children:`Connect GitHub and add repositories`}),` covers organizations and access requests.`]})}),_jsx(Step,{title:`Stage the repository and its branch`,children:_jsxs(_components.p,{children:[`Open the `,_jsx(_components.strong,{children:`repos`}),` chip again and type `,_jsx(_components.code,{children:`harbor`}),` in `,_jsx(_components.strong,{children:`Search your repos or owner/repo`}),`. Click `,_jsx(_components.code,{children:`harbor-sailing/harbor-api`}),`. It is added to the staged list with a branch field that reads `,_jsx(_components.strong,{children:`default branch`}),`. Leave it empty to start from the repository’s default branch, `,_jsx(_components.code,{children:`main`}),` here, or type an existing branch such as `,_jsx(_components.code,{children:`develop`}),`. The branch must already exist on GitHub. New work goes on a new branch, which the agent creates in the next step. You can stage up to `,reposMax,`, and a setup’s repositories count toward it; see `,_jsx(_components.a,{href:`/reference/limits`,children:`Limits`}),`. The repository is cloned into `,_jsx(_components.code,{children:`/workspace/harbor-api`}),` before the agent’s first turn.`]})}),_jsxs(Step,{title:`Ask for a plan`,children:[_jsxs(_components.p,{children:[`Type the task after `,_jsx(_components.code,{children:`/plan`}),` and send it. On the home screen, `,_jsx(_components.code,{children:`/plan \u003ctask>`}),` creates the session in `,_jsx(_components.a,{href:`/chat/plan-mode`,children:`plan mode`}),` and sends the task as its first message. In plan mode the agent reads the code and changes no files. When it needs a decision, it asks in a question card titled “The agent has questions”. Pick an option or type into `,_jsx(_components.strong,{children:`Something else…`}),`, then press `,_jsx(_components.strong,{children:`Send answers`}),`. To leave the choice to the agent, press `,_jsx(_components.strong,{children:`Skip — let the agent decide`}),` instead. You can also switch plan mode on and off with `,_jsx(`kbd`,{children:`⇧`}),_jsx(`kbd`,{children:`Tab`}),` in the composer.`]}),_jsx(_MdxComponentBoundary,{name:`PromptCard`,children:_jsx(PromptCard,{label:`Try this`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`/plan Add a waitlist to class bookings in harbor-api. When a class is full, POST /bookings should put the member on a waitlist instead of returning 409, and cancelling a booking should promote the first member waiting. Work on a new branch called feature/waitlist and commit there. Keep the existing tests passing and add tests for the new behaviour.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})})}),_jsx(_components.p,{children:`Alpha will:`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Create the session and clone `,_jsx(_components.code,{children:`harbor-api`}),` into its machine.`]}),`\n`,_jsx(_components.li,{children:`Read the routes, models and tests without changing a file.`}),`\n`,_jsx(_components.li,{children:`Ask you about anything the code doesn’t settle, such as whether a waitlist has a maximum length.`}),`\n`,_jsxs(_components.li,{children:[`Write a proposed plan into the `,_jsx(_components.strong,{children:`Plan`}),` tab, which opens by itself.`]}),`\n`]})]}),_jsxs(Step,{title:`Implement the plan and run the tests`,children:[_jsxs(_components.p,{children:[`Press `,_jsx(_components.strong,{children:`Implement this plan`}),` in the Plan tab. It switches plan mode off and sends “Implement the plan.” for you. As the task asked, the agent creates `,_jsx(_components.code,{children:`feature/waitlist`}),`, writes the code, runs your test suite and commits on the branch. The turn runs on Alpha’s servers, so you can close the tab and come back to a complete transcript.`]}),_jsxs(_components.p,{children:[`To check the work yourself, open the workspace’s `,_jsx(_components.strong,{children:`+`}),` menu and choose `,_jsx(_components.strong,{children:`Shell`}),`. The `,_jsx(_components.a,{href:`/workspace/shell`,children:`Shell`}),` is a terminal in the same machine, as the same account the agent uses, with `,_jsx(_components.code,{children:`sudo`}),`. Run `,_jsx(_components.code,{children:`cd harbor-api \u0026\u0026 npm test`}),`. Files you change there are files the agent sees on its next turn.`]}),_jsx(Frame,{caption:`The Shell opens in /workspace, the same folder the agent works in.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/workspace/shell-tab.png?fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=98a8c4f14da9645f84887515db636d13`,alt:`The Harbor bookings session with the Shell tab in front. The tab strip reads Plan, Preview, then Shell with a terminal icon and its ×, then Database, Secrets, README.md and a tab cut off behind a scroll arrow. To its right sit the round + button, a trash can for Clear and a circular arrow for Restart shell, then the GitHub button, Share, Publish and the files button. The terminal fills the panel. At the prompt forge:/workspace$, ls lists README.md, booking-store.js, booking-store.test.js, db, node_modules, package-lock.json, package.json, public, server.js and styleguide.md. Then node --version prints v22.23.4, and a fresh prompt waits below. The chat on the left shows the answered The agent has questions card and the Proposed plan card for Automatic class waitlist.`,\"data-og-width\":`2940`,width:`2940`,\"data-og-height\":`1533`,height:`1533`,\"data-path\":`images/workspace/shell-tab.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/workspace/shell-tab.png?w=280\u0026fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=aaeed10ea936ea5c953f2557560d4396 280w, https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/workspace/shell-tab.png?w=560\u0026fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=c9df059d4f4c63c3558c6cde737e65cc 560w, https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/workspace/shell-tab.png?w=840\u0026fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=c12484693a28fc5b4efa77ff8d74d47a 840w, https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/workspace/shell-tab.png?w=1100\u0026fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=d22fba3b53979eb4b1d77259e5d53797 1100w, https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/workspace/shell-tab.png?w=1650\u0026fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=a6165037864d6dd481dfacadd863a082 1650w, https://mintcdn.com/lyzr-15a99e0f/ObBpayiae_4aNgzN/images/workspace/shell-tab.png?w=2500\u0026fit=max\u0026auto=format\u0026n=ObBpayiae_4aNgzN\u0026q=85\u0026s=d5995fc3f8d36c8daeb5cdd20cab46b8 2500w`})})]}),_jsx(Step,{title:`Review the branch against main`,children:_jsxs(_components.p,{children:[`When the turn ends, type `,_jsx(_components.code,{children:`/review`}),` and press `,_jsx(`kbd`,{children:`Enter`}),`. In `,_jsx(_components.strong,{children:`Start a review`}),`, choose `,_jsx(_components.strong,{children:`Review against a base branch`}),`. The branch field is already filled with `,_jsx(_components.code,{children:`main`}),`, the repository’s default branch. Press `,_jsx(_components.strong,{children:`Start review`}),`. In a Codex session, Codex runs its review mode on the workspace and posts a “Review started” card, then a “Review findings” card. In a Claude Code session, Claude Code gets a review prompt and answers in the transcript instead. To act on what it found, reply with the findings you want fixed. While a turn is running, the review is refused with ”‘/review’ is disabled while a task is in progress.”; see `,_jsx(_components.a,{href:`/reference/slash-commands`,children:`Slash commands`}),`.`]})}),_jsxs(Step,{title:`Push and open the pull request`,children:[_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`GitHub`}),` in the workspace header, beside `,_jsx(_components.strong,{children:`Share`}),`. The branch row shows `,_jsx(_components.code,{children:`feature/waitlist`}),` marked `,_jsx(_components.strong,{children:`unpublished`}),`. If the review fixes left uncommitted changes, type a message in the commit message box under `,_jsx(_components.strong,{children:`Changes`}),` and press `,_jsx(_components.strong,{children:`Commit`}),`, or `,_jsx(_components.strong,{children:`Commit \u0026 push`}),` (`,_jsx(`kbd`,{children:`⌘`}),_jsx(`kbd`,{children:`Enter`}),`, Ctrl on Windows and Linux) to push at once. Then press `,_jsx(_components.strong,{children:`Push \u0026 create PR`}),` in the footer. The `,_jsx(_components.strong,{children:`New pull request`}),` view shows the branch, a base selector set to `,_jsx(_components.code,{children:`main`}),`, a `,_jsx(_components.strong,{children:`Title`}),` taken from the last commit and an optional description. Tick `,_jsx(_components.strong,{children:`Create as draft`}),` if you want, then press `,_jsx(_components.strong,{children:`Push \u0026 create pull request`}),`. See `,_jsx(_components.a,{href:`/github/branches-and-prs`,children:`Branches, commits and pull requests`}),` for why a button can be disabled.`]}),_jsx(Check,{children:_jsxs(_components.p,{children:[`The footer now reads `,_jsx(_components.strong,{children:`View PR #12`}),`, and the pull request is pinned at the top of `,_jsx(_components.strong,{children:`Pull requests`}),`. Commits carry your GitHub account as their author.`]})})]}),_jsxs(Step,{title:`Save a setup for next time`,children:[_jsxs(_components.p,{children:[`Every new session on `,_jsx(_components.code,{children:`harbor-api`}),` would clone and install from scratch. A `,_jsx(_components.a,{href:`/sessions/setups`,children:`setup`}),` saves that work once: the repository cloned, a setup script run and the machine saved, so the next session boots in about a second. Ask the agent to save one from what worked in this session.`]}),_jsx(_MdxComponentBoundary,{name:`PromptCard`,children:_jsx(PromptCard,{label:`Try this`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Save this environment as a setup called \"harbor-api dev\". Clone harbor-sailing/harbor-api, install its dependencies and run the migrations. On each new machine, pull the latest main. In the notes, say how to run the tests and the dev server.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})})}),_jsx(_components.p,{children:`Alpha will:`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Write the setup from the commands that worked here: the install, the migrations, and a boot script that pulls the latest `,_jsx(_components.code,{children:`main`}),`.`]}),`\n`,_jsx(_components.li,{children:`Start the build on a fresh machine, which usually takes a few minutes. Your session’s machine is not touched.`}),`\n`,_jsx(_components.li,{children:`Tell you when it is ready, or that it is still building and will appear in the home screen’s machine chip.`}),`\n`]}),_jsxs(_components.p,{children:[`Next time, click the machine chip on the home screen, which reads `,_jsx(_components.strong,{children:`blank machine`}),`, and pick `,_jsx(_components.strong,{children:`harbor-api dev`}),`. You can keep `,setupsMax,` (`,_jsx(_components.a,{href:`/reference/limits`,children:`Limits`}),`). To see a build’s progress, open `,_jsx(_components.strong,{children:`Account menu → Setups`}),`.`]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`A setup build runs with your GitHub token and secrets in its environment. Alpha removes them before saving the machine, but files are kept. A token written into `,_jsx(_components.code,{children:`.npmrc`}),` or `,_jsx(_components.code,{children:`.env`}),` during the build ends up in every machine started from the setup, including those of anyone you share it with.`]})}),`\n`,_jsx(_components.p,{children:`You connected GitHub, planned a change before any code moved, built and reviewed it on a branch, opened a pull request, and saved the machine as a setup for your next session.`}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Branches, commits and pull requests`,icon:`code-branch`,href:`/github/branches-and-prs`,children:_jsx(_components.p,{children:`Create branches from the GitHub tab, pull when you fall behind, and see why the PR button is disabled.`})}),_jsx(Card,{title:`Setups`,icon:`server`,href:`/sessions/setups`,children:_jsx(_components.p,{children:`Edit the setup script and boot script by hand, share a setup with your team, or rebuild it.`})}),_jsx(Card,{title:`Plan mode and the agent's questions`,icon:`compass-drafting`,href:`/chat/plan-mode`,children:_jsx(_components.p,{children:`Refine a plan over several replies and follow the agent’s to-do list while it builds.`})}),_jsx(Card,{title:`Fork or delete a session`,icon:`code-fork`,href:`/sessions/fork-and-delete`,children:_jsx(_components.p,{children:`Try a second approach to the same change in a copy of this session, without disturbing the first.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{PromptCard,setupsMax,reposMax,appUrl,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"system","config":{},"pageMetadata":{"title":"Work on an existing repository","sidebarTitle":"Your existing repo","description":"For engineers: bring a GitHub repo into a session, plan a change, review it and open a pull request.","href":"/guides/existing-repo"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[146,314,")=>null;const setups"],[2548,2555,"`https://alpha.new`}"],[5146,5159,"`5 per session`,`, a"],[16084,16098,"`5 per account`,` (`"]]},"mdxExtracts":{"tableOfContents":[{"title":"Before you start","slug":"before-you-start","depth":2,"children":[]},{"title":"Take a repository to a pull request","slug":"take-a-repository-to-a-pull-request","depth":2,"children":[]},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/lyzr-15a99e0f/f9d02407465743f5/ask-ai.js","/_mintlify/custom/lyzr-15a99e0f/b625f5335bec8a53/sidebar-toggle.js"],"subdomain":"lyzr-15a99e0f","siteName":"Alpha","title":"Work on an existing repository - Alpha","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-27T23:53:05.746Z","originalFileLocation":"guides/existing-repo.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"For engineers: bring a GitHub repo into a session, plan a change, review it and open a pull request.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Alpha\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Work on an existing repository - Alpha\">\u003cmeta data-mint-head property=\"og:description\" content=\"For engineers: bring a GitHub repo into a session, plan a change, review it and open a pull request.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Alpha docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://lyzr-15a99e0f.mintlify.app/guides/existing-repo\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://lyzr-15a99e0f.mintlify.app/_mintlify/api/og/v2?division=Guides\u0026amp;title=Work+on+an+existing+repository\u0026amp;description=For+engineers%3A+bring+a+GitHub+repo+into+a+session%2C+plan+a+change%2C+review+it+and+open+a+pull+request.\u0026amp;theme=47e77850d1920921f207f882\u0026amp;signature=976d71ce100f33eb36b121bd9a404ad9ec1a3be5939b3dfa68ab85f5c490768f\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Work on an existing repository - Alpha\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"For engineers: bring a GitHub repo into a session, plan a change, review it and open a pull request.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://lyzr-15a99e0f.mintlify.app/_mintlify/api/og/v2?division=Guides\u0026amp;title=Work+on+an+existing+repository\u0026amp;description=For+engineers%3A+bring+a+GitHub+repo+into+a+session%2C+plan+a+change%2C+review+it+and+open+a+pull+request.\u0026amp;theme=47e77850d1920921f207f882\u0026amp;signature=976d71ce100f33eb36b121bd9a404ad9ec1a3be5939b3dfa68ab85f5c490768f\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/lyzr-15a99e0f/O3mZitdsDDMzESr8/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Alpha\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1A54F0\">\u003clink data-mint-head rel=\"canonical\" href=\"https://lyzr-15a99e0f.mintlify.app/guides/existing-repo\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/existing-repo.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://lyzr-15a99e0f.mintlify.app/#organization\",\"name\":\"Alpha\",\"url\":\"https://lyzr-15a99e0f.mintlify.app\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/lyzr-15a99e0f/peFm_Sv4KgaR4cun/images/logo/light.png?fit=max\u0026auto=format\u0026n=peFm_Sv4KgaR4cun\u0026q=85\u0026s=633788f52e3e9a8128bdaf2d7a62fff6\"}},{\"@type\":\"WebSite\",\"@id\":\"https://lyzr-15a99e0f.mintlify.app#website\",\"name\":\"Alpha\",\"url\":\"https://lyzr-15a99e0f.mintlify.app\",\"publisher\":{\"@id\":\"https://lyzr-15a99e0f.mintlify.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://lyzr-15a99e0f.mintlify.app/guides/existing-repo#webpage\",\"url\":\"https://lyzr-15a99e0f.mintlify.app/guides/existing-repo\",\"name\":\"Work on an existing repository\",\"description\":\"For engineers: bring a GitHub repo into a session, plan a change, review it and open a pull request.\",\"dateModified\":\"2026-10-27T23:53:05.746Z\",\"isPartOf\":{\"@id\":\"https://lyzr-15a99e0f.mintlify.app#website\"},\"breadcrumb\":{\"@id\":\"https://lyzr-15a99e0f.mintlify.app/guides/existing-repo#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://lyzr-15a99e0f.mintlify.app/guides/existing-repo#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Guides\",\"item\":\"https://lyzr-15a99e0f.mintlify.app/guides/landing-page\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Work on an existing repository\",\"item\":\"https://lyzr-15a99e0f.mintlify.app/guides/existing-repo\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://lyzr-15a99e0f.mintlify.app/guides/existing-repo#article\",\"headline\":\"Work on an existing repository\",\"name\":\"Work on an existing repository\",\"description\":\"For engineers: bring a GitHub repo into a session, plan a change, review it and open a pull request.\",\"url\":\"https://lyzr-15a99e0f.mintlify.app/guides/existing-repo\",\"mainEntityOfPage\":{\"@id\":\"https://lyzr-15a99e0f.mintlify.app/guides/existing-repo#webpage\"},\"dateModified\":\"2026-10-27T23:53:05.746Z\",\"publisher\":{\"@id\":\"https://lyzr-15a99e0f.mintlify.app/#organization\"},\"isPartOf\":{\"@id\":\"https://lyzr-15a99e0f.mintlify.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Alpha\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Alpha","nav":{"global":null,"tabs":[{"tab":"Get started","groups":[{"group":"Get started","pages":[{"title":"Alpha documentation","sidebarTitle":"Introduction","href":""},{"title":"Build your first app","sidebarTitle":"Quickstart","href":"/quickstart"},{"title":"How Alpha works","sidebarTitle":"How Alpha works","href":"/get-started/how-alpha-works"},{"title":"Prompt Alpha well","sidebarTitle":"Prompting","href":"/get-started/prompting"},{"title":"Choose the right tool","sidebarTitle":"Choose the right tool","href":"/get-started/choose-the-right-tool"}]},{"group":"Guides","pages":[{"title":"Build and publish a landing page","sidebarTitle":"A landing page","href":"/guides/landing-page"},{"title":"Add a database and sign-in, then go to production","sidebarTitle":"A data app with sign-in","description":"Grow the Harbor booking app into a members app with accounts and saved bookings, then publish it with its own production database.","href":"/guides/data-app"},{"title":"Work on an existing repository","sidebarTitle":"Your existing repo","href":"/guides/existing-repo"},{"title":"Build, try and test a support-triage agent","sidebarTitle":"An AI agent with evals","description":"Describe an agent that triages Harbor's inbox, try it on a real message, and prove it with an eval before you rely on it.","href":"/guides/ai-agent"},{"title":"Post a weekly summary to Slack","sidebarTitle":"A scheduled report","href":"/guides/weekly-summary"}]},{"group":"Your account","pages":[{"title":"Your account and settings","sidebarTitle":"Account and settings","href":"/account/your-account"},{"title":"Usage, costs and your own plan","sidebarTitle":"Usage and costs","href":"/account/usage-and-costs"}]}]},{"tab":"Build","pages":[{"title":"Build","href":"/sessions/home-screen"}]},{"tab":"Ship","pages":[{"title":"Ship","href":"/publish/publish-your-app"}]},{"tab":"Connect","pages":[{"title":"Connect","href":"/integrations/overview"}]},{"tab":"Agents","pages":[{"title":"Agents","href":"/agents/build-an-agent"}]},{"tab":"Reference","pages":[{"title":"Reference","href":"/reference/slash-commands"}]}]},"title":"Work on an existing repository - Alpha","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-BbYRHtLl.js","DynamicMarkdown-DN96a4Ur.js","zoom-image-lightbox-D7yRe3On.js","lightbox-handle-r17bVUz3.js"]}