A self-hosted ITSM system of record where agents open, dedupe, update, and auto-close homelab incidents under a strict contract that always yields to a human.
Status: planned. The incident contract is written and released in the agent’s
skill bundle; the ITSM service it drives is not yet deployed.
When something is genuinely wrong, the durable record is a ticket, not a chat
message that scrolls away. When a person steps in, the agent steps back.The monitoring layer decides something is wrong. The incident system turns that
into a ticket with a threaded narrative. Once resolved, it also becomes a
knowledge-base article the next occurrence can reuse. Notifications are the alert
surface; the ticket is the truth.
Agents follow one deterministic contract so incidents stay clean and a person is
never overwritten.
Rule
What it means
Deterministic dedup
Every finding gets a stable key built from its source, rule, and the one entity it is about, normalized so the same problem always produces the same key. The agent searches for an open ticket by that key before creating one; a match is appended to, never duplicated.
Severity mapping
The monitoring layer’s severity maps straight to ticket priority, so an alert’s urgency carries through to the queue.
Auto-managed lifecycle
Tickets the agent opens are tagged as agent-managed. After recovery is confirmed and the problem stays quiet for a defined window, the agent closes the ticket itself.
Yield to humans
The instant a person touches a ticket (a comment, a state change, or taking ownership), the agent drops its claim and never changes that ticket’s state again.
The agent runs the contract under the same discipline as every other write path.
It uses a dry-run mode that prints what it would do instead of doing it. It
also applies a rate limit of one write per finding per cycle, plus bounded
reads that never pull full ticket histories into context. Credentials come from the
agent’s environment and are never printed
into a ticket. See the Hermes agent for the
runtime that drives it.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Jacob P Evans","description":"Splunk and Cribl architect by day. Building the AI dev pipeline by night. Reef tank in the living room, homelab in the basement, both fully monitored.","colors":{"primary":"#4FB3A9","light":"#2F7E78","dark":"#4FB3A9"},"logo":{"light":"https://mintcdn.com/jacobpevans/BnmS6GezGzlpslqn/logo/light.svg?fit=max\u0026auto=format\u0026n=BnmS6GezGzlpslqn\u0026q=85\u0026s=32f636959b4ea568377ecfef4e8438f2","dark":"https://mintcdn.com/jacobpevans/BnmS6GezGzlpslqn/logo/dark.svg?fit=max\u0026auto=format\u0026n=BnmS6GezGzlpslqn\u0026q=85\u0026s=606e7a68810eca954f648913530de4ff"},"favicon":"https://mintcdn.com/jacobpevans/BnmS6GezGzlpslqn/favicon.svg?fit=max\u0026auto=format\u0026n=BnmS6GezGzlpslqn\u0026q=85\u0026s=0dd43a3260a2cc1d7bafe3e640ffc671","background":{"decoration":"grid","color":{"light":"#F4EFE6","dark":"#0B1D2A"}},"navbar":{"links":[{"href":"https://github.com/JacobPEvans","label":"Profile"},{"href":"https://github.com/dryvist","label":"dryvist"}],"primary":{"type":"github","href":"https://github.com/JacobPEvans/docs"}},"footer":{"socials":{"github":"https://github.com/JacobPEvans","linkedin":"https://www.linkedin.com/in/JacobPaulEvans"},"links":[{"header":"Connect","items":[{"label":"GitHub (JacobPEvans)","href":"https://github.com/JacobPEvans"},{"label":"GitHub (dryvist)","href":"https://github.com/dryvist"},{"label":"LinkedIn","href":"https://www.linkedin.com/in/JacobPaulEvans"}]},{"header":"Docs","items":[{"label":"Source repo","href":"https://github.com/JacobPEvans/docs"},{"label":"Source repo (dryvist)","href":"https://github.com/dryvist/docs"},{"label":"Built with Mintlify","href":"https://mintlify.com"},{"label":"Dryvist","href":"https://docs.dryvist.com"}]}]},"seo":{"indexing":"all"},"fonts":{"heading":{"family":"Geist","weight":600},"body":{"family":"Geist","weight":400}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"jacobpevans","hasAudioNarration":false,"actualSubdomain":"jacobpevans","customDomains":["docs.jacobpevans.com"],"gitSource":{"type":"github","owner":"dryvist","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":true,"issues":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6af4a46819112204a50bbc35","clientVersion":"0.0.4124","searchFilterCounts":[{"language":"default","tag":"Homelab infrastructure","count":45},{"language":"default","tag":"AI and agents","count":39},{"language":"default","tag":"Infrastructure","count":27},{"language":"default","tag":"Reference","count":25},{"language":"default","tag":"Conventions","count":16},{"language":"default","tag":"AI development","count":15},{"language":"default","tag":"Overview","count":14},{"language":"default","tag":"Repos","count":14},{"language":"default","tag":"Local LLM","count":14},{"language":"default","tag":"Platform and tooling","count":11}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","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":"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":"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":"editor-metadata","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},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","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}],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"autonomous-agents/incident-management","slug":"/autonomous-agents/incident-management","pageMetadata":{"title":"Incident management","description":"A self-hosted ITSM system of record where agents open, dedupe, update, and auto-close homelab incidents under a strict contract that always yields to a human.","page_type":"explanation","href":"/autonomous-agents/incident-management"},"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: \"A self-hosted ITSM system of record where agents open, dedupe, update, and auto-close homelab incidents under a strict contract that always yields to a human.\"\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`,em:`em`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Heading,Note,Table}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Note,{children:_jsxs(_components.p,{children:[`Status: `,_jsx(_components.strong,{children:`planned.`}),` The incident contract is written and released in the agent’s\nskill bundle; the ITSM service it drives is not yet deployed.`]})}),`\n`,_jsx(_components.p,{children:`When something is genuinely wrong, the durable record is a ticket, not a chat\nmessage that scrolls away. When a person steps in, the agent steps back.`}),`\n`,_jsxs(_components.p,{children:[`The monitoring layer decides `,_jsx(_components.em,{children:`something is wrong`}),`. The incident system turns that\ninto a `,_jsx(_components.strong,{children:`ticket`}),` with a threaded narrative. Once resolved, it also becomes a\nknowledge-base article the next occurrence can reuse. Notifications are the alert\nsurface; the ticket is the truth.`]}),`\n`,_jsx(Heading,{level:`2`,id:`the-operating-contract`,children:`The operating contract`}),`\n`,_jsx(_components.p,{children:`Agents follow one deterministic contract so incidents stay clean and a person is\nnever overwritten.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Rule`}),_jsx(_components.th,{children:`What it means`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Deterministic dedup`})}),_jsx(_components.td,{children:`Every finding gets a stable key built from its source, rule, and the one entity it is about, normalized so the same problem always produces the same key. The agent searches for an open ticket by that key before creating one; a match is appended to, never duplicated.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Severity mapping`})}),_jsx(_components.td,{children:`The monitoring layer’s severity maps straight to ticket priority, so an alert’s urgency carries through to the queue.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Auto-managed lifecycle`})}),_jsx(_components.td,{children:`Tickets the agent opens are tagged as agent-managed. After recovery is confirmed and the problem stays quiet for a defined window, the agent closes the ticket itself.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Yield to humans`})}),_jsx(_components.td,{children:`The instant a person touches a ticket (a comment, a state change, or taking ownership), the agent drops its claim and never changes that ticket’s state again.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`guardrails`,children:`Guardrails`}),`\n`,_jsxs(_components.p,{children:[`The agent runs the contract under the same discipline as every other write path.\nIt uses a `,_jsx(_components.strong,{children:`dry-run`}),` mode that prints what it would do instead of doing it. It\nalso applies a `,_jsx(_components.strong,{children:`rate limit`}),` of one write per finding per cycle, plus bounded\nreads that never pull full ticket histories into context. Credentials come from the\nagent’s environment and are never printed\ninto a ticket. See the `,_jsx(_components.a,{href:`/autonomous-agents/hermes-agent`,children:`Hermes agent`}),` for the\nruntime that drives it.`]})]})}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":"Incident management","description":"A self-hosted ITSM system of record where agents open, dedupe, update, and auto-close homelab incidents under a strict contract that always yields to a human.","page_type":"explanation","href":"/autonomous-agents/incident-management"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"The operating contract","slug":"the-operating-contract","depth":2,"children":[]},{"title":"Guardrails","slug":"guardrails","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"jacobpevans","siteName":"Jacob P Evans","title":"Incident management - Jacob P Evans","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-07T20:19:28.370Z","originalFileLocation":"autonomous-agents/incident-management.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"A self-hosted ITSM system of record where agents open, dedupe, update, and auto-close homelab incidents under a strict contract that always yields to a human.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Jacob P Evans\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/jacobpevans/iynpOYLHde2zwrXP/_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/jacobpevans/iynpOYLHde2zwrXP/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/jacobpevans/iynpOYLHde2zwrXP/_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/jacobpevans/iynpOYLHde2zwrXP/_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/jacobpevans/iynpOYLHde2zwrXP/_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/jacobpevans/iynpOYLHde2zwrXP/_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/jacobpevans/iynpOYLHde2zwrXP/_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/jacobpevans/iynpOYLHde2zwrXP/_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/jacobpevans/iynpOYLHde2zwrXP/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Incident management - Jacob P Evans\">\u003cmeta data-mint-head property=\"og:description\" content=\"A self-hosted ITSM system of record where agents open, dedupe, update, and auto-close homelab incidents under a strict contract that always yields to a human.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Jacob P Evans\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.jacobpevans.com/autonomous-agents/incident-management\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://jacobpevans.mintlify.site/_mintlify/api/og/v2?division=Autonomous+agents\u0026amp;title=Incident+management\u0026amp;description=A+self-hosted+ITSM+system+of+record+where+agents+open%2C+dedupe%2C+update%2C+and+auto-close+homelab+incidents+under+a+strict+contract+that+always+yields+to+a+human.\u0026amp;theme=8b87e4bf9fecbb9833946f9a\u0026amp;signature=bf1a605baddedb5828706259fd7543d061a67f1bf5b5e32d85fc4aad7d201cfa\">\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=\"Incident management - Jacob P Evans\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"A self-hosted ITSM system of record where agents open, dedupe, update, and auto-close homelab incidents under a strict contract that always yields to a human.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://jacobpevans.mintlify.site/_mintlify/api/og/v2?division=Autonomous+agents\u0026amp;title=Incident+management\u0026amp;description=A+self-hosted+ITSM+system+of+record+where+agents+open%2C+dedupe%2C+update%2C+and+auto-close+homelab+incidents+under+a+strict+contract+that+always+yields+to+a+human.\u0026amp;theme=8b87e4bf9fecbb9833946f9a\u0026amp;signature=bf1a605baddedb5828706259fd7543d061a67f1bf5b5e32d85fc4aad7d201cfa\">\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/jacobpevans/iynpOYLHde2zwrXP/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Jacob P Evans\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4FB3A9\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.jacobpevans.com/autonomous-agents/incident-management\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/autonomous-agents/incident-management.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.jacobpevans.com/#organization\",\"name\":\"Jacob P Evans\",\"url\":\"https://docs.jacobpevans.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/jacobpevans/BnmS6GezGzlpslqn/logo/light.svg?fit=max\u0026auto=format\u0026n=BnmS6GezGzlpslqn\u0026q=85\u0026s=32f636959b4ea568377ecfef4e8438f2\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.jacobpevans.com#website\",\"name\":\"Jacob P Evans\",\"url\":\"https://docs.jacobpevans.com\",\"publisher\":{\"@id\":\"https://docs.jacobpevans.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.jacobpevans.com/autonomous-agents/incident-management#webpage\",\"url\":\"https://docs.jacobpevans.com/autonomous-agents/incident-management\",\"name\":\"Incident management\",\"description\":\"A self-hosted ITSM system of record where agents open, dedupe, update, and auto-close homelab incidents under a strict contract that always yields to a human.\",\"dateModified\":\"2026-11-07T20:19:28.370Z\",\"isPartOf\":{\"@id\":\"https://docs.jacobpevans.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.jacobpevans.com/autonomous-agents/incident-management#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.jacobpevans.com/autonomous-agents/incident-management#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Autonomous agents\",\"item\":\"https://docs.jacobpevans.com/autonomous-agents/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Incident management\",\"item\":\"https://docs.jacobpevans.com/autonomous-agents/incident-management\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.jacobpevans.com/autonomous-agents/incident-management#article\",\"headline\":\"Incident management\",\"name\":\"Incident management\",\"description\":\"A self-hosted ITSM system of record where agents open, dedupe, update, and auto-close homelab incidents under a strict contract that always yields to a human.\",\"url\":\"https://docs.jacobpevans.com/autonomous-agents/incident-management\",\"mainEntityOfPage\":{\"@id\":\"https://docs.jacobpevans.com/autonomous-agents/incident-management#webpage\"},\"dateModified\":\"2026-11-07T20:19:28.370Z\",\"publisher\":{\"@id\":\"https://docs.jacobpevans.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.jacobpevans.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Jacob P Evans\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Jacob P Evans\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/autonomous-agents/incident-management.md","siteName":"Jacob P Evans","nav":{"global":null,"dropdowns":[{"dropdown":"Overview","icon":"compass","groups":[{"group":"Start here","pages":[{"title":"Jacob P Evans","href":"/introduction"},{"title":"How it fits together","href":"/how-it-fits-together"},{"title":"Repository catalog","href":"/repositories"}]},{"group":"Explainers","pages":[{"title":"Homelab explainers","href":"/explainers/overview"},{"title":"What a hypervisor is","href":"/explainers/what-is-a-hypervisor"},{"title":"Clusters and quorum","href":"/explainers/clusters-and-quorum"},{"title":"Staying up when a machine dies","href":"/explainers/staying-up-when-a-machine-dies"},{"title":"One login for everything","href":"/explainers/one-login-for-everything"}]},{"group":"Architecture","pages":[{"title":"Architecture","href":"/architecture/overview"},{"title":"Data pipelines","href":"/architecture/data-pipelines"},{"title":"AI development pipeline","href":"/architecture/ai-pipeline"}]},{"group":"About","pages":[{"title":"About Jacob","href":"/about/jacob"},{"title":"Homelab","href":"/about/homelab"},{"title":"Reef","href":"/about/reef"}]}]},{"dropdown":"Homelab infrastructure","icon":"server","groups":[{"group":"Infrastructure","pages":[{"title":"Infrastructure","href":"/infrastructure/overview"},{"title":"Deployment state contract","href":"/infrastructure/deployment-state-contract"},{"title":"Configuration","href":"/infrastructure/configuration/overview"},{"group":"Compute and networking","pages":[{"title":"DNS architecture","href":"/infrastructure/dns-architecture"},{"title":"VMID and network tier model","href":"/infrastructure/vmid-network-tiers"},{"title":"Kubernetes overview","href":"/infrastructure/kubernetes-overview"},{"title":"LXC versus Docker","href":"/infrastructure/lxc-vs-docker"},{"title":"Packer Windows templates on Proxmox: six silent traps","href":"/infrastructure/packer-windows-proxmox"},{"title":"VPN-locked egress reliability","href":"/infrastructure/vpn-egress-failover"},{"title":"Legacy BMC tactics","href":"/infrastructure/legacy-bmc-tactics"},{"title":"Mac homelab setup","href":"/infrastructure/mac-homelab-setup"}]},{"group":"Storage and media","pages":[{"title":"ZFS backup and replication","href":"/infrastructure/zfs-backup-replication"},{"title":"Data platform resilience","href":"/infrastructure/data-platform-resilience"},{"title":"Self-hosted Netflix and personal backup","href":"/infrastructure/media-stack"}]},{"group":"Repos","pages":[{"title":"Proxmox provisioning","href":"/infrastructure/repos/tofu-proxmox"},{"title":"UniFi networking","href":"/infrastructure/repos/tofu-unifi"},{"title":"GitHub org governance","href":"/infrastructure/repos/tofu-github"},{"title":"Proxmox config","href":"/infrastructure/repos/ansible-proxmox"},{"title":"Apps on Proxmox","href":"/infrastructure/repos/ansible-proxmox-apps"},{"title":"AI/LLM stack on Proxmox","href":"/infrastructure/repos/ansible-proxmox-ai"},{"title":"OrbStack Kubernetes","href":"/infrastructure/repos/orbstack-kubernetes"}]},{"group":"CI/CD","pages":[{"title":"CI/CD","href":"/infrastructure/cicd/overview"},{"title":"CI/CD policy","href":"/infrastructure/cicd/policy"},{"title":"Dependency automation","href":"/infrastructure/cicd/dependency-automation"},{"title":"Git signing","href":"/infrastructure/cicd/git-signing"},{"title":"OpenTofu check placement","href":"/infrastructure/tofu-check-placement"}]},{"group":"OpenTofu on AWS","pages":[{"title":"AWS bootstrap","href":"/infrastructure/tofu-aws/aws-bootstrap"}]}]},{"group":"Observability","pages":[{"title":"Observability","href":"/observability/overview"},{"title":"LLM observability","href":"/observability/llm-observability"},{"title":"Arize Phoenix","href":"/observability/phoenix"},{"title":"Pipeline flows","href":"/observability/pipeline-flows"},{"title":"Splunk frozen buckets: archive and restore","href":"/observability/splunk-frozen-restore"},{"title":"Three ways Splunk reports healthy while broken","href":"/observability/splunk-silent-failure-modes"},{"group":"Repos","pages":[{"title":"Splunk install","href":"/observability/repos/ansible-splunk"},{"title":"Splunk on AWS","href":"/observability/repos/tofu-splunk-aws"},{"title":"Cribl Edge Mac Pack","href":"/observability/repos/cc-edge-the-mac-pack"}]},{"title":"Monitoring agents","href":"/observability/monitoring-agents"}]},{"group":"Automation","pages":[{"title":"Automation","href":"/automation/overview"},{"title":"Issue to PR pipeline","href":"/automation/issue-to-pr-pipeline"},{"group":"Cloud pipelines","pages":[{"title":"Cloud pipelines","href":"/automation/cloud-pipelines/overview"}]},{"group":"Scheduled routines","pages":[{"title":"Scheduled routines","href":"/automation/scheduled-routines/overview"}]},{"group":"Repos","pages":[{"title":"AI workflows","href":"/automation/repos/ai-workflows"},{"title":"AI LLM prompts","href":"/automation/repos/ai-llm-prompts"},{"title":"Claude Code routines","href":"/automation/repos/claude-code-routines"},{"title":"LLM prompt evals","href":"/automation/repos/llm-prompt-evals"}]}]}]},{"dropdown":"Platform and tooling","icon":"screwdriver-wrench","groups":[{"group":"Nix ecosystem","pages":[{"title":"Nix ecosystem","href":"/nix/overview"},{"title":"macOS host","href":"/nix/nix-darwin"},{"title":"User environment","href":"/nix/nix-home"},{"title":"AI tooling","href":"/nix/nix-ai"},{"title":"Dev shells","href":"/nix/nix-devenv"},{"title":"Declarative Claude Code","href":"/nix/nix-claude-code"},{"title":"Package placement","href":"/nix/package-placement"}]},{"group":"Tools","pages":[{"title":"Tools","href":"/tools/overview"},{"title":"Local LLM benchmarking","href":"/tools/mlx-benchmarks"},{"title":"Docs automation","href":"/tools/automation"},{"title":"Bifrost AI gateway","href":"/tools/bifrost"}]}]},{"dropdown":"AI and agents","icon":"robot","groups":[{"group":"AI development","pages":[{"title":"AI development","href":"/ai-development/overview"},{"title":"AI orchestration stack","href":"/ai-development/ai-orchestration-stack"},{"title":"Running plan and diff reviews through Codex, Gemini, and local MLX","href":"/ai-development/multi-model-review"},{"title":"Model routing","href":"/ai-development/model-routing"},{"title":"MCP tool plane","href":"/ai-development/mcp-tool-plane"},{"title":"oh-my-openagent","href":"/ai-development/oh-my-openagent"},{"title":"How an agent instruction stack works","href":"/ai-development/agent-instruction-stack"},{"title":"Self-hosted AI agent","href":"/autonomous-agents/hermes-agent"},{"title":"Hermes operating profiles","href":"/autonomous-agents/hermes-operating-profiles"},{"title":"Repo boundaries","href":"/ai-development/repo-boundaries"},{"title":"Assistant rules","href":"/ai-development/ai-assistant-instructions"},{"title":"Claude Code plugins","href":"/ai-development/claude-code-plugins"},{"group":"Skills","pages":[{"title":"Skills","href":"/ai-development/skills/overview"},{"title":"/ship and /finalize-pr","href":"/ai-development/skills/ship-and-finalize"},{"title":"CodeQL resolution","href":"/ai-development/skills/codeql-resolution"}]}]},{"group":"Autonomous agents","pages":[{"title":"Autonomous agents","href":"/autonomous-agents/overview"},{"title":"Runtime","href":"/autonomous-agents/runtime"},{"title":"Agent multiplexer","href":"/autonomous-agents/herdr"},{"title":"Harness trust tiers (superseded)","href":"/autonomous-agents/harness-trust-tiers"},{"title":"Task management","description":"A self-hosted task and project tracker that autonomous agents read and write through an MCP server, so agent and operator share one board.","href":"/autonomous-agents/task-management"},{"title":"Incident management","href":"/autonomous-agents/incident-management"},{"title":"Network source of truth","description":"A self-hosted inventory platform that becomes the single authoritative model of the homelab's network and hosts, imported read-only from existing state before it drives anything.","href":"/autonomous-agents/network-source-of-truth"}]},{"group":"Agent ops","pages":[{"title":"Goal-statement component library","href":"/agent-ops/goal-statement-library"},{"title":"Prompt block library","href":"/agent-ops/prompt-blocks"},{"title":"Writing prompts for small models","href":"/agent-ops/small-model-prompts"}]},{"group":"Local LLM","pages":[{"title":"Local LLM","href":"/local-llm/overview"},{"title":"Agent context: llms.txt, registry, and RAG","href":"/local-llm/context"},{"title":"Apple Silicon stack","href":"/local-llm/apple-silicon"},{"title":"Historical vllm-mlx memory ceilings","href":"/local-llm/memory-ceilings"},{"title":"Prompt cache and serving concurrency","href":"/local-llm/prompt-cache-and-concurrency"},{"title":"Mac Studio serving","href":"/local-llm/mac-studio"},{"title":"How the Nix stack serves a model","href":"/local-llm/nix-serving-stack"},{"title":"Models and quantization","href":"/local-llm/models-and-quantization"},{"title":"Choosing a local model on Apple Silicon","href":"/local-llm/choosing-a-model"},{"title":"Backends and tool calling","href":"/local-llm/backends"},{"title":"Speculative decoding and MTP","href":"/local-llm/speculative-decoding"},{"title":"Verifying the instrument","href":"/local-llm/verifying-the-instrument"},{"title":"Distributed and multi-Mac","href":"/local-llm/distributed"},{"title":"Self-hosted ChatGPT","href":"/local-llm/homelab-gpu"}]}]},{"dropdown":"Reference","icon":"book","groups":[{"group":"Conventions","pages":[{"title":"Conventions","href":"/conventions/overview"},{"group":"Git and GitHub","pages":[{"title":"Commit conventions","href":"/conventions/commit-conventions"},{"title":"Branch conventions","href":"/conventions/branch-conventions"},{"title":"Pull request conventions","href":"/conventions/pr-conventions"},{"title":"Git transport","href":"/conventions/git-transport"},{"title":"Pre-commit architecture","href":"/conventions/pre-commit"}]},{"group":"Repository standards","pages":[{"title":"README conventions","href":"/conventions/readme-conventions"},{"title":"Generated projection","href":"/conventions/generated-projection"},{"title":"Org default .gitignore","href":"/conventions/org-gitignore"},{"title":"No scripts in non-script files","href":"/conventions/no-scripts"}]},{"group":"Documentation standards","pages":[{"title":"Documentation standards","href":"/conventions/documentation-standards"},{"title":"Diagramming","href":"/conventions/diagramming"},{"title":"Mermaid style guide","href":"/conventions/mermaid-style"},{"title":"Mermaid drill-down links","href":"/conventions/mermaid-links"}]},{"group":"Data and storage","pages":[{"title":"Data protection classes","href":"/conventions/data-protection-classes"},{"title":"Drive reliability","href":"/conventions/drive-reliability"}]}]},{"group":"GitHub","pages":[{"title":"GitHub Apps","href":"/github/apps"},{"title":"JacobPEvans-claude-admin","href":"/github/apps/jacobpevans-claude-admin"},{"title":"jacobpevans-release-please","href":"/github/apps/jacobpevans-release-please"},{"title":"jacobpevans-claude","href":"/github/apps/jacobpevans-claude"},{"title":"jacobs-agent-smith","href":"/github/apps/jacobs-agent-smith"},{"title":"openbao-service-broker","href":"/github/apps/openbao-service-broker"},{"title":"jacobs-hermes-agent","href":"/github/apps/jacobs-hermes-agent"},{"title":"jacobpevans-github-actions","href":"/github/apps/jacobpevans-github-actions"},{"title":"jacobpevans-autonomous-agents","href":"/github/apps/jacobpevans-autonomous-agents"}]}]}]},"basePath":"","title":"Incident management - Jacob P Evans","buildId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","deploymentId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","dynamics":[],"chunks":[]}