@prefix sioc: <http://rdfs.org/sioc/ns#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix content: <http://purl.org/rss/1.0/modules/content/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

<https://lhero.org/?post_type=lh-portfolio&#038;p=147124>
  a sioc:Post ;
  dc:title "LH Tasks" ;
  dcterms:identifier 147124 ;
  dc:modified "2026-10-23T23:08:15Z"^^xsd:dateTime ;
  dc:created "2026-09-07T19:06:48Z"^^xsd:dateTime ;
  sioc:link <https://lhero.org/portfolio/lh-tasks/> ;
  sioc:has_creator <https://lhero.org/author/1/#account> ;
  sioc:has_container <https://lhero.org/#posts> ;
  content:encoded "<ul class=\"lh_portfolio-meta\"><li><strong>Type:</strong> Plugin</li></ul><p class=\"wp-block-paragraph\">LH Task Queue is a single work queue for human and AI agent tasks, with atomic claiming, dependency tracking, and MCP abilities. Tasks live as a dedicated post type; workflow state (New, Claimed, In Progress, Pending, Awaiting review, Failed, Resolved, Closed, Cancelled, Deferred) is tracked in a companion status table rather than native WordPress post_status, so an atomic claim/complete/fail/reassign lifecycle can run safely under concurrent access from multiple human and agent sessions.</p><h2 class=\"wp-block-heading\">Key features</h2><ul class=\"wp-block-list\"><li>Atomic task claiming, highest priority first and then oldest (or one specific task), optionally narrowed to a queue and task type, with claim-token verification so concurrent sessions can&#039;t double-claim the same task</li><li>Dependency tracking via blocked_by: a task waiting on an unfinished prerequisite is never handed out, a claim that gets nothing says why, and if a prerequisite is cancelled or trashed the tasks waiting on it go to Pending for a person to check</li><li>A review step for delegated work: when someone other than the person who asked marks a task done, it waits as Awaiting review until the person who asked (or staff) accepts it or sends it back with a note, and each side is told by notification and email. Tasks you give yourself, and agent work, close straight away</li><li>Master tasks with subtasks, one level deep: the master&#039;s page is a checklist of its subtasks with owners, due dates, days left or overdue and progress such as 3 of 5 done, and the master resolves on its own when every subtask is finished (or goes to Pending if one fails)</li><li>Queue/lane and task-type taxonomies for routing</li><li>Stale-claim sweep every five minutes (on Action Scheduler where it is available, otherwise WP-Cron) to recover tasks left claimed by a crashed or disconnected agent, with a renew-claim heartbeat so a still-live long-running claim can stay ahead of the sweep</li><li>Task context on every write ability, on every site: any ability that changes something accepts an optional task_id and claim_token. The call is refused if the claim has been lost, a successful call keeps the claim alive up to a maximum lease (4 hours by default), and each call is counted on the task</li><li>Full MCP ability surface: create, update, add-note, claim-next, complete, complete-assigned-task, review-task, fail, reassign, renew-claim, edit (staff override), get, list. Tasks keep revisions, so an overwritten title or description can be recovered</li><li>Task listing that finds any task: filter by one or several statuses or a status group, priority, queue, task type, claim holder, assignment, master task, source, due date or overdue, when created or last updated, whether a prerequisite is holding it back, and text in the title or description; sort by priority, age, last update or due date. Listings return a compact set of fields by default (title, status, queue, priority, due date, assignment, blocking, master task) and give descriptions, payloads or the progress log only when asked, so they stay small enough for an agent to read</li><li>A Tasks tab on each member&#039;s own BuddyPress profile, for people who are given tasks but have no staff access: it lists the open tasks assigned to them or asked for by them, each linking to the task&#039;s own page, where they can see its timeline, add notes, mark their tasks done, and accept or send back tasks they asked for, without going into wp-admin</li><li>Dashboard widget and admin list-table columns for at-a-glance workflow status and subtask progress</li></ul><h2 class=\"wp-block-heading\">Install &amp; setup</h2><p class=\"wp-block-paragraph\">Network-activate the plugin (requires WordPress 7.1 and LH Content Converter). Tasks are created via the MCP abilities or programmatically via <code>LH_Tasks_task_actions_class::create_task()</code>.</p><h2 class=\"wp-block-heading\">Contents</h2><ul class=\"lh_portfolio-doc-toc\"><li><a href=\"https://lhero.org/portfolio/lh-tasks/follow-ups-for-assigned-tasks/\">Follow-ups for assigned tasks</a></li><li><a href=\"https://lhero.org/portfolio/lh-tasks/review-step-for-delegated-tasks/\">Review step for delegated tasks</a></li><li><a href=\"https://lhero.org/portfolio/lh-tasks/master-tasks-and-subtasks/\">Master tasks and subtasks</a></li><li><a href=\"https://lhero.org/portfolio/lh-tasks/staff-controls-in-the-ui/\">Staff controls in the UI</a></li><li><a href=\"https://lhero.org/portfolio/lh-tasks/admin-interfaces/\">Admin interfaces</a></li><li><a href=\"https://lhero.org/portfolio/lh-tasks/database-schema/\">Database schema</a></li><li><a href=\"https://lhero.org/portfolio/lh-tasks/hooks-and-cron/\">Hooks and cron</a></li><li><a href=\"https://lhero.org/portfolio/lh-tasks/mcp-abilities/\">MCP abilities</a></li><li><a href=\"https://lhero.org/portfolio/lh-tasks/ability-notes/\">Ability notes</a></li><li><a href=\"https://lhero.org/portfolio/lh-tasks/task-context-on-write-abilities/\">Task context on write abilities</a></li><li><a href=\"https://lhero.org/portfolio/lh-tasks/architecture-notes/\">Architecture notes</a></li><li><a href=\"https://lhero.org/portfolio/lh-tasks/changelog/\">Changelog</a></li></ul>"^^rdf:XMLLiteral ;
  sioc:content "Type: PluginLH Task Queue is a single work queue for human and AI agent tasks, with atomic claiming, dependency tracking, and MCP abilities. Tasks live as a dedicated post type; workflow state (New, Claimed, In Progress, Pending, Awaiting review, Failed, Resolved, Closed, Cancelled, Deferred) is tracked in a companion status table rather than native WordPress post_status, so an atomic claim/complete/fail/reassign lifecycle can run safely under concurrent access from multiple human and agent sessions.Key featuresAtomic task claiming, highest priority first and then oldest (or one specific task), optionally narrowed to a queue and task type, with claim-token verification so concurrent sessions can&#039;t double-claim the same taskDependency tracking via blocked_by: a task waiting on an unfinished prerequisite is never handed out, a claim that gets nothing says why, and if a prerequisite is cancelled or trashed the tasks waiting on it go to Pending for a person to checkA review step for delegated work: when someone other than the person who asked marks a task done, it waits as Awaiting review until the person who asked (or staff) accepts it or sends it back with a note, and each side is told by notification and email. Tasks you give yourself, and agent work, close straight awayMaster tasks with subtasks, one level deep: the master&#039;s page is a checklist of its subtasks with owners, due dates, days left or overdue and progress such as 3 of 5 done, and the master resolves on its own when every subtask is finished (or goes to Pending if one fails)Queue/lane and task-type taxonomies for routingStale-claim sweep every five minutes (on Action Scheduler where it is available, otherwise WP-Cron) to recover tasks left claimed by a crashed or disconnected agent, with a renew-claim heartbeat so a still-live long-running claim can stay ahead of the sweepTask context on every write ability, on every site: any ability that changes something accepts an optional task_id and claim_token. The call is refused if the claim has been lost, a successful call keeps the claim alive up to a maximum lease (4 hours by default), and each call is counted on the taskFull MCP ability surface: create, update, add-note, claim-next, complete, complete-assigned-task, review-task, fail, reassign, renew-claim, edit (staff override), get, list. Tasks keep revisions, so an overwritten title or description can be recoveredTask listing that finds any task: filter by one or several statuses or a status group, priority, queue, task type, claim holder, assignment, master task, source, due date or overdue, when created or last updated, whether a prerequisite is holding it back, and text in the title or description; sort by priority, age, last update or due date. Listings return a compact set of fields by default (title, status, queue, priority, due date, assignment, blocking, master task) and give descriptions, payloads or the progress log only when asked, so they stay small enough for an agent to readA Tasks tab on each member&#039;s own BuddyPress profile, for people who are given tasks but have no staff access: it lists the open tasks assigned to them or asked for by them, each linking to the task&#039;s own page, where they can see its timeline, add notes, mark their tasks done, and accept or send back tasks they asked for, without going into wp-adminDashboard widget and admin list-table columns for at-a-glance workflow status and subtask progressInstall &amp; setupNetwork-activate the plugin (requires WordPress 7.1 and LH Content Converter). Tasks are created via the MCP abilities or programmatically via LH_Tasks_task_actions_class::create_task().ContentsFollow-ups for assigned tasksReview step for delegated tasksMaster tasks and subtasksStaff controls in the UIAdmin interfacesDatabase schemaHooks and cronMCP abilitiesAbility notesTask context on write abilitiesArchitecture notesChangelog" ;
  sioc:topic <https://lhero.org/lh_portfolio-type/plugin/>, <https://lhero.org/?taxonomy=lh_portfolio-tags&term=task-queue>, <https://lhero.org/?taxonomy=lh_portfolio-tags&term=ai-agents>, <https://lhero.org/?taxonomy=lh_portfolio-tags&term=background-jobs>, <https://lhero.org/?taxonomy=lh_portfolio-tags&term=claiming>, <https://lhero.org/?taxonomy=lh_portfolio-tags&term=workflow>, <https://lhero.org/?taxonomy=author&term=cap-1> .

<https://lhero.org/author/1/#account> rdfs:seeAlso <https://lhero.org/author/1/?feed=lhrdf&format=turtle> .
<https://lhero.org/lh_portfolio-type/plugin/> rdfs:seeAlso <https://lhero.org/lh_portfolio-type/plugin/?feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=lh_portfolio-tags&term=task-queue> rdfs:seeAlso <https://lhero.org/?taxonomy=lh_portfolio-tags&term=task-queue&feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=lh_portfolio-tags&term=ai-agents> rdfs:seeAlso <https://lhero.org/?taxonomy=lh_portfolio-tags&term=ai-agents&feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=lh_portfolio-tags&term=background-jobs> rdfs:seeAlso <https://lhero.org/?taxonomy=lh_portfolio-tags&term=background-jobs&feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=lh_portfolio-tags&term=claiming> rdfs:seeAlso <https://lhero.org/?taxonomy=lh_portfolio-tags&term=claiming&feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=lh_portfolio-tags&term=workflow> rdfs:seeAlso <https://lhero.org/?taxonomy=lh_portfolio-tags&term=workflow&feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=author&term=cap-1> rdfs:seeAlso <https://lhero.org/?taxonomy=author&term=cap-1&feed=lhrdf&format=turtle> .
