A self-hosted task and project tracker that autonomous agents read and write through an MCP server, so agent and operator share one board.
Status: live. The tracker and its MCP server are deployed; agents read and
write it today.
The agent and the operator plan against the same board. Neither keeps a private
to-do list the other can’t see.Autonomous agents need somewhere durable to record what they are doing and what is
left to do. They need a store that survives a restart, a new session, or a handoff
to a person. A self-hosted task tracker fills that role: projects, tasks, labels,
and status, shared by every agent and every human on the homelab.
Agents reach the tracker through an MCP
server that exposes project and task operations as tools: create, read, update,
close, and organize. The agent plans work as tasks, records progress, and
closes items it finishes, the same way a person would from the web UI.
The MCP server authenticates with a scoped service-account token, a read-write
tier distinct from any human account. An operator opts a host
into the integration deliberately; it is off by default everywhere else.
{"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/task-management","slug":"/autonomous-agents/task-management","pageMetadata":{"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.","page_type":"explanation","href":"/autonomous-agents/task-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 task and project tracker that autonomous agents read and write through an MCP server, so agent and operator share one board.\"\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`,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:`live.`}),` The tracker and its MCP server are deployed; agents read and\nwrite it today.`]})}),`\n`,_jsx(_components.p,{children:`The agent and the operator plan against the same board. Neither keeps a private\nto-do list the other can’t see.`}),`\n`,_jsx(_components.p,{children:`Autonomous agents need somewhere durable to record what they are doing and what is\nleft to do. They need a store that survives a restart, a new session, or a handoff\nto a person. A self-hosted task tracker fills that role: projects, tasks, labels,\nand status, shared by every agent and every human on the homelab.`}),`\n`,_jsx(Heading,{level:`2`,id:`what-the-agent-can-do`,children:`What the agent can do`}),`\n`,_jsxs(_components.p,{children:[`Agents reach the tracker through an `,_jsx(_components.a,{href:`/ai-development/ai-orchestration-stack`,children:`MCP`}),`\nserver that exposes project and task operations as tools: create, read, update,\nclose, and organize. The agent plans work as tasks, records progress, and\ncloses items it finishes, the same way a person would from the web UI.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Capability`}),_jsx(_components.th,{children:`Who uses it`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Create and organize projects and tasks`}),_jsx(_components.td,{children:`Agent and operator`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Update status, labels, priority`}),_jsx(_components.td,{children:`Agent and operator`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`List work per project`}),_jsx(_components.td,{children:`Agent and operator`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Shared board of record`}),_jsx(_components.td,{children:`Both, one view`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`credentials-not-prompts`,children:`Credentials, not prompts`}),`\n`,_jsxs(_components.p,{children:[`The MCP server authenticates with a `,_jsx(_components.strong,{children:`scoped service-account token`}),`, a read-write\ntier distinct from any human account. An operator opts a host\ninto the integration deliberately; it is off by default everywhere else.`]}),`\n`,_jsx(Heading,{level:`2`,id:`known-limits`,children:`Known limits`}),`\n`,_jsx(_components.p,{children:`Listing every task across all projects in one call is unreliable, so agents list per\nproject instead. This is a client-side quirk, not a data limit.`})]})}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":"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.","page_type":"explanation","href":"/autonomous-agents/task-management"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"What the agent can do","slug":"what-the-agent-can-do","depth":2,"children":[]},{"title":"Credentials, not prompts","slug":"credentials-not-prompts","depth":2,"children":[]},{"title":"Known limits","slug":"known-limits","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"jacobpevans","siteName":"Jacob P Evans","title":"Task management - Jacob P Evans","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-07T20:19:28.368Z","originalFileLocation":"autonomous-agents/task-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 task and project tracker that autonomous agents read and write through an MCP server, so agent and operator share one board.\">\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=\"Task management - Jacob P Evans\">\u003cmeta data-mint-head property=\"og:description\" content=\"A self-hosted task and project tracker that autonomous agents read and write through an MCP server, so agent and operator share one board.\">\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/task-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=Task+management\u0026amp;description=A+self-hosted+task+and+project+tracker+that+autonomous+agents+read+and+write+through+an+MCP+server%2C+so+agent+and+operator+share+one+board.\u0026amp;theme=8b87e4bf9fecbb9833946f9a\u0026amp;signature=a7ad8b551af82a70e38ab208eb15c565bf7af2939bc2885b1d91cab8ee44e9ad\">\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=\"Task management - Jacob P Evans\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"A self-hosted task and project tracker that autonomous agents read and write through an MCP server, so agent and operator share one board.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://jacobpevans.mintlify.site/_mintlify/api/og/v2?division=Autonomous+agents\u0026amp;title=Task+management\u0026amp;description=A+self-hosted+task+and+project+tracker+that+autonomous+agents+read+and+write+through+an+MCP+server%2C+so+agent+and+operator+share+one+board.\u0026amp;theme=8b87e4bf9fecbb9833946f9a\u0026amp;signature=a7ad8b551af82a70e38ab208eb15c565bf7af2939bc2885b1d91cab8ee44e9ad\">\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/task-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/task-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/task-management#webpage\",\"url\":\"https://docs.jacobpevans.com/autonomous-agents/task-management\",\"name\":\"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.\",\"dateModified\":\"2026-11-07T20:19:28.368Z\",\"isPartOf\":{\"@id\":\"https://docs.jacobpevans.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.jacobpevans.com/autonomous-agents/task-management#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.jacobpevans.com/autonomous-agents/task-management#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Autonomous agents\",\"item\":\"https://docs.jacobpevans.com/autonomous-agents/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Task management\",\"item\":\"https://docs.jacobpevans.com/autonomous-agents/task-management\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.jacobpevans.com/autonomous-agents/task-management#article\",\"headline\":\"Task management\",\"name\":\"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.\",\"url\":\"https://docs.jacobpevans.com/autonomous-agents/task-management\",\"mainEntityOfPage\":{\"@id\":\"https://docs.jacobpevans.com/autonomous-agents/task-management#webpage\"},\"dateModified\":\"2026-11-07T20:19:28.368Z\",\"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/task-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)","description":"Superseded trust-tier design. See Agent identity and access for current identities, permissions, and live status.","href":"/autonomous-agents/harness-trust-tiers"},{"title":"Task management","href":"/autonomous-agents/task-management"},{"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.","href":"/autonomous-agents/incident-management"},{"title":"Network source of truth","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":"Task management - Jacob P Evans","buildId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","deploymentId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","dynamics":[],"chunks":[]}