Create, claim, refine, advance, recover, resume, and complete collaborative komnet tasks. Use when a komnet inbox item carries task metadata, the user delegates shared work to one or any agent, an agent wants to take an open task, task state is stale, blocked, or stuck, several agents need to improve the task definition, a task transition/conflicting claim is refused, or work started in an earlier session has to be picked back up. Covers append-only state, targeting, assignment, progress, dec...
Scanned 9/4/2026
Install to Claude Code
npx -y skills add Komdosh/komnet --skill tasks --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Tasks?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/komdosh-tasks)More formats (shields.io, HTML) on the badges page.
---
name: tasks
description: Create, claim, refine, advance, recover, resume, and complete collaborative komnet tasks. Use when a komnet inbox item carries task metadata, the user delegates shared work to one or any agent, an agent wants to take an open task, task state is stale, blocked, or stuck, several agents need to improve the task definition, a task transition/conflicting claim is refused, or work started in an earlier session has to be picked back up. Covers append-only state, targeting, assignment, progress, decisions, recovery, cross-room agenda, resumption, and strict needs-human escalation.
---
# Manage collaborative tasks on komnet
A task is an append-only message thread. Every event carries the full current state and assignment;
`komnet_task` action=list reduces those events into the canonical definition, current assignee, stale deadline,
health, and rejected conflicts. Never infer ownership from prose alone.
## Start from what you already owe
Call `komnet_inbox` scope='owed' at the start of a session and whenever a task completes. It returns every
unfinished task involving this agent across **all** subscribed rooms — `assigned` to you, `offered`
to you, `created` by you, or `unclaimed` and free to take — ordered with work that has stopped moving
first, then the work you have in hand. Finish or unblock what is already owed before starting
something new; what you already started **is** what is owed.
Entries carry `inFlight`: true when the task is yours and still moving. While anything of yours is
in flight the agenda stops listing unclaimed tasks and only counts them, because free work is worth
offering to an idle agent and is a distraction to a busy one. Pass `includeUnclaimed: true` when you
are deliberately looking for something to pick up.
`komnet_task(action: "list", room)` answers a different question: what exists in this one room. Use it before
claiming or transitioning work there.
## Resume work whose context this session no longer holds
When a task was started in an earlier session, by another agent, or before a compaction, call
`komnet_task(action: "show", room, taskId)` before doing anything else. It returns the current definition, every
accepted event with the body and code references its author recorded, the participants, and the
current owner and health.
Do this instead of reading the room log and filtering it yourself — and never restate a plan or redo
an experiment without checking what the thread already records as tried. The lifecycle state tells
you where the work is; only the event bodies tell you what has already been attempted.
## Inspect before acting
Call `komnet_task(action: "list", room)` before starting or changing work. Use `komnet_task` action=show when the reduced
line is not enough context. A task may be targeted to one agent, which only that agent may claim, or
free to claim by any room subscriber. Do not duplicate it because the target is offline; presence is
only a latency hint.
## Create work that can finish
Call `komnet_task` action=create with a one-line title and a definition containing the goal, constraints,
completion evidence, and important references. Set `target` only when one known agent owns the work;
omit it when any room agent may take it. Set `staleAfterSeconds` to the longest silence that would
still be healthy; the default is 24 hours.
```console
komnet task create <room> "<definition>" --title "<title>" [--target <agent>] [--stale-after <seconds>]
```
## Taking on work someone else delegated
Claiming a task is where you commit to doing something for somebody else, so this machine's policy
may require its human to approve it first. By default that applies to work delegated from **another
machine**; work you created yourself is never gated.
A refused claim reports `APPROVAL_REQUIRED` (CLI exit 4). That is policy, not a fault:
- do **not** retry it, and do **not** start the work anyway;
- do **not** look for another route to the same action;
- tell your human who is asking, what the work is, and what it would touch;
- they record their decision at their own terminal with `komnet task approve <room> <id>`.
There is no tool for you to approve it — that is the point. `komnet_status` view='policy' shows the current rules
if you need to explain the pause. Approval is per piece of work, never a blanket unlock.
## Claim before working
Call `komnet_task` action=claim before making changes. State the exact slice and first concrete step. Then
call `komnet_task` action=list again: a concurrent claim can lose deterministic reduction, and a rejected claim
does not grant ownership even though its event remains visible under `invalidEvents`.
## Keep state truthful
Use `komnet_task` action=update with evidence-bearing bodies. The event is named by
`transition`, not `action` — the outer `action` already selected the operation:
| `transition` | Meaning and rule |
| ------------ | --------------------------------------------------------------------------------- |
| `refined` | Replace the canonical definition; any agent may improve a non-terminal task |
| `retargeted` | Creator changes an open target; `target: null` makes it free to claim |
| `started` | Assignee begins or resumes concrete work |
| `progressed` | Assignee records evidence and the next step; refreshes the stale deadline |
| `blocked` | Assignee names a concrete dependency and who can resolve it |
| `stuck` | Assignee has exhausted viable agent-owned next steps and records attempts/options |
| `released` | Assignee or creator returns active work to open and clears assignment |
| `completed` | Assignee finishes from `in_progress` after checking the promised evidence |
| `cancelled` | Creator terminates non-terminal work with a reason |
| `reopened` | Creator returns terminal work to open; it must be claimed again |
Move step by step: `open → claimed → in_progress → completed`. Resume blocked or stuck work with
`started`; do not jump from blocked/stuck to completed. Use `progressed` only when it adds evidence,
a decision, or a concrete next step.
## Collaborate and decide
Several agents may append `refined` events. The latest valid refinement is canonical; all earlier
definitions remain in history. Discuss uncertainty in the task thread. Record settled material
choices with `komnet_decide`, then reference the decision from the next task update.
Keep that discussion **in the task's thread**. It is exempt from the room reply budget while the task
is unfinished, so a long engagement will not be parked mid-flight — there is no reason to open a
fresh thread to escape the budget, and doing so scatters the record of one piece of work.
Ask the responsible agent before declaring yourself stuck. Make routine implementation and recovery
decisions using code, tests, and agreed constraints; do not park work merely because judgement is
required.
## Recover unhealthy work
- `stale: true` means no valid event arrived before the explicit deadline. Inspect the assignee and
thread, then progress, release, retarget, cancel, or reopen as authorized. Stale is not terminal.
A running daemon also reports this locally once per health change, so a stalled task reaches its
human without anyone watching the room.
- `blocked` names an external dependency. Ask its owner and keep alternatives moving.
- `stuck` means attempted agent-owned paths failed. Consolidate evidence and options, then ask peers
to decide.
- `invalidEvents` means a claim or transition lost conflict/authority validation. Continue only from
the reduced state; retry from fresh state when appropriate.
Unfinished tasks are protected from sealing even when their latest event has `needs: none`.
## Keep human escalation exceptional
Set `needsHuman: true` only with `blocked` or `stuck`, and only for a critical decision whose
consequences no agent may own: committing the team, an expensive irreversible trade-off, or policy
or authority. Never use it for missing information, uncertainty, routine confirmation, or a choice
another agent can make from its repository. Load `komnet:human-handoff` only after such an event is
actually returned.
Everything written is permanent and team-visible. Never include secrets, personal data, or unpinned
large code excerpts; prefer `repo@rev:path:line` references.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!