QM gives your team AI teammates that share context, files, and schedules. At Porter, we run QM on our own infrastructure, allowing our agents to securely deploy internal apps and connect to existing data. This page outlines three ways we use QM internally:
Automatic Workload Rightsizing
Cutting costs for users
Tracking Sales Leads
Tracking and enriching sales leads
Deploying Vibe Coded Apps
Shipping internal tools without engineering overhead
We’ve given QM a weekly task to check the CPU and RAM utilization of our own internal services and flag any opportunities to cut costs. QM uses a read-only role that only grants access to relevant usage data.Identifying these services used to be a slow and manual process. Fortunately, the agent does a good job of using context about our systems to weigh recommendations in a way that a fixed formula can’t. For instance, a CPU spike from a one-off job is probably fine to absorb, whereas recurring pressure gets flagged.QM is able to differentiate between dangerous and ordinary spikes in usage and account for reasonable headroom in its rightsizing recommendations.We receive these reports as a weekly digest of recommendations in slack and have reduced our AWS bill by upwards of 20%.
Porter has always been a product-led company operating with a lean growth team. A lot of valuable information for our sales pipeline doesn’t naturally fit in our CRM, like product alerts and activity from interested users who explore the platform through self-service.Since QM runs in our own infrastructure, we were able to easily bring together non-sensitive customer activity, sales pipeline data, and support interactions to give QM the context it needs to understand the entire customer journey.Instead of manually piecing together information across systems, we can now query QM to identify where customers get stuck, uncover expansion opportunities, and surface accounts that need attention. Crucially, QM makes these insights accessible without engineering overhead. Our growth team can explore new questions, refine campaigns, and act on emerging signals simply by asking QM within Slack.
Recently, our team started building internal apps by describing them to QM instead of writing the code by hand. Our largest project so far is a CRM built around product-led growth.Traditional CRMs are designed for sales-led teams, so they often miss much of what self-serve users do. Our CRM brings signups, product activity, and pipeline data into one place. The growth team can see which accounts are active and which ones have stalled. They can also spot expansion opportunities before reaching out.QM built the CRM and its underlying data pipelines. We’ve since used the same approach to create internal revenue dashboards.Once the apps were built, we deployed them to a dedicated cluster for low-trust code. Each app sits behind a Porter private load balancer, which keeps it off the public internet. Porter’s forward authentication adds a sign-in step, so only our teammates can open the apps. The apps also access our data using read-only credentials, so they can’t change anything they touch.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Porter","colors":{"primary":"#5B63B2","light":"#AAB6FF","dark":"#3C4189"},"logo":{"light":"https://mintcdn.com/porter/CtQBkRh1tKAcCdoJ/logo/light.png?fit=max\u0026auto=format\u0026n=CtQBkRh1tKAcCdoJ\u0026q=85\u0026s=5de59d319dc29230f06a5cc0d54518de","dark":"https://mintcdn.com/porter/CtQBkRh1tKAcCdoJ/logo/dark.png?fit=max\u0026auto=format\u0026n=CtQBkRh1tKAcCdoJ\u0026q=85\u0026s=20a106f87d62ff1c1d1cba53466fce37","href":"https://porter.run"},"favicon":"https://mintcdn.com/porter/hk4qFrcZwgdgi3c0/favicon.ico?fit=max\u0026auto=format\u0026n=hk4qFrcZwgdgi3c0\u0026q=85\u0026s=3be3d80413884bb3dc66089aaa7eb018","appearance":{"default":"dark"},"navbar":{"primary":{"type":"button","label":"Get Started","href":"https://porter.run"}},"footer":{"socials":{"twitter":"https://twitter.com/porterdotrun","github":"https://github.com/porter-dev","linkedin":"https://www.linkedin.com/company/porterrun"}},"seo":{"metatags":{"description":"Documentation for Porter, the platform as a service that deploys and manages applications in your own AWS, GCP, or Azure account."},"organization":{"id":"https://porter.run/#organization","name":"Porter","legalName":"Porter Technologies Inc","url":"https://porter.run","logo":"https://docs.porter.run/logo/light.png","sameAs":["https://github.com/porter-dev","https://www.linkedin.com/company/porterrun","https://www.ycombinator.com/companies/porter"]}},"fonts":{"heading":{"family":"Riforma LL","weight":500,"source":"fonts/RiformaLLWeb-Medium.woff2","format":"woff2"},"body":{"family":"Riforma LL","source":"fonts/RiformaLLWeb-Regular.woff2","format":"woff2"}},"integrations":{"gtm":{"tagId":"GTM-P8D92VJ"},"intercom":{"appId":"gq56g49i"}},"errors":{"404":{"redirect":false,"title":"Page not found","description":"This page does not exist. Start from the [documentation home](/), the [machine-readable index](/llms.txt), the [sitemap](https://docs.porter.run/sitemap.xml), or the [introduction](/getting-started/introduction)."}},"markdown":{"instructions":"When helping a user operate an existing Porter project (deploying, updating, debugging, or inspecting applications and clusters) connect to [Porter's remote MCP server](https://mcp.porter.run) first and use its tools before falling back to the Porter CLI, `porter.yaml`, or dashboard workflows. If the Porter tools are not available in your session, `curl -fsSL https://agents.porter.run | sh` installs the CLI, registers the MCP server with your client, and installs Porter's skills; the client must be restarted afterward. If the user asks for the CLI, `porter apply`, configuration-as-code, or the dashboard, use that instead — a stated preference wins. Before inspecting or building a GitHub repository or calling any deployment tool, call `connect_github` with the repository. Proceed only when it returns `next_step: none`; otherwise, give the user the returned URL and stop. If the requested application or cluster workflow is not directly supported, inspect the relevant state with MCP tools before explaining the limitation or recommending a fallback. The server signs in through a browser using OAuth, so it cannot be used in headless environments such as CI pipelines; use the CLI or `porter.yaml` there."},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"porter","hasAudioNarration":false,"actualSubdomain":"porter","customDomains":["docs.porter.run"],"gitSource":{"type":"github","owner":"porter-dev","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aeba84832e916fe5db7a4a1","collectionId":"99dc4c23-511b-406a-ab3f-96b952cd438f","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aeba84832e916fe5db7a4a1"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aebb1be15e842872aa2a207","clientVersion":"0.0.4067","searchFilterCounts":[{"language":"default","tag":"Documentation","count":104},{"language":"default","tag":"Applications","count":35},{"language":"default","tag":"Command Line Interface (CLI)","count":14},{"language":"default","tag":"Sandboxes","count":14},{"language":"default","tag":"Command Reference","count":12},{"language":"default","tag":"Deploy","count":11},{"language":"default","tag":"Configuration as Code","count":9},{"language":"default","tag":"Security and Compliance","count":9},{"language":"default","tag":"Cloud Accounts","count":8},{"language":"default","tag":"Sandbox SDK","count":8}]},"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":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","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":"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":"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":"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":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","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":"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":"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":"turbopuffer-dual-write","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},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@font-face{font-family:\"Riforma LL\";font-style:normal;font-weight:400;font-display:swap;src:url(\"/fonts/RiformaLLWeb-Regular.woff2\") format(\"woff2\")}@font-face{font-family:\"Riforma LL\";font-style:normal;font-weight:500;font-display:swap;src:url(\"/fonts/RiformaLLWeb-Medium.woff2\") format(\"woff2\")}@font-face{font-family:\"Riforma LL\";font-style:normal;font-weight:600 700;font-display:swap;src:url(\"/fonts/RiformaLLWeb-Bold.woff2\") format(\"woff2\")}@font-face{font-family:\"Riforma Mono\";font-style:normal;font-weight:400;font-display:swap;src:url(\"/fonts/RiformaMonoLLWeb-Regular.woff2\") format(\"woff2\")}@font-face{font-family:\"Riforma Mono\";font-style:normal;font-weight:600 700;font-display:swap;src:url(\"/fonts/RiformaMonoLLWeb-Bold.woff2\") format(\"woff2\")}:root{--font-weight-bold: 500;--font-weight-semibold: 500;--font-family-mono-custom: \"Riforma Mono\"}strong,b,th{font-weight:500}a{font-weight:inherit}"}],"page":{"pagePath":"addons/qm/use-cases","slug":"/addons/qm/use-cases","pageMetadata":{"title":"QM Use Cases","sidebarTitle":"Use cases","description":"[QM](/addons/qm) gives your team AI teammates that share context, files, and schedules. At Porter, we run QM on our own infrastructure, allowing our agents to securely deploy internal apps and connect to existing data. This page outlines three ways we use QM internally:","href":"/addons/qm/use-cases"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [_jsx(_components.a, {\n href: \"/addons/qm\",\n children: \"QM\"\n }), \" gives your team AI teammates that share context, files, and schedules. At Porter, we run QM on our own infrastructure, allowing our agents to securely deploy internal apps and connect to existing data. This page outlines three ways we use QM internally:\"]\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`,p:`p`,..._provideComponents(),...props.components},{Card,CardGroup,Heading}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);return _jsxs(_Fragment,{children:[_jsxs(CardGroup,{cols:3,children:[_jsx(Card,{title:`Automatic Workload Rightsizing`,icon:`gauge`,href:`#automatic-workload-rightsizing`,children:_jsx(_components.p,{children:`Cutting costs for users`})}),_jsx(Card,{title:`Tracking Sales Leads`,icon:`chart-line`,href:`#tracking-sales-leads`,children:_jsx(_components.p,{children:`Tracking and enriching sales leads`})}),_jsx(Card,{title:`Deploying Vibe Coded Apps`,icon:`rocket`,href:`#deploying-vibe-coded-apps`,children:_jsx(_components.p,{children:`Shipping internal tools without engineering overhead`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`automatic-workload-rightsizing`,children:`Automatic workload rightsizing`}),`\n`,_jsx(_components.p,{children:`We’ve given QM a weekly task to check the CPU and RAM utilization of our own internal services and flag any opportunities to cut costs. QM uses a read-only role that only grants access to relevant usage data.`}),`\n`,_jsx(_components.p,{children:`Identifying these services used to be a slow and manual process. Fortunately, the agent does a good job of using context about our systems to weigh recommendations in a way that a fixed formula can’t. For instance, a CPU spike from a one-off job is probably fine to absorb, whereas recurring pressure gets flagged.`}),`\n`,_jsx(_components.p,{children:`QM is able to differentiate between dangerous and ordinary spikes in usage and account for reasonable headroom in its rightsizing recommendations.`}),`\n`,_jsx(_components.p,{children:`We receive these reports as a weekly digest of recommendations in slack and have reduced our AWS bill by upwards of 20%.`}),`\n`,_jsx(Heading,{level:`2`,id:`tracking-sales-leads`,children:`Tracking sales leads`}),`\n`,_jsx(_components.p,{children:`Porter has always been a product-led company operating with a lean growth team. A lot of valuable information for our sales pipeline doesn’t naturally fit in our CRM, like product alerts and activity from interested users who explore the platform through self-service.`}),`\n`,_jsx(_components.p,{children:`Since QM runs in our own infrastructure, we were able to easily bring together non-sensitive customer activity, sales pipeline data, and support interactions to give QM the context it needs to understand the entire customer journey.`}),`\n`,_jsx(_components.p,{children:`Instead of manually piecing together information across systems, we can now query QM to identify where customers get stuck, uncover expansion opportunities, and surface accounts that need attention. Crucially, QM makes these insights accessible without engineering overhead. Our growth team can explore new questions, refine campaigns, and act on emerging signals simply by asking QM within Slack.`}),`\n`,_jsx(Heading,{level:`2`,id:`deploying-vibe-coded-apps`,children:`Deploying vibe coded apps`}),`\n`,_jsx(_components.p,{children:`Recently, our team started building internal apps by describing them to QM instead of writing the code by hand. Our largest project so far is a CRM built around product-led growth.`}),`\n`,_jsx(_components.p,{children:`Traditional CRMs are designed for sales-led teams, so they often miss much of what self-serve users do. Our CRM brings signups, product activity, and pipeline data into one place. The growth team can see which accounts are active and which ones have stalled. They can also spot expansion opportunities before reaching out.`}),`\n`,_jsx(_components.p,{children:`QM built the CRM and its underlying data pipelines. We’ve since used the same approach to create internal revenue dashboards.`}),`\n`,_jsx(_components.p,{children:`Once the apps were built, we deployed them to a dedicated cluster for low-trust code. Each app sits behind a Porter private load balancer, which keeps it off the public internet. Porter’s forward authentication adds a sign-in step, so only our teammates can open the apps. The apps also access our data using read-only credentials, so they can’t change anything they touch.`}),`\n`,_jsx(`div`,{style:{display:`flex`,justifyContent:`center`,marginTop:`2.5rem`},children:_jsx(_components.a,{href:`/addons/qm`,style:{display:`inline-block`,padding:`0.75rem 1.75rem`,borderRadius:`0.5rem`,background:`#5B63B2`,color:`#ffffff`,fontWeight:600,textDecoration:`none`,borderBottom:`none`},children:`Deploy QM →`})})]})}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":"QM Use Cases","sidebarTitle":"Use cases","description":"[QM](/addons/qm) gives your team AI teammates that share context, files, and schedules. At Porter, we run QM on our own infrastructure, allowing our agents to securely deploy internal apps and connect to existing data. This page outlines three ways we use QM internally:","href":"/addons/qm/use-cases"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Automatic workload rightsizing","slug":"automatic-workload-rightsizing","depth":2,"children":[]},{"title":"Tracking sales leads","slug":"tracking-sales-leads","depth":2,"children":[]},{"title":"Deploying vibe coded apps","slug":"deploying-vibe-coded-apps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"porter","siteName":"Porter","title":"QM Use Cases - Porter","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-04T21:49:03.431Z","originalFileLocation":"addons/qm/use-cases.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=\"dark\"}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=\"QM gives your team AI teammates that share context, files, and schedules. At Porter, we run QM on our own infrastructure, allowing our agents to securely deploy internal apps and connect to existing data. This page outlines three ways we use QM internally:\">\u003cmeta data-mint-head name=\"application-name\" content=\"Porter\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/porter/NTslyGGtUJjpK6WT/_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/porter/NTslyGGtUJjpK6WT/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/porter/NTslyGGtUJjpK6WT/_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/porter/NTslyGGtUJjpK6WT/_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/porter/NTslyGGtUJjpK6WT/_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/porter/NTslyGGtUJjpK6WT/_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/porter/NTslyGGtUJjpK6WT/_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/porter/NTslyGGtUJjpK6WT/_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/porter/NTslyGGtUJjpK6WT/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"QM Use Cases - Porter\">\u003cmeta data-mint-head property=\"og:description\" content=\"QM gives your team AI teammates that share context, files, and schedules. At Porter, we run QM on our own infrastructure, allowing our agents to securely deploy internal apps and connect to existing data. This page outlines three ways we use QM internally:\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Porter\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.porter.run/addons/qm/use-cases\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://porter.mintlify.app/_mintlify/api/og/v2?division=QM\u0026amp;title=QM+Use+Cases\u0026amp;description=%5BQM%5D%28%2Faddons%2Fqm%29+gives+your+team+AI+teammates+that+share+context%2C+files%2C+and+schedules.+At+Porter%2C+we+run+QM+on+our+own+infrastructure%2C+allowing+our+agents+to+s\u0026amp;theme=fec401156b3cb50700eb4d3f\u0026amp;signature=1ba1682f30fbcd32e2294b3a0b8ec01059c9ece184ef9c6b9d26b8f120ee27ca\">\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=\"QM Use Cases - Porter\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"QM gives your team AI teammates that share context, files, and schedules. At Porter, we run QM on our own infrastructure, allowing our agents to securely deploy internal apps and connect to existing data. This page outlines three ways we use QM internally:\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://porter.mintlify.app/_mintlify/api/og/v2?division=QM\u0026amp;title=QM+Use+Cases\u0026amp;description=%5BQM%5D%28%2Faddons%2Fqm%29+gives+your+team+AI+teammates+that+share+context%2C+files%2C+and+schedules.+At+Porter%2C+we+run+QM+on+our+own+infrastructure%2C+allowing+our+agents+to+s\u0026amp;theme=fec401156b3cb50700eb4d3f\u0026amp;signature=1ba1682f30fbcd32e2294b3a0b8ec01059c9ece184ef9c6b9d26b8f120ee27ca\">\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/porter/NTslyGGtUJjpK6WT/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Porter\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5B63B2\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.porter.run/addons/qm/use-cases\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/addons/qm/use-cases.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://porter.run/#organization\",\"name\":\"Porter\",\"legalName\":\"Porter Technologies Inc\",\"url\":\"https://porter.run\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://docs.porter.run/logo/light.png\"},\"sameAs\":[\"https://github.com/porter-dev\",\"https://www.linkedin.com/company/porterrun\",\"https://www.ycombinator.com/companies/porter\"]},{\"@type\":\"WebSite\",\"@id\":\"https://docs.porter.run#website\",\"name\":\"Porter\",\"url\":\"https://docs.porter.run\",\"publisher\":{\"@id\":\"https://porter.run/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.porter.run/addons/qm/use-cases#webpage\",\"url\":\"https://docs.porter.run/addons/qm/use-cases\",\"name\":\"QM Use Cases\",\"description\":\"QM gives your team AI teammates that share context, files, and schedules. At Porter, we run QM on our own infrastructure, allowing our agents to securely deploy internal apps and connect to existing data. This page outlines three ways we use QM internally:\",\"dateModified\":\"2026-11-04T21:49:03.431Z\",\"isPartOf\":{\"@id\":\"https://docs.porter.run#website\"},\"breadcrumb\":{\"@id\":\"https://docs.porter.run/addons/qm/use-cases#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.porter.run/addons/qm/use-cases#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Documentation\",\"item\":\"https://docs.porter.run/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Add-ons\",\"item\":\"https://docs.porter.run/addons/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"QM\",\"item\":\"https://docs.porter.run/addons/qm\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"QM Use Cases\",\"item\":\"https://docs.porter.run/addons/qm/use-cases\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.porter.run/addons/qm/use-cases#article\",\"headline\":\"QM Use Cases\",\"name\":\"QM Use Cases\",\"description\":\"QM gives your team AI teammates that share context, files, and schedules. At Porter, we run QM on our own infrastructure, allowing our agents to securely deploy internal apps and connect to existing data. This page outlines three ways we use QM internally:\",\"url\":\"https://docs.porter.run/addons/qm/use-cases\",\"mainEntityOfPage\":{\"@id\":\"https://docs.porter.run/addons/qm/use-cases#webpage\"},\"dateModified\":\"2026-11-04T21:49:03.431Z\",\"publisher\":{\"@id\":\"https://porter.run/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.porter.run#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Porter\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Porter","nav":{"global":null,"groups":[{"group":"Documentation","pages":[{"title":"Overview","sidebarTitle":"Overview","href":"/index"},{"group":"Getting Started","pages":[{"title":"Introduction","href":"/getting-started/introduction"},{"title":"Concepts","href":"/getting-started/concepts"},{"title":"Quickstart","href":"/getting-started/quickstart"}]},{"group":"AI Agents \u0026 MCP","pages":[{"title":"MCP Server","sidebarTitle":"MCP Server","href":"/mcp/overview"},{"title":"MCP Server Tools","sidebarTitle":"Tools","href":"/mcp/tools"}]},{"group":"Cloud Accounts","pages":[{"title":"Cloud accounts","sidebarTitle":"Overview","href":"/cloud-accounts/overview"},{"title":"Connecting a cloud account","sidebarTitle":"Connecting a Cloud Account","href":"/cloud-accounts/connecting-a-cloud-account"},{"title":"Creating a cluster","sidebarTitle":"Creating a Cluster","href":"/cloud-accounts/creating-a-cluster"},{"title":"Node groups","sidebarTitle":"Node Groups","href":"/cloud-accounts/node-groups"},{"title":"Cluster upgrades","sidebarTitle":"Cluster Upgrades","href":"/cloud-accounts/cluster-upgrades"},{"title":"Advanced Cluster Settings","href":"/cloud-accounts/advanced-cluster-settings"},{"title":"Cluster observability","sidebarTitle":"Cluster Observability","href":"/cloud-accounts/cluster-observability"},{"title":"Deleting a cluster","sidebarTitle":"Deleting a Cluster","href":"/cloud-accounts/deleting-a-cluster"}]},{"group":"Applications","pages":[{"group":"Deploy","pages":[{"title":"Deploying applications","href":"/applications/deploy/overview"},{"title":"Connect GitHub","href":"/applications/deploy/connect-github"},{"title":"Types of services","href":"/applications/deploy/types-of-services"},{"title":"Deploy from a GitHub repository","href":"/applications/deploy/deploy-from-github-repo"},{"title":"Deploy from a Docker registry","href":"/applications/deploy/deploy-from-docker-registry"},{"title":"Configuring application services","href":"/applications/deploy/configuring-application-services"},{"title":"Building your application","href":"/applications/deploy/builds"},{"title":"Deploy multiple apps from one build","href":"/applications/deploy/multiple-deploys-from-same-build"},{"title":"Pre-deploy jobs","href":"/applications/deploy/pre-deploy-jobs"},{"title":"Rollbacks","href":"/applications/deploy/rollbacks"},{"title":"Using other CI tools","href":"/applications/deploy/using-other-ci-tools"},{"title":"Cloning an application","hidden":true,"href":"/applications/deploy/duplicating-apps"}]},{"group":"Configuration as Code","pages":[{"title":"Configuration as code with porter.yaml","sidebarTitle":"Overview","href":"/applications/configuration-as-code/overview"},{"title":"porter.yaml reference","sidebarTitle":"Reference","href":"/applications/configuration-as-code/reference"},{"title":"Deploying multiple apps with porter.yaml","href":"/applications/configuration-as-code/addons-porter-yaml"},{"group":"Service Configuration","pages":[{"title":"Web services in porter.yaml","href":"/applications/configuration-as-code/services/web-service"},{"title":"Worker services in porter.yaml","href":"/applications/configuration-as-code/services/worker-service"},{"title":"Job services in porter.yaml","href":"/applications/configuration-as-code/services/job-service"},{"title":"Predeploy in porter.yaml","href":"/applications/configuration-as-code/services/predeploy"},{"title":"Autoscaling in porter.yaml","sidebarTitle":"Autoscaling","href":"/applications/configuration-as-code/services/autoscaling"},{"title":"Connections in porter.yaml","sidebarTitle":"Connections","href":"/applications/configuration-as-code/services/connections"}]}]},{"group":"Environment Groups","pages":[{"title":"Environment groups","href":"/applications/configure/environment-groups"}]},{"group":"Configure","pages":[{"title":"Basic configuration","href":"/applications/configure/basic-configuration"},{"title":"Autoscaling","href":"/applications/configure/autoscaling"},{"title":"Temporal autoscaling","href":"/applications/configure/temporal-autoscaling"},{"title":"HTTPS certificates and custom domains","href":"/applications/configure/custom-domains"},{"title":"Zero-downtime deployments","href":"/applications/configure/zero-downtime-deployments"},{"title":"Advanced networking","href":"/applications/configure/advanced-networking"},{"title":"Secure cloud access","href":"/applications/configure/secure-cloud-access"}]},{"group":"Observability","pages":[{"title":"Monitoring","href":"/applications/observability/monitoring"},{"title":"Logging","href":"/applications/observability/logging"},{"title":"Alerts","href":"/applications/observability/alerts"},{"title":"App metadata environment variables","href":"/applications/observability/app-metadata"},{"title":"Custom metrics autoscaling","href":"/applications/observability/custom-metrics-and-autoscaling"},{"title":"DevOps Agent","sidebarTitle":"DevOps Agent","href":"/applications/observability/devops-agent"}]},{"group":"Debug","pages":[{"title":"Common errors","href":"/applications/debug/common-errors"}]}]},{"group":"Sandboxes","pages":[{"title":"Sandboxes Overview","href":"/sandboxes/overview"},{"title":"Sandboxes Getting Started","href":"/sandboxes/getting-started"},{"title":"Volumes","href":"/sandboxes/volumes"},{"title":"Sandbox Networking","href":"/sandboxes/networking"},{"title":"Sandbox Capacity","href":"/sandboxes/capacity"},{"group":"Sandbox SDK","pages":[{"group":"Python","pages":[{"title":"Python Sandbox SDK quickstart","href":"/sandboxes/sdk/python/quickstart"},{"title":"Python Sandbox SDK volumes","href":"/sandboxes/sdk/python/volumes"},{"title":"Python Sandbox SDK reference","href":"/sandboxes/sdk/python/reference"},{"title":"Python Sandbox SDK errors","href":"/sandboxes/sdk/python/errors"}]},{"group":"TypeScript","pages":[{"title":"TypeScript Sandbox SDK quickstart","href":"/sandboxes/sdk/typescript/quickstart"},{"title":"TypeScript Sandbox SDK volumes","href":"/sandboxes/sdk/typescript/volumes"},{"title":"TypeScript Sandbox SDK reference","href":"/sandboxes/sdk/typescript/reference"},{"title":"TypeScript Sandbox SDK errors","href":"/sandboxes/sdk/typescript/errors"}]}]},{"title":"Sandboxes CLI","href":"/sandboxes/cli"}]},{"group":"Add-ons","pages":[{"title":"Add-ons","sidebarTitle":"Overview","href":"/addons/overview"},{"group":"QM","root":{"title":"QM","sidebarTitle":"QM","description":"Run QM, the open source multiplayer agent harness, on your own Porter cluster with agents in Porter Sandboxes, a Postgres database, and an optional S3 bucket","href":"/addons/qm"},"pages":[{"title":"QM Use Cases","sidebarTitle":"Use cases","href":"/addons/qm/use-cases"}]},{"title":"Datastores","sidebarTitle":"Datastores","description":"Provision managed Postgres and Redis databases on AWS with automatic VPC peering, private subnet networking, and security group configuration","href":"/addons/datastores"},{"title":"Custom Helm Charts","sidebarTitle":"Custom Helm Charts","href":"/addons/custom-helm-charts"},{"title":"Third-party observability","sidebarTitle":"Third-party Observability","href":"/addons/third-party-observability"},{"title":"Persistent storage","sidebarTitle":"Storage","href":"/addons/storage"}]},{"group":"Integrations","pages":[{"title":"Doppler","href":"/integrations/doppler"},{"title":"Infisical","href":"/integrations/infisical"}]},{"group":"Command Line Interface (CLI)","pages":[{"title":"CLI installation","href":"/cli/installation"},{"title":"CLI basic usage","href":"/cli/basic-usage"},{"group":"Command Reference","pages":[{"title":"porter apply","sidebarTitle":"porter apply","href":"/standard/cli/command-reference/porter-apply"},{"title":"porter auth","href":"/standard/cli/command-reference/porter-auth"},{"title":"porter clusters","href":"/standard/cli/command-reference/porter-clusters"},{"title":"porter cloud-accounts","href":"/standard/cli/command-reference/porter-cloud-accounts"},{"title":"porter config","href":"/standard/cli/command-reference/porter-config"},{"title":"porter project","href":"/standard/cli/command-reference/porter-project"},{"title":"porter app","href":"/standard/cli/command-reference/porter-app"},{"title":"porter job","href":"/standard/cli/command-reference/porter-job"},{"title":"porter datastore connect","href":"/standard/cli/command-reference/porter-datastore-connect"},{"title":"porter env","href":"/standard/cli/command-reference/porter-env"},{"title":"porter registry","href":"/standard/cli/command-reference/porter-registry"},{"title":"porter target","href":"/standard/cli/command-reference/porter-target"}]}]},{"group":"Preview Environments","pages":[{"title":"Preview environments","href":"/preview-environments/overview"},{"title":"Preview environment overrides","href":"/preview-environments/defining-overrides"},{"title":"Custom preview environment workflows","href":"/preview-environments/custom-workflows"}]},{"group":"Security and Compliance","pages":[{"title":"Role-based access control","href":"/security-and-compliance/role-based-access-control"},{"title":"Audit logs","href":"/security-and-compliance/audit-logs"},{"title":"AWS permissions required for Porter","sidebarTitle":"AWS Roles \u0026 Permissions","href":"/security-and-compliance/aws-permissions"},{"title":"Static egress IPs","href":"/security-and-compliance/static-egress-ip"},{"title":"Configuring AWS ALB on Porter","sidebarTitle":"Configuring AWS ALB","href":"/security-and-compliance/configuring-alb"},{"title":"Using Cloudflare DNS with Porter","sidebarTitle":"Cloudflare DNS","href":"/security-and-compliance/cloudflare-dns"},{"title":"SOC 2 and HIPAA compliance","href":"/security-and-compliance/soc2-hipaa"},{"title":"Porter IP ranges","sidebarTitle":"Porter's IP Ranges","href":"/security-and-compliance/porter-ip-ranges"},{"title":"Tailscale VPN","sidebarTitle":"Tailscale VPN","href":"/security-and-compliance/tailscale"}]},{"group":"Other Guides","pages":[{"title":"Running GPU workloads","href":"/other/gpu-workloads"},{"title":"Deleting dangling resources","href":"/other/deleting-dangling-resources"},{"title":"AWS VPC peering","sidebarTitle":"AWS VPC Peering","href":"/other/aws-vpc-peering"},{"title":"Kubernetes 101","href":"/other/kubernetes-101"},{"title":"Migrate from Heroku","href":"/other/migrate-from-heroku"}]},{"group":"Terms \u0026 Privacy","pages":[{"title":"Terms of service","href":"/terms-and-privacy/terms-of-service"},{"title":"Privacy policy","href":"/terms-and-privacy/privacy-policy"}]}]}]},"basePath":"","title":"QM Use Cases - Porter","buildId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","deploymentId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","dynamics":[],"chunks":[]}