Connect your repository, prepare a testable preview, and give Spur the context it needs to check your changes.
Set up the PR Agent once for each Application. After that, Spur uses your saved deployment, environment, and instructions every time it tests a PR. Testing can start automatically or from a bare @spur comment.
The PR Agent is in private beta. Contact Spur if it is not enabled for your Application.Prepare these items:
A GitHub repository and permission to install or approve the Spur GitHub App.
A deployed web app Spur can reach: a preview for each PR or a shared QA site.
A web environment with the site URL and any test accounts, variables, or data your app needs.
A PR with a change you can check in the browser.
The GitHub App reads code and metadata and has write access to issues, pull requests, and commit statuses. It cannot push code or merge your PR. Anyone who requests tests needs write, maintain, or admin access to the repository.
Select your Application, open GitHub settings, and select PR Agent. If needed, connect GitHub from Integrations first.
2
Open guided setup
Click Set up PR Agent, or Guided setup for an existing configuration. The sections are Overview, Repositories, Deployment, Run policy, Instructions, and Review.
3
Connect and enable repositories
Click Connect GitHub and finish the installation in GitHub for the repositories you want to test. If an organization owner must approve the App, connect the repositories again from Spur after they approve it.If the App is already installed, link that installation when Spur offers it. Then enable the repositories in Spur. To change which repositories the App can access, click Manage GitHub access, then click Refresh.
4
Review and save
Set the deployment, run policy, and instructions as described below. On Review, click Save setup. Saving does not start any tests.
Spur preselects the Spur environment when your Application has only one web environment or one default. Keep it if it has the test accounts and data you want. If the field is empty, select a web environment. After you save, you do not need to name an environment in each comment.The two settings do different jobs:
Setting
Purpose
Spur environment
Supplies saved tests, variables, and test configuration.
Deployment target
Selects the website where Spur checks the change.
Keep the default test configuration, or change it when a repository needs different accounts or data.
For Vercel, click Connect Vercel, authorize access, and select the project that deploys your app. With PR preview · Latest commit, Spur tests the build of the PR’s latest commit.Spur checks whether it can open protected previews. If Spur asks, create a Protection Bypass for Automation secret in Vercel, enter it under Bypass secret, and click Verify. If no preview exists yet, deploy one and click Check again.Without a Vercel connection, select PR preview · From GitHub. Spur then uses supported preview links on the PR, including Shopify theme previews. If a PR has several storefronts, name the default one in Testing instructions. You can also describe your per-PR URL pattern there.
Wait for the change to deploy, then include the site URL in your request:
@spur check the checkout changes on https://qa.example.com.Use our usual test account and test payment details.
A QA URL in your saved instructions does not select the site. Name the URL in the request, and confirm that the shared site has the change you want to test.If a connected Vercel environment deploys one branch, Spur can test its latest ready deployment. The report notes when that build may not include the PR. Pick test flows and accounts that are safe for the target, especially on a live site.
This setting controls when testing starts. In both modes, Spur chooses and runs the tests. With Manual, someone comments @spur when they want the PR tested. With Automatic, Spur starts when a PR opens or gets a selected label.Set the first run and later commits separately. During setup, use Run policy. After setup, use When Spur runs.
Setting
Choices
First run
Manual, or Automatic for Every new PR or When a label is added.
Later commits
Do nothing, Rerun failed tests, or Check the full PR again.
Change scope
Any change or Only the changes I describe.
For example, you can start the first run with a comment and let later commits start new runs automatically.Automatic first runs wait until a draft PR is ready for review. For label-based testing, later automatic runs need a selected label to stay on the PR.Rerun failed tests retries the tests that did not pass in the latest completed run, including errors and unfinished tests. If every test passed, Spur skips the rerun. If no earlier run completed, Spur checks the full PR instead.Check the full PR again looks at the updated change and picks the relevant tests again. It does not run every saved test in your Application. A change scope rule, such as “Run for changes to checkout or payments. Skip documentation-only changes.”, applies only to automatic runs. You can still request tests in a comment.
Testing instructions are optional. Spur already reads the code change, the PR description, and linked tickets. Use instructions for facts those sources leave out, such as your terms, test accounts, or required data. Your team then does not have to repeat them on every PR.
1
Select the settings scope
Under Run settings, use Settings for to select Shared defaults or a repository. Click Customize for this repository if it needs its own configuration.
2
Describe your app and test setup
Click Edit beside Testing instructions. Include your glossary, roles, important flows, test-data requirements, and the default preview or market if needed.
Use shared instructions for the terminology and setup your team would otherwise repeat.
3
Insert credentials securely
Click Insert variable to add an encrypted variable from the selected environment. To make a new one, click Create encrypted variable in the picker. Keep passwords and tokens out of plain-text instructions and GitHub comments.
4
Save changes
Click Save changes. Done closes the editor but does not save the settings.
For example, a storefront team might save:
A basket is the shopping cart. A member is a signed-in customer.Use the AU storefront preview unless the request names another market.Prioritize guest checkout, discounts, and member sign-in.Use the test account configured for this environment.Use products labeled Demo and sandbox payment details at checkout.Loyalty points are not enabled in preview builds.
Replace these lines with facts about your app, and insert the credential variables it needs. Update the instructions when your app changes. A PR comment can override them for one request without changing what you saved.
Link requirements in the PR description or in your request. Spur reads GitHub issues from the same repository. It also reads tickets from the Linear, Jira, Azure DevOps, and ClickUp integrations connected to your Application.To check these connections, click Manage ticket sources. If Spur cannot open a ticket, describe the expected behavior in the PR or the request.
Repositories use the Shared defaults of their Application unless you customize them. Click Customize for this repository to give a repository its own settings, or Use shared defaults to undo that. Save your changes when you finish.Disabling a repository stops new requests from starting tests. Tests that are already running continue. To stop them, comment @spur stop on the PR.
Pick a PR with a visible change and a ready deployment. Post a new comment that contains only @spur. Spur picks and runs the checks with your saved setup.In the report, check the commit, the deployment, and the Spur environment. Then open a result to see the evidence. When this works, you can turn on automatic testing for later PRs. Extra guidance is optional.
Start with a small PR, and review the first results with the engineer who made the change.
Recommend
Avoid
Start with one or two repositories and a small, visible change. Confirm the setup with one @spur comment before you turn on automatic testing.
Testing a large release PR first, or expecting browser tests for a change that users cannot see.
Confirm that the preview has the change and that the test account can sign in there. Check deployment protection first.
Assuming that a production login also works on a new preview.
Explain the intended behavior in the PR and link its requirements. Add your terminology, roles, and recurring setup to Testing instructions.
Relying on the diff alone to explain business rules, or repeating the same context in every comment.
Keep reusable login steps in saved login tests, with credentials in encrypted variables. Prepare the CMS content, products, and other test data that tests need.
Plain-text passwords, long copied login procedures, or a test that depends on data that does not exist.
Name the default storefront or market when a repository has several previews.
Leaving Spur to guess between similar previews.
Review the evidence and save useful tests. Turn on automatic testing after the first PRs give you useful results.
Treating a pass as proof that Spur checked every possible regression, or saving every test without review.
When you add guidance, describe the result you want and any context the PR lacks. Spur writes the browser steps. To edit saved steps yourself, see the Web Prompting Guide.
Post a new PR conversation comment with @spur outside quotes and code. Confirm that the Spur GitHub App can access the repository. Editing an old comment does not request new tests.
Setup or access message
Select the correct Application, confirm beta access, enable the repository, and save a web environment in PR Agent settings.
Missing or failed preview
Check the build, the connected project, or the preview link. For a shared QA site, put its URL in the request.
Login or preview protection failure
Test the login on that preview, and check its encrypted variables and Vercel access.
Wrong target
Name the preview and Spur environment you want in a new comment. Then correct the shared defaults if needed.
Unclear request
Add the missing behavior, target, or other detail in a new @spur comment.
Was this page helpful?
⌘I
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"Spur Documentation","description":"Spur is an AI-powered QA engineer. Create, run, and analyze automated end-to-end tests for web and mobile apps using natural language.","colors":{"primary":"#4968ec","light":"#ffa07a","dark":"#4968ec"},"logo":{"light":"https://mintcdn.com/spur/cytvGy0qHI_KqMmI/logo/logo.png?fit=max\u0026auto=format\u0026n=cytvGy0qHI_KqMmI\u0026q=85\u0026s=f931455ec7ab89b4f23bea661c49b9a0","dark":"https://mintcdn.com/spur/cytvGy0qHI_KqMmI/logo/logo.png?fit=max\u0026auto=format\u0026n=cytvGy0qHI_KqMmI\u0026q=85\u0026s=f931455ec7ab89b4f23bea661c49b9a0"},"favicon":"https://mintcdn.com/spur/PGSKxMZrMj-HShvG/favicon.png?fit=max\u0026auto=format\u0026n=PGSKxMZrMj-HShvG\u0026q=85\u0026s=15b039b8d8cc786e659efff9c0636668","appearance":{"default":"light","strict":true},"background":{"image":"https://mintcdn.com/spur/9IFtS_isfyhWoPyj/background1.png?fit=max\u0026auto=format\u0026n=9IFtS_isfyhWoPyj\u0026q=85\u0026s=f63e06dee0abaa4a411dfab251c5f2e2","color":{"light":"#ffffff","dark":"#111111"}},"navbar":{"links":[{"href":"https://app.spurtest.com/signin","label":"Sign In"}],"primary":{"type":"button","label":"Book a Demo","href":"https://www.spurtest.com/book-a-demo"}},"footer":{"socials":{"x":"https://x.com/spur_dev","linkedin":"https://www.linkedin.com/company/spur-test"}},"search":{"prompt":"Search Spur docs or ask a question..."},"seo":{"metatags":{"canonical":"https://docs.spurtest.com"}},"errors":{"404":{"redirect":true}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","cursor","vscode"],"display":"header"},"markdown":{"instructions":["Spur is an AI-powered QA engineer that lets teams create and run automated end-to-end tests for web and mobile apps using natural language.","When answering questions about Spur, cite the relevant page from docs.spurtest.com."]},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"spur","hasAudioNarration":false,"actualSubdomain":"spur","customDomains":["docs.spurtest.com"],"gitSource":{"type":"github","owner":"tryspur-dev","repo":"spur_docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad7dbecc135d285671f8ba8","collectionId":"53c5bb93-0d2a-40a8-8f49-926db660b2e5","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad7dbecc135d285671f8ba8"},"feedback":{"thumbs":true,"edits":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae27ab04c4a8261078c2a63","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"Documentation","count":100},{"language":"default","tag":"Authoring Tests","count":43},{"language":"default","tag":"Test Side Peek","count":33},{"language":"default","tag":"Step Types","count":27},{"language":"default","tag":"Analyzing Tests","count":21},{"language":"default","tag":"Getting Started","count":11},{"language":"default","tag":"Additional Resources","count":10},{"language":"default","tag":"Integrations","count":8},{"language":"default","tag":"Running Tests","count":8},{"language":"default","tag":"Supported Actions","count":7}]},"assistantConfig":{},"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}],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":"/* devanagari */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiEyp8kv8JHgFVrJJbecmNE.woff2) format('woff2');\n unicode-range: U+0900-097F, U+1CD0-1CF4, U+1CF7-1CF9, U+200C-200D, U+20A8, U+20B9, U+20F0, U+25CC, U+A830-A839, U+A8E0-A8FF, U+11B00-11B0A;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Poppins';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiEyp8kv8JHgFVrJJnecmNE.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: 'Poppins';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/poppins/v24/pxiEyp8kv8JHgFVrJJfecg.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}\nbody,h1,h2,h3,h4,h5,h6{font-family:'Poppins',sans-serif}.preview-section{background-color:#f8f9fa;background-image:linear-gradient(135deg,rgba(255,255,255,.8) 0,rgba(240,249,245,.8) 100%),linear-gradient(rgba(130,130,130,.1) 1px,transparent 1px),linear-gradient(90deg,rgba(130,130,130,.1) 1px,transparent 1px);background-size:auto,20px 20px,20px 20px;padding:2.5rem;border-radius:12px;margin:2rem 0;box-shadow:inset 0 0 30px rgba(0,0,0,.03),0 1px 3px rgba(0,0,0,.05)}.preview-image{width:100%;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.1)}.preview-image:hover{transform:scale(1.01)}.logo,.preview-image{transition:transform .2s ease}.logo:hover{transform:scale(1.05)}.logo img{object-fit:contain}"}],"page":{"pagePath":"running-tests/cicd/github-agent-setup","slug":"/running-tests/cicd/github-agent-setup","pageMetadata":{"title":"Set Up the PR Agent","sidebarTitle":"Setup","icon":"gear","description":"Connect your repository, prepare a testable preview, and give Spur the context it needs to check your changes.","href":"/running-tests/cicd/github-agent-setup"},"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: \"Connect your repository, prepare a testable preview, and give Spur the context it needs to check your changes.\"\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];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Frame,Heading,OptimizedImage,Step,Steps,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Set up the PR Agent once for each Application. After that, Spur uses your saved deployment, environment, and instructions every time it tests a PR. Testing can start automatically or from a bare `,_jsx(_components.code,{children:`@spur`}),` comment.`]}),`\n`,_jsx(Heading,{level:`2`,id:`before-you-start`,children:`Before you start`}),`\n`,_jsxs(_components.p,{children:[`The PR Agent is in private beta. `,_jsx(_components.a,{href:`/additional-resources/contact-us`,children:`Contact Spur`}),` if it is not enabled for your Application.`]}),`\n`,_jsx(_components.p,{children:`Prepare these items:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`A GitHub repository and permission to install or approve the `,_jsx(_components.a,{href:`https://github.com/apps/spurtestai`,children:`Spur GitHub App`}),`.`]}),`\n`,_jsx(_components.li,{children:`A deployed web app Spur can reach: a preview for each PR or a shared QA site.`}),`\n`,_jsxs(_components.li,{children:[`A web `,_jsx(_components.a,{href:`/authoring-tests/environments/environments`,children:`environment`}),` with the site URL and any test accounts, variables, or data your app needs.`]}),`\n`,_jsx(_components.li,{children:`A PR with a change you can check in the browser.`}),`\n`]}),`\n`,_jsx(_components.p,{children:`The GitHub App reads code and metadata and has write access to issues, pull requests, and commit statuses. It cannot push code or merge your PR. Anyone who requests tests needs write, maintain, or admin access to the repository.`}),`\n`,_jsx(Heading,{level:`2`,id:`connect-repositories`,children:`Connect repositories`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Open GitHub settings`,children:_jsxs(_components.p,{children:[`Select your Application, open `,_jsx(_components.a,{href:`https://app.spurtest.com/integrations/github`,children:`GitHub settings`}),`, and select `,_jsx(_components.strong,{children:`PR Agent`}),`. If needed, connect GitHub from `,_jsx(_components.strong,{children:`Integrations`}),` first.`]})}),_jsx(Step,{title:`Open guided setup`,children:_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Set up PR Agent`}),`, or `,_jsx(_components.strong,{children:`Guided setup`}),` for an existing configuration. The sections are `,_jsx(_components.strong,{children:`Overview`}),`, `,_jsx(_components.strong,{children:`Repositories`}),`, `,_jsx(_components.strong,{children:`Deployment`}),`, `,_jsx(_components.strong,{children:`Run policy`}),`, `,_jsx(_components.strong,{children:`Instructions`}),`, and `,_jsx(_components.strong,{children:`Review`}),`.`]})}),_jsxs(Step,{title:`Connect and enable repositories`,children:[_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Connect GitHub`}),` and finish the installation in GitHub for the repositories you want to test. If an organization owner must approve the App, connect the repositories again from Spur after they approve it.`]}),_jsxs(_components.p,{children:[`If the App is already installed, link that installation when Spur offers it. Then enable the repositories in Spur. To change which repositories the App can access, click `,_jsx(_components.strong,{children:`Manage GitHub access`}),`, then click `,_jsx(_components.strong,{children:`Refresh`}),`.`]})]}),_jsx(Step,{title:`Review and save`,children:_jsxs(_components.p,{children:[`Set the deployment, run policy, and instructions as described below. On `,_jsx(_components.strong,{children:`Review`}),`, click `,_jsx(_components.strong,{children:`Save setup`}),`. Saving does not start any tests.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`choose-the-environment-and-deployment`,children:`Choose the environment and deployment`}),`\n`,_jsxs(_components.p,{children:[`Spur preselects the `,_jsx(_components.strong,{children:`Spur environment`}),` when your Application has only one web environment or one default. Keep it if it has the test accounts and data you want. If the field is empty, select a web environment. After you save, you do not need to name an environment in each comment.`]}),`\n`,_jsx(_components.p,{children:`The two settings do different jobs:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Setting`}),_jsx(_components.th,{children:`Purpose`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Spur environment`})}),_jsx(_components.td,{children:`Supplies saved tests, variables, and test configuration.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Deployment target`})}),_jsx(_components.td,{children:`Selects the website where Spur checks the change.`})]})]})]}),`\n`,_jsx(Frame,{caption:`Keep the default test configuration, or change it when a repository needs different accounts or data.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/spur/ik0kTuD3DFwA9eQf/images/pr-agent/environment-and-deployment.png?fit=max\u0026auto=format\u0026n=ik0kTuD3DFwA9eQf\u0026q=85\u0026s=75541dc48b3bd70ab0d9aefcb97f5c94`,alt:`Spur environment and deployment target controls in PR Agent settings`,style:{width:`100%`,maxWidth:`516px`,height:`auto`},\"data-og-width\":`1032`,width:`1032`,\"data-og-height\":`1126`,height:`1126`,\"data-path\":`images/pr-agent/environment-and-deployment.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/spur/ik0kTuD3DFwA9eQf/images/pr-agent/environment-and-deployment.png?w=280\u0026fit=max\u0026auto=format\u0026n=ik0kTuD3DFwA9eQf\u0026q=85\u0026s=4082c45f8e4773cf24fd79e6ebee2f0f 280w, https://mintcdn.com/spur/ik0kTuD3DFwA9eQf/images/pr-agent/environment-and-deployment.png?w=560\u0026fit=max\u0026auto=format\u0026n=ik0kTuD3DFwA9eQf\u0026q=85\u0026s=394ddb12e634579d1716388e8e3f81e5 560w, https://mintcdn.com/spur/ik0kTuD3DFwA9eQf/images/pr-agent/environment-and-deployment.png?w=840\u0026fit=max\u0026auto=format\u0026n=ik0kTuD3DFwA9eQf\u0026q=85\u0026s=23afcae85912fe931e8e15c9f63ed490 840w, https://mintcdn.com/spur/ik0kTuD3DFwA9eQf/images/pr-agent/environment-and-deployment.png?w=1100\u0026fit=max\u0026auto=format\u0026n=ik0kTuD3DFwA9eQf\u0026q=85\u0026s=26590422429cc87f3fa4f4a8f8b9a331 1100w, https://mintcdn.com/spur/ik0kTuD3DFwA9eQf/images/pr-agent/environment-and-deployment.png?w=1650\u0026fit=max\u0026auto=format\u0026n=ik0kTuD3DFwA9eQf\u0026q=85\u0026s=c3fa72b6933ff4f9e41b3e3b739ab604 1650w, https://mintcdn.com/spur/ik0kTuD3DFwA9eQf/images/pr-agent/environment-and-deployment.png?w=2500\u0026fit=max\u0026auto=format\u0026n=ik0kTuD3DFwA9eQf\u0026q=85\u0026s=3ecf8cdf161cb55eed0a9567cf0126e2 2500w`})}),`\n`,_jsx(Heading,{level:`3`,id:`preview-for-each-pr`,children:`Preview for each PR`}),`\n`,_jsxs(_components.p,{children:[`For Vercel, click `,_jsx(_components.strong,{children:`Connect Vercel`}),`, authorize access, and select the project that deploys your app. With `,_jsx(_components.strong,{children:`PR preview · Latest commit`}),`, Spur tests the build of the PR’s latest commit.`]}),`\n`,_jsxs(_components.p,{children:[`Spur checks whether it can open protected previews. If Spur asks, create a Protection Bypass for Automation secret in Vercel, enter it under `,_jsx(_components.strong,{children:`Bypass secret`}),`, and click `,_jsx(_components.strong,{children:`Verify`}),`. If no preview exists yet, deploy one and click `,_jsx(_components.strong,{children:`Check again`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Without a Vercel connection, select `,_jsx(_components.strong,{children:`PR preview · From GitHub`}),`. Spur then uses supported preview links on the PR, including Shopify theme previews. If a PR has several storefronts, name the default one in `,_jsx(_components.strong,{children:`Testing instructions`}),`. You can also describe your per-PR URL pattern there.`]}),`\n`,_jsx(Heading,{level:`3`,id:`shared-qa-or-staging-site`,children:`Shared QA or staging site`}),`\n`,_jsx(_components.p,{children:`Wait for the change to deploy, then include the site URL in your request:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,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:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`@spur check the checkout changes on https://qa.example.com.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Use our usual test account and test payment details.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`A QA URL in your saved instructions does not select the site. Name the URL in the request, and confirm that the shared site has the change you want to test.`}),`\n`,_jsx(_components.p,{children:`If a connected Vercel environment deploys one branch, Spur can test its latest ready deployment. The report notes when that build may not include the PR. Pick test flows and accounts that are safe for the target, especially on a live site.`}),`\n`,_jsx(Heading,{level:`2`,id:`choose-when-spur-runs`,children:`Choose when Spur runs`}),`\n`,_jsxs(_components.p,{children:[`This setting controls when testing starts. In both modes, Spur chooses and runs the tests. With `,_jsx(_components.strong,{children:`Manual`}),`, someone comments `,_jsx(_components.code,{children:`@spur`}),` when they want the PR tested. With `,_jsx(_components.strong,{children:`Automatic`}),`, Spur starts when a PR opens or gets a selected label.`]}),`\n`,_jsxs(_components.p,{children:[`Set the first run and later commits separately. During setup, use `,_jsx(_components.strong,{children:`Run policy`}),`. After setup, use `,_jsx(_components.strong,{children:`When Spur runs`}),`.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Setting`}),_jsx(_components.th,{children:`Choices`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`First run`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Manual`}),`, or `,_jsx(_components.strong,{children:`Automatic`}),` for `,_jsx(_components.strong,{children:`Every new PR`}),` or `,_jsx(_components.strong,{children:`When a label is added`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Later commits`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Do nothing`}),`, `,_jsx(_components.strong,{children:`Rerun failed tests`}),`, or `,_jsx(_components.strong,{children:`Check the full PR again`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Change scope`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Any change`}),` or `,_jsx(_components.strong,{children:`Only the changes I describe`}),`.`]})]})]})]}),`\n`,_jsx(_components.p,{children:`For example, you can start the first run with a comment and let later commits start new runs automatically.`}),`\n`,_jsx(_components.p,{children:`Automatic first runs wait until a draft PR is ready for review. For label-based testing, later automatic runs need a selected label to stay on the PR.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Rerun failed tests`}),` retries the tests that did not pass in the latest completed run, including errors and unfinished tests. If every test passed, Spur skips the rerun. If no earlier run completed, Spur checks the full PR instead.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Check the full PR again`}),` looks at the updated change and picks the relevant tests again. It does not run every saved test in your Application. A change scope rule, such as “Run for changes to checkout or payments. Skip documentation-only changes.”, applies only to automatic runs. You can still request tests in a comment.`]}),`\n`,_jsx(Heading,{level:`2`,id:`add-testing-instructions-and-a-glossary`,children:`Add testing instructions and a glossary`}),`\n`,_jsx(_components.p,{children:`Testing instructions are optional. Spur already reads the code change, the PR description, and linked tickets. Use instructions for facts those sources leave out, such as your terms, test accounts, or required data. Your team then does not have to repeat them on every PR.`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Select the settings scope`,children:_jsxs(_components.p,{children:[`Under `,_jsx(_components.strong,{children:`Run settings`}),`, use `,_jsx(_components.strong,{children:`Settings for`}),` to select `,_jsx(_components.strong,{children:`Shared defaults`}),` or a repository. Click `,_jsx(_components.strong,{children:`Customize for this repository`}),` if it needs its own configuration.`]})}),_jsxs(Step,{title:`Describe your app and test setup`,children:[_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Edit`}),` beside `,_jsx(_components.strong,{children:`Testing instructions`}),`. Include your glossary, roles, important flows, test-data requirements, and the default preview or market if needed.`]}),_jsx(Frame,{caption:`Use shared instructions for the terminology and setup your team would otherwise repeat.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/spur/ik0kTuD3DFwA9eQf/images/pr-agent/testing-instructions.png?fit=max\u0026auto=format\u0026n=ik0kTuD3DFwA9eQf\u0026q=85\u0026s=bed41479387f0a24f1ad4cda8f0e7bc6`,alt:`Testing instructions editor with example terminology, account guidance, and test-data requirements`,style:{width:`100%`,maxWidth:`501px`,height:`auto`},\"data-og-width\":`1002`,width:`1002`,\"data-og-height\":`756`,height:`756`,\"data-path\":`images/pr-agent/testing-instructions.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/spur/ik0kTuD3DFwA9eQf/images/pr-agent/testing-instructions.png?w=280\u0026fit=max\u0026auto=format\u0026n=ik0kTuD3DFwA9eQf\u0026q=85\u0026s=1e8ba7d5eee1d71a6e6a1b6f88b66dea 280w, https://mintcdn.com/spur/ik0kTuD3DFwA9eQf/images/pr-agent/testing-instructions.png?w=560\u0026fit=max\u0026auto=format\u0026n=ik0kTuD3DFwA9eQf\u0026q=85\u0026s=70b037a68040ee54c35104a7c56e53c7 560w, https://mintcdn.com/spur/ik0kTuD3DFwA9eQf/images/pr-agent/testing-instructions.png?w=840\u0026fit=max\u0026auto=format\u0026n=ik0kTuD3DFwA9eQf\u0026q=85\u0026s=1bacb637b5c9d54e3bd67163e1fea0ba 840w, https://mintcdn.com/spur/ik0kTuD3DFwA9eQf/images/pr-agent/testing-instructions.png?w=1100\u0026fit=max\u0026auto=format\u0026n=ik0kTuD3DFwA9eQf\u0026q=85\u0026s=6a09debe2811a8a1341173b47136724b 1100w, https://mintcdn.com/spur/ik0kTuD3DFwA9eQf/images/pr-agent/testing-instructions.png?w=1650\u0026fit=max\u0026auto=format\u0026n=ik0kTuD3DFwA9eQf\u0026q=85\u0026s=a74bcf35ee419c2eaf60296a676faa07 1650w, https://mintcdn.com/spur/ik0kTuD3DFwA9eQf/images/pr-agent/testing-instructions.png?w=2500\u0026fit=max\u0026auto=format\u0026n=ik0kTuD3DFwA9eQf\u0026q=85\u0026s=6a8cd9c1dc530cb4e434ab403d43643e 2500w`})})]}),_jsx(Step,{title:`Insert credentials securely`,children:_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Insert variable`}),` to add an `,_jsx(_components.a,{href:`/authoring-tests/test-side-peek/step-types/variables/encrypted-variables`,children:`encrypted variable`}),` from the selected environment. To make a new one, click `,_jsx(_components.strong,{children:`Create encrypted variable`}),` in the picker. Keep passwords and tokens out of plain-text instructions and GitHub comments.`]})}),_jsx(Step,{title:`Save changes`,children:_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Save changes`}),`. `,_jsx(_components.strong,{children:`Done`}),` closes the editor but does not save the settings.`]})})]}),`\n`,_jsx(_components.p,{children:`For example, a storefront team might save:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,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:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`A basket is the shopping cart. A member is a signed-in customer.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Use the AU storefront preview unless the request names another market.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Prioritize guest checkout, discounts, and member sign-in.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Use the test account configured for this environment.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Use products labeled Demo and sandbox payment details at checkout.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Loyalty points are not enabled in preview builds.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Replace these lines with facts about your app, and insert the credential variables it needs. Update the instructions when your app changes. A PR comment can override them for one request without changing what you saved.`}),`\n`,_jsx(Heading,{level:`3`,id:`include-linked-tickets`,children:`Include linked tickets`}),`\n`,_jsx(_components.p,{children:`Link requirements in the PR description or in your request. Spur reads GitHub issues from the same repository. It also reads tickets from the Linear, Jira, Azure DevOps, and ClickUp integrations connected to your Application.`}),`\n`,_jsxs(_components.p,{children:[`To check these connections, click `,_jsx(_components.strong,{children:`Manage ticket sources`}),`. If Spur cannot open a ticket, describe the expected behavior in the PR or the request.`]}),`\n`,_jsx(Heading,{level:`2`,id:`change-repository-settings`,children:`Change repository settings`}),`\n`,_jsxs(_components.p,{children:[`Repositories use the `,_jsx(_components.strong,{children:`Shared defaults`}),` of their Application unless you customize them. Click `,_jsx(_components.strong,{children:`Customize for this repository`}),` to give a repository its own settings, or `,_jsx(_components.strong,{children:`Use shared defaults`}),` to undo that. Save your changes when you finish.`]}),`\n`,_jsxs(_components.p,{children:[`Disabling a repository stops new requests from starting tests. Tests that are already running continue. To stop them, comment `,_jsx(_components.code,{children:`@spur stop`}),` on the PR.`]}),`\n`,_jsx(Heading,{level:`2`,id:`try-it-on-a-real-pr`,children:`Try it on a real PR`}),`\n`,_jsxs(_components.p,{children:[`Pick a PR with a visible change and a ready deployment. Post a new comment that contains only `,_jsx(_components.code,{children:`@spur`}),`. Spur picks and runs the checks with your saved setup.`]}),`\n`,_jsxs(_components.p,{children:[`In the report, check the commit, the deployment, and the Spur environment. Then open a result to see the evidence. When this works, you can turn on automatic testing for later PRs. `,_jsx(_components.a,{href:`/running-tests/cicd/github-agent#add-guidance-when-you-need-it`,children:`Extra guidance`}),` is optional.`]}),`\n`,_jsx(Heading,{level:`2`,id:`recommended-practices`,children:`Recommended practices`}),`\n`,_jsx(_components.p,{children:`Start with a small PR, and review the first results with the engineer who made the change.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Recommend`}),_jsx(_components.th,{children:`Avoid`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Start with one or two repositories and a small, visible change. Confirm the setup with one `,_jsx(_components.code,{children:`@spur`}),` comment before you turn on automatic testing.`]}),_jsx(_components.td,{children:`Testing a large release PR first, or expecting browser tests for a change that users cannot see.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Confirm that the preview has the change and that the test account can sign in there. Check deployment protection first.`}),_jsx(_components.td,{children:`Assuming that a production login also works on a new preview.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Explain the intended behavior in the PR and link its requirements. Add your terminology, roles, and recurring setup to `,_jsx(_components.strong,{children:`Testing instructions`}),`.`]}),_jsx(_components.td,{children:`Relying on the diff alone to explain business rules, or repeating the same context in every comment.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Keep reusable login steps in saved login tests, with credentials in encrypted variables. Prepare the CMS content, products, and other test data that tests need.`}),_jsx(_components.td,{children:`Plain-text passwords, long copied login procedures, or a test that depends on data that does not exist.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Name the default storefront or market when a repository has several previews.`}),_jsx(_components.td,{children:`Leaving Spur to guess between similar previews.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Review the evidence and save useful tests. Turn on automatic testing after the first PRs give you useful results.`}),_jsx(_components.td,{children:`Treating a pass as proof that Spur checked every possible regression, or saving every test without review.`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`When you add guidance, describe the result you want and any context the PR lacks. Spur writes the browser steps. To edit saved steps yourself, see the `,_jsx(_components.a,{href:`/getting-started/web-prompting`,children:`Web Prompting Guide`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshoot-setup`,children:`Troubleshoot setup`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`What you see`}),_jsx(_components.th,{children:`What to check`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`No response`}),_jsxs(_components.td,{children:[`Post a new PR conversation comment with `,_jsx(_components.code,{children:`@spur`}),` outside quotes and code. Confirm that the Spur GitHub App can access the repository. Editing an old comment does not request new tests.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Setup or access message`}),_jsx(_components.td,{children:`Select the correct Application, confirm beta access, enable the repository, and save a web environment in PR Agent settings.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Missing or failed preview`}),_jsx(_components.td,{children:`Check the build, the connected project, or the preview link. For a shared QA site, put its URL in the request.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Login or preview protection failure`}),_jsx(_components.td,{children:`Test the login on that preview, and check its encrypted variables and Vercel access.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Wrong target`}),_jsx(_components.td,{children:`Name the preview and Spur environment you want in a new comment. Then correct the shared defaults if needed.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Unclear request`}),_jsxs(_components.td,{children:[`Add the missing behavior, target, or other detail in a new `,_jsx(_components.code,{children:`@spur`}),` comment.`]})]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{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":{"config":{},"pageMetadata":{"title":"Set Up the PR Agent","sidebarTitle":"Setup","icon":"gear","description":"Connect your repository, prepare a testable preview, and give Spur the context it needs to check your changes.","href":"/running-tests/cicd/github-agent-setup"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Before you start","slug":"before-you-start","depth":2,"children":[]},{"title":"Connect repositories","slug":"connect-repositories","depth":2,"children":[]},{"title":"Choose the environment and deployment","slug":"choose-the-environment-and-deployment","depth":2,"children":[{"title":"Preview for each PR","slug":"preview-for-each-pr","depth":3,"children":[]},{"title":"Shared QA or staging site","slug":"shared-qa-or-staging-site","depth":3,"children":[]}]},{"title":"Choose when Spur runs","slug":"choose-when-spur-runs","depth":2,"children":[]},{"title":"Add testing instructions and a glossary","slug":"add-testing-instructions-and-a-glossary","depth":2,"children":[{"title":"Include linked tickets","slug":"include-linked-tickets","depth":3,"children":[]}]},{"title":"Change repository settings","slug":"change-repository-settings","depth":2,"children":[]},{"title":"Try it on a real PR","slug":"try-it-on-a-real-pr","depth":2,"children":[]},{"title":"Recommended practices","slug":"recommended-practices","depth":2,"children":[]},{"title":"Troubleshoot setup","slug":"troubleshoot-setup","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"spur","siteName":"Spur Documentation","title":"Set Up the PR Agent - Spur Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-28T22:44:20.830Z","originalFileLocation":"running-tests/cicd/github-agent-setup.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";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=\"light\"}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=\"Connect your repository, prepare a testable preview, and give Spur the context it needs to check your changes.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Spur Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/spur/1VX6A2Hde8UwyT8H/_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/spur/1VX6A2Hde8UwyT8H/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/spur/1VX6A2Hde8UwyT8H/_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/spur/1VX6A2Hde8UwyT8H/_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/spur/1VX6A2Hde8UwyT8H/_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/spur/1VX6A2Hde8UwyT8H/_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/spur/1VX6A2Hde8UwyT8H/_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/spur/1VX6A2Hde8UwyT8H/_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/spur/1VX6A2Hde8UwyT8H/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Set Up the PR Agent - Spur Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Connect your repository, prepare a testable preview, and give Spur the context it needs to check your changes.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Spur Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.spurtest.com/running-tests/cicd/github-agent-setup\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://spur.mintlify.app/_mintlify/api/og/v2?division=PR+Agent\u0026amp;title=Set+Up+the+PR+Agent\u0026amp;description=Connect+your+repository%2C+prepare+a+testable+preview%2C+and+give+Spur+the+context+it+needs+to+check+your+changes.\u0026amp;theme=89a811cb4f810fbd039718cf\u0026amp;signature=260b2581052f0e34c2e4896a62aab72f5d40164489e817d7bbd1e2abc6d63428\">\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=\"Set Up the PR Agent - Spur Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Connect your repository, prepare a testable preview, and give Spur the context it needs to check your changes.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://spur.mintlify.app/_mintlify/api/og/v2?division=PR+Agent\u0026amp;title=Set+Up+the+PR+Agent\u0026amp;description=Connect+your+repository%2C+prepare+a+testable+preview%2C+and+give+Spur+the+context+it+needs+to+check+your+changes.\u0026amp;theme=89a811cb4f810fbd039718cf\u0026amp;signature=260b2581052f0e34c2e4896a62aab72f5d40164489e817d7bbd1e2abc6d63428\">\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/spur/1VX6A2Hde8UwyT8H/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Spur Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4968ec\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.spurtest.com/running-tests/cicd/github-agent-setup\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/running-tests/cicd/github-agent-setup.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.spurtest.com/#organization\",\"name\":\"Spur Documentation\",\"url\":\"https://docs.spurtest.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/spur/cytvGy0qHI_KqMmI/logo/logo.png?fit=max\u0026auto=format\u0026n=cytvGy0qHI_KqMmI\u0026q=85\u0026s=f931455ec7ab89b4f23bea661c49b9a0\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.spurtest.com#website\",\"name\":\"Spur Documentation\",\"url\":\"https://docs.spurtest.com\",\"publisher\":{\"@id\":\"https://docs.spurtest.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.spurtest.com/running-tests/cicd/github-agent-setup#webpage\",\"url\":\"https://docs.spurtest.com/running-tests/cicd/github-agent-setup\",\"name\":\"Set Up the PR Agent\",\"description\":\"Connect your repository, prepare a testable preview, and give Spur the context it needs to check your changes.\",\"dateModified\":\"2026-10-28T22:44:20.830Z\",\"isPartOf\":{\"@id\":\"https://docs.spurtest.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.spurtest.com/running-tests/cicd/github-agent-setup#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.spurtest.com/running-tests/cicd/github-agent-setup#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Running Tests\",\"item\":\"https://docs.spurtest.com/running-tests/run-modal/run-modal\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CI/CD\",\"item\":\"https://docs.spurtest.com/running-tests/CICD\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"PR Agent\",\"item\":\"https://docs.spurtest.com/running-tests/cicd/github-agent\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Set Up the PR Agent\",\"item\":\"https://docs.spurtest.com/running-tests/cicd/github-agent-setup\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.spurtest.com/running-tests/cicd/github-agent-setup#article\",\"headline\":\"Set Up the PR Agent\",\"name\":\"Set Up the PR Agent\",\"description\":\"Connect your repository, prepare a testable preview, and give Spur the context it needs to check your changes.\",\"url\":\"https://docs.spurtest.com/running-tests/cicd/github-agent-setup\",\"mainEntityOfPage\":{\"@id\":\"https://docs.spurtest.com/running-tests/cicd/github-agent-setup#webpage\"},\"dateModified\":\"2026-10-28T22:44:20.830Z\",\"publisher\":{\"@id\":\"https://docs.spurtest.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.spurtest.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Spur Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Spur Documentation","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"group":"Getting Started","pages":[{"title":"Welcome to Spur!","icon":"rocket","iconType":"solid","href":"/getting-started/introduction"},{"title":"Write your first test","icon":"pencil","iconType":"solid","href":"/getting-started/first-test"},{"title":"Web Prompting Guide","icon":"browser","iconType":"solid","href":"/getting-started/web-prompting"},{"title":"Mobile Prompting Guide","icon":"mobile-screen-button","iconType":"solid","href":"/getting-started/mobile-prompting"},{"group":"Prompt Library","icon":"book","pages":[{"title":"Overview of Prompt Library","icon":"book","iconType":"solid","href":"/getting-started/prompt-library"},{"title":"High-Level Instructions","icon":"arrow-up-wide-short","iconType":"solid","href":"/getting-started/prompt-library/high-level-instructions"},{"title":"Persona Based Tests","icon":"user","iconType":"solid","href":"/getting-started/prompt-library/persona-based-tests"},{"title":"Exploratory Tests","icon":"compass","iconType":"solid","href":"/getting-started/prompt-library/exploratory-tests"},{"title":"Other Useful Prompts","icon":"lightbulb","iconType":"solid","href":"/getting-started/prompt-library/other-useful-prompts"}]},{"title":"Common Pitfalls When Writing Tests in Spur","sidebarTitle":"Common Pitfalls","icon":"file-slash","iconType":"solid","href":"/getting-started/common-pitfalls"},{"title":"Frequently Asked Questions","sidebarTitle":"FAQs","icon":"comment","iconType":"solid","href":"/getting-started/FAQ"}]},{"group":"Authoring Tests","pages":[{"group":"Test Side Peek","icon":"notes-medical","pages":[{"title":"Video to Test Generation","icon":"video","iconType":"solid","href":"/authoring-tests/test-side-peek/video-to-test"},{"title":"Script to Test Generation","icon":"scroll","iconType":"solid","href":"/authoring-tests/test-side-peek/script-to-test"},{"title":"Viewports \u0026 device settings","icon":"camera-viewfinder","href":"/authoring-tests/test-side-peek/viewports"},{"group":"Step Types","icon":"stairs","pages":[{"title":"Verification","icon":"check-double","iconType":"solid","href":"/authoring-tests/test-side-peek/step-types/verify"},{"title":"Full Page Analysis","icon":"file-magnifying-glass","iconType":"solid","href":"/authoring-tests/test-side-peek/step-types/full-page-analysis"},{"group":"Browser","icon":"browser","pages":[{"title":"Open New Tab","icon":"arrow-up-right-from-square","href":"/authoring-tests/test-side-peek/step-types/browser/open-new-tab"},{"title":"Redirect","icon":"link","href":"/authoring-tests/test-side-peek/step-types/browser/redirect"},{"title":"Refresh","icon":"arrow-rotate-right","href":"/authoring-tests/test-side-peek/step-types/browser/refresh"},{"title":"Go Back","icon":"arrow-left","href":"/authoring-tests/test-side-peek/step-types/browser/go-back"},{"title":"Close the Current Tab","icon":"xmark","href":"/authoring-tests/test-side-peek/step-types/browser/close-tab"}]},{"title":"Email","icon":"envelope","iconType":"solid","href":"/authoring-tests/test-side-peek/step-types/email/email-inbox"},{"title":"Extractions","icon":"magnet","iconType":"solid","href":"/authoring-tests/test-side-peek/step-types/extract"},{"title":"Javascript","icon":"code","href":"/authoring-tests/test-side-peek/step-types/javascript"},{"title":"Make an API Call","icon":"right-left","href":"/authoring-tests/test-side-peek/step-types/api-call"},{"title":"Log Step","icon":"scroll","iconType":"solid","href":"/authoring-tests/test-side-peek/step-types/log/log-assertions"},{"group":"Supported Actions","icon":"object-subtract","pages":[{"title":"Overview of Supported Actions","icon":"hand-pointer","iconType":"solid","href":"/authoring-tests/test-side-peek/step-types/actions/actions-overview"},{"title":"Click","icon":"arrow-pointer","iconType":"solid","href":"/authoring-tests/test-side-peek/step-types/actions/click"},{"title":"Hover","icon":"computer-mouse","iconType":"solid","href":"/authoring-tests/test-side-peek/step-types/actions/hover"},{"title":"Scroll","icon":"arrows-up-down","iconType":"solid","href":"/authoring-tests/test-side-peek/step-types/actions/scroll"},{"title":"Select","icon":"square-check","iconType":"solid","href":"/authoring-tests/test-side-peek/step-types/actions/select"},{"title":"Wait","icon":"hourglass-half","iconType":"solid","href":"/authoring-tests/test-side-peek/step-types/actions/wait"},{"title":"Type","icon":"keyboard","iconType":"solid","href":"/authoring-tests/test-side-peek/step-types/actions/type"}]},{"group":"Mobile Actions","icon":"mobile-screen","pages":[{"title":"Advanced Mobile Prompting","icon":"mobile-screen","href":"/authoring-tests/test-side-peek/step-types/mobile/overview"},{"title":"Activate App","icon":"window-restore","href":"/authoring-tests/test-side-peek/step-types/mobile/activate-app"},{"title":"Restart App","icon":"arrow-rotate-right","href":"/authoring-tests/test-side-peek/step-types/mobile/restart-app"},{"title":"Shake Device","icon":"mobile-screen-button","href":"/authoring-tests/test-side-peek/step-types/mobile/shake-device"},{"title":"Flip Device","icon":"rotate","href":"/authoring-tests/test-side-peek/step-types/mobile/flip"},{"title":"Expect Toast / Expect No Toast","icon":"bell","href":"/authoring-tests/test-side-peek/step-types/mobile/expect-toast"}]},{"group":"Variables","icon":"brackets-curly","pages":[{"title":"Encrypted Variables","icon":"lock","iconType":"solid","href":"/authoring-tests/test-side-peek/step-types/variables/encrypted-variables"},{"title":"Random String Generation","icon":"shuffle","iconType":"solid","href":"/authoring-tests/test-side-peek/step-types/variables/random-string-gen"}]}]},{"icon":"gear","title":"Advanced Configurations","href":"/authoring-tests/test-side-peek/advanced-configurations"},{"title":"Login States","icon":"user-check","iconType":"solid","href":"/authoring-tests/test-side-peek/login-states"},{"title":"Upload Files","icon":"upload","href":"/authoring-tests/test-side-peek/upload-files"}]},{"title":"AI Test Generation","icon":"gallery-thumbnails","href":"/authoring-tests/ai-test-generation"},{"title":"Mobile Streaming","icon":"circle-play","iconType":"solid","href":"/authoring-tests/mobile-streaming"},{"title":"Preview Editor","icon":"eye","href":"/authoring-tests/preview-editor"},{"title":"Dependencies","icon":"arrows-turn-to-dots","iconType":"solid","href":"/authoring-tests/dependencies"},{"group":"Scenarios","icon":"table","pages":[{"title":"Scenario Tables","icon":"table","href":"/authoring-tests/scenarios/scenario-tables"},{"title":"Reference scenario table properties in test steps","icon":"table","href":"/authoring-tests/scenarios/scenarios"}]},{"group":"Environments","icon":"globe","pages":[{"icon":"globe","iconType":"solid","title":"Overview of Environments","href":"/authoring-tests/environments/environments"},{"icon":"key-skeleton-left-right","title":"Properties","href":"/authoring-tests/environments/properties"},{"title":"Web Link vs Domain","icon":"link-simple","href":"/documentation/authoring-tests/environments/web-link-vs-domain"}]},{"title":"Caching Tests","icon":"floppy-disk","iconType":"solid","href":"/authoring-tests/caching-tests"}]},{"group":"Managing Tests","pages":[{"title":"Managing Overview","icon":"sitemap","iconType":"solid","href":"/managing-tests/overview"},{"title":"Test suites: group and run related tests together","icon":"layer-group","iconType":"solid","href":"/managing-tests/suite"},{"title":"Folders","icon":"folder","href":"/managing-tests/folders"},{"group":"Test Plans","icon":"list-check","pages":[{"icon":"book-open-cover","iconType":"solid","title":"Test plans: coordinate multi-suite runs","href":"/managing-tests/test-plans/test-plans"},{"title":"Create Test Plan","icon":"plus","href":"/documentation/managing-tests/test-plans/create-test-plan"}]},{"title":"Drafts","icon":"page","href":"/managing-tests/drafts"},{"title":"Snooze Tests","icon":"clock","href":"/managing-tests/snooze-tests"}]},{"group":"Running Tests","pages":[{"title":"Manual Runs","icon":"circle-play","iconType":"solid","href":"/running-tests/run-modal/run-modal"},{"title":"Run test plans on demand or on a schedule","icon":"list-check","iconType":"solid","href":"/running-tests/test-plans"},{"group":"CI/CD","icon":"infinity","pages":[{"title":"CI/CD","icon":"infinity","iconType":"solid","href":"/running-tests/CICD"},{"title":"GitHub","icon":"github","iconType":"brands","href":"/running-tests/cicd/github"},{"group":"PR Agent","icon":"robot","pages":[{"title":"PR Agent","sidebarTitle":"Overview","icon":"robot","description":"Test your pull request with real browser checks and review the evidence before you merge.","href":"/running-tests/cicd/github-agent"},{"title":"Set Up the PR Agent","sidebarTitle":"Setup","icon":"gear","href":"/running-tests/cicd/github-agent-setup"},{"title":"Review and Save PR Agent Tests","sidebarTitle":"Results","icon":"bookmark","description":"Inspect PR Agent results and browser evidence, then save generated tests to a suite in your Test Library.","href":"/running-tests/cicd/github-agent-results"}]},{"title":"GitLab","icon":"gitlab","iconType":"brands","href":"/running-tests/cicd/gitlab"},{"title":"Override URLs","icon":"arrow-right-arrow-left","iconType":"solid","href":"/running-tests/cicd/override-urls"}]},{"title":"Scheduled Tests","icon":"calendar-plus","iconType":"solid","href":"/running-tests/scheduler"},{"title":"Snoozing Tests","icon":"moon","iconType":"solid","href":"/running-tests/snoozing-tests/snooze-tests"}]},{"group":"Analyzing Tests","pages":[{"title":"Analysis Overview","icon":"magnifying-glass-chart","iconType":"solid","href":"/analysing-tests/analysis-overview"},{"group":"Spur MCP","icon":"/images/MCP/mcp_icon.svg","pages":[{"title":"Spur MCP Integration","icon":"https://mintlify.s3.us-west-1.amazonaws.com/spur/images/MCP/mcp_icon.svg","href":"/analysing-tests/mcp/spur-mcp"},{"title":"MCP Setup","icon":"wrench","href":"/analysing-tests/mcp/spur-mcp-setup"},{"title":"Discover and Run Tests","icon":"magnifying-glass","href":"/analysing-tests/mcp/spur-mcp-discover-tests"},{"title":"Fix Raised Bugs","icon":"bug","href":"/analysing-tests/mcp/spur-mcp-fix-bugs"},{"title":"Connecting with Other MCP Tools","icon":"plug","href":"/analysing-tests/mcp/spur-mcp-connecting-other-mcps"},{"title":"In-Sprint Test Generation","icon":"code","href":"/analysing-tests/mcp/spur-mcp-in-sprint-testing"},{"title":"Triaging Test Plan Failures with MCP","icon":"list-check","href":"/analysing-tests/mcp/spur-mcp-test-plans"}]},{"title":"Spur AI","icon":"sparkles","href":"/analysing-tests/spur-ai-chat"},{"title":"Using Spur AI Effectively","sidebarTitle":"Best Practices","icon":"message-bot","href":"/analysing-tests/spur-ai-chat-best-practices"},{"title":"Shareable Links","icon":"link","iconType":"solid","href":"/analysing-tests/shareable-links"},{"group":"Integrations","icon":"plug","pages":[{"title":"Integrations Overview","icon":"webhook","href":"/analysing-tests/integrations/integrations"},{"title":"Jira Tickets","icon":"jira","iconType":"solid","href":"/analysing-tests/integrations/jira"},{"title":"Linear Tickets","icon":"https://mintlify.s3.us-west-1.amazonaws.com/spur/images/Integrations/Linear/linear-logo.svg","href":"/analysing-tests/integrations/linear"},{"title":"Azure DevOps Work Items","icon":"https://mintlify.s3.us-west-1.amazonaws.com/spur/images/Integrations/AzureDevOps/azure-devops-logo.svg","href":"/analysing-tests/integrations/azure-devops"},{"title":"Slack Alerts","icon":"slack","iconType":"solid","href":"/analysing-tests/integrations/slack"},{"title":"Email Alerts","icon":"envelope","iconType":"solid","href":"/analysing-tests/integrations/email"},{"title":"GitHub Integration","icon":"github","iconType":"brands","href":"/analysing-tests/integrations/github"},{"title":"GitLab Integration","icon":"gitlab","iconType":"brands","href":"/analysing-tests/integrations/gitlab"}]},{"title":"Test plan review","icon":"scroll","href":"/analysing-tests/test-plan-review"},{"title":"Test Overview Page","icon":"gauge","iconType":"solid","href":"/analysing-tests/test-overview-page"},{"title":"Warning Suppression","icon":"bell-slash","iconType":"solid","href":"/analysing-tests/warning-suppression"}]},{"group":"Additional Resources","pages":[{"title":"Spur for Data Science Teams","icon":"chart-line","href":"/additional-resources/spur-for-data-science-teams"},{"title":"Network \u0026 Console Monitoring","icon":"tower-broadcast","iconType":"solid","href":"/additional-resources/network-console-monitoring"},{"title":"IP Whitelisting","icon":"shield-check","iconType":"solid","href":"/additional-resources/ip-whitelisting"},{"title":"User Roles","icon":"user-shield","iconType":"solid","href":"/additional-resources/user-roles"},{"title":"Deep Links","icon":"link","iconType":"solid","href":"/additional-resources/deep-links"},{"group":"In-Sprint Test Generation","icon":"code","pages":[{"title":"In-Sprint Test Generation","icon":"code","href":"/analysing-tests/mcp/spur-mcp-in-sprint-testing"},{"group":"PR Agent","icon":"robot","pages":[{"title":"PR Agent","sidebarTitle":"Overview","icon":"robot","href":"/running-tests/cicd/github-agent"}]}]},{"group":"SSO Providers","icon":"key","pages":[{"title":"Google SSO","href":"/additional-resources/sso-providers/google-sso"},{"title":"Azure SSO","href":"/additional-resources/sso-providers/azure-sso"}]},{"title":"Contact Us","icon":"headset","iconType":"solid","href":"/additional-resources/contact-us"}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog/introduction"}]},{"tab":"Press","href":"https://www.ycombinator.com/launches/LeX-spur-your-ai-qa-engineerr"},{"tab":"Community","href":"https://www.linkedin.com/company/spur-test/"}]},"title":"Set Up the PR Agent - Spur Documentation","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-DYplxqhs.js","DynamicMarkdown-Cc6AuSHS.js","zoom-image-lightbox-BNnMwe0F.js","lightbox-handle-r17bVUz3.js"]}