agent-workboard
Skill4 starsChanged 4 days agoApache-2.0View on GitHub
Plan and execute agent work in Soulsteads Agent Workboard using its JSON CLI or MCP tool. Use for epics, stories, bugs, dependencies, assignments, leased claims and issue handoffs in a configured workboard.
- Reads credentials
2 other projects use a version of this.
Adopted by
Most recently taken up by
- sodejm/copilot-operation-plugin-for-securitytheir own version, first seen Oct 23, 2026
- sodejm/portable-agent-repository-kittheir own version, first seen Sep 1, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- sodejm/copilot-operation-plugin-for-security★ 2same name
- sodejm/portable-agent-repository-kit★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
12 rules. About 0 are common, 2 are distinctive, and 10 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
10
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 8
Use workboard on PATH with the configured WORKBOARD_DB (absolute path) and WORKBOARD_ACTOR (this worker's stable ID).
- Distinctive: line 11
Do not silently create an unrelated board if the intended DB is unknown.
- Very specific: line 20
If using MCP, send the same JSON command object directly to workboard_execute.
- Distinctive: line 23
Run one command per invocation.
- Very specific: line 37
Use board with a project key and issue_get with an issue key to read current context.
- Very specific: line 44
Use link_add with source, target and kind: source blocks target.
- Very specific: line 49
Use issue_assign to reserve work for an active agent, or null to unassign.
- Very specific: line 61
Read the board and issue context.
- Very specific: line 75
Add evidence or artifact references with comment_add (key, body).
- Very specific: line 82
Only the owning actor and unexpired token can renew, edit or release a lease.
- Very specific: line 83
After a lost response, retry a command you sent with an idempotency key (CLI --idempotency-key, HTTP Idempotency-Key, MCP idempotency_key): …
- Very specific: line 91
Use issue_release with key/token to return interrupted work to ready and clear assignment.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Agent Workboard
Use workboard on PATH with the configured WORKBOARD_DB (absolute path) and
WORKBOARD_ACTOR (this worker's stable ID). All agents on a board share the DB
and use distinct actor IDs. The CLI and MCP operate on the same persisted state.
Do not silently create an unrelated board if the intended DB is unknown.
Discover and bootstrap
workboard schemadescribes every operation, field and enum.workboard run '{"op":"project_list"}'discovers projects.workboard run '{"op":"agent_list"}'checks registered identities.- Register the configured actor if missing with
agent_register(id,name, optionalcapabilities). Registration of existing IDs conflicts. - If using MCP, send the same JSON command object directly to
workboard_execute. Its input schema is the CLI schema.
Run one command per invocation. Large descriptions can use stdin:
workboard run <<'JSON'
{"op":"issue_create","project":"AG","kind":"bug","title":"Fix worker restart","description":"Describe reproduction and expected behavior","acceptance_criteria":["Restart preserves progress"],"priority":"high"}
JSONCLI responses have ok and result, or error with a nonzero exit status.
MCP returns JSON text plus structuredContent.result; check isError and
structuredContent.error on failure. Unknown fields are rejected.
Plan work
Use board with a project key and issue_get with an issue key to read current
context. issue_get includes the issue, links, blockers and direct children.
Kinds are epic, story, task, bug, subtask, spike. Hierarchy is
epic -> story/task/bug/spike -> subtask; subtasks need a parent. Parents stay
in the same project. Write concrete acceptance criteria and attach relevant
repo/artifact references in metadata or comments.
Use link_add with source, target and kind: source blocks target;
relates_to is symmetric; duplicates is informational. Blocking links plus
hierarchy must remain acyclic. Canceled blockers count as resolved. Blockers
apply directly, not through ancestor inheritance.
Use issue_assign to reserve work for an active agent, or null to unassign.
Assignment is a coordinator override that revokes a lease, so do not use it
merely to refresh your own claim. Use labels, priorities and sprints to organize
work. To find an issue by what it says, use issue_search with a query such as
lease timeout state:ready -flaky (words, "phrases", prefix*, OR, -exclusions, and
state: kind: priority: assignee: label: is:actionable filters); it ranks the best
match first and returns a snippet. filter_save keeps a search under a name for others.
issue_list supports a filter for project/kind/state/assignee/parent/sprint/
label/text/actionable and offset/limit. epic_progress counts all descendants.
Execute safely
- Read the board and issue context. Move executable backlog work to
readyusingissue_transitionwith the currentexpected_revision. issue_claimwithprojectand optionallykeyatomically selects ready non-epic work assigned to nobody or yourself. It returnsclaimed: nullif none is eligible. Do not treat null as an error or busy-loop.- Retain
claimed.lease.token, expiry and revision. The default lease is 900 seconds;lease_secondsaccepts 1–86400. Heartbeat before expiry withissue_heartbeat(key,lease_token, optionallease_seconds). Heartbeats return a new issue revision. - Implement and validate the acceptance criteria.
issue_updateandissue_transitionrequire the latestexpected_revisionand, while leased,lease_token. Use the revision returned by each mutation or fetch it again. Arrays/metadata updates replace values; nullable fields are removed withclear_parent,clear_sprint,clear_estimaterather than null. - Add evidence or artifact references with
comment_add(key,body). Transitionin_progress -> in_review -> donewith revision/token. A done transition clears the lease. Finish descendants before closing parents.
On a revision conflict, reread and reconcile before editing. On an expired or
revoked lease, stop submitting that work: a fresh revision does not restore
ownership. The next project claim recovers expired work and issues a new token.
Only the owning actor and unexpired token can renew, edit or release a lease.
After a lost response, retry a command you sent with an idempotency key (CLI
--idempotency-key, HTTP Idempotency-Key, MCP idempotency_key): a repeat returns the
original result marked replayed instead of applying twice. For a command sent without
one, inspect issue_get and events before retrying a mutation;
creation, comments and claims are not automatically deduplicated.
Block or hand off
Use issue_release with key/token to return interrupted work to ready and clear
assignment. To record a blocked condition, add a comment and transition to
blocked; this clears the lease but retains assignment. Unassign explicitly if
another agent should pick it up later. Use workflow for the complete transition
map. Reopen terminal work to backlog only after reopening ancestors, resolving
dependent-state conflicts and moving it out of any completed sprint.
For handoffs, use comments for context and events with optional issue key and
exclusive after event ID for incremental history. comment_list also accepts
after. Both default to 100 results, max 1000; advance using the last returned ID.
Issue-list offset pages are snapshots, not an incremental event feed.
This is a trusted local workspace: actor IDs attribute work, not authenticate it. Respect the caller's requested project and scope when coordinating other agents.
Assigned keys and remote access
An operator assigns a key to your registered agent using api_key_create. Keep
that credential private in WORKBOARD_API_KEY. Do not issue or revoke keys from
a worker session. With a local DB, the CLI and MCP use the key's agent identity
instead of WORKBOARD_ACTOR. A missing/invalid/revoked key fails authentication;
contact the board operator instead of switching to another agent's identity.
For a remote board, use WORKBOARD_URL and the assigned key with the HTTP API:
curl --fail-with-body --silent --show-error "$WORKBOARD_URL/api/commands" \
-H "Authorization: Bearer $WORKBOARD_API_KEY" \
-H 'Content-Type: application/json' \
--data-binary @- <<'JSON'
{"op":"issue_claim","project":"AG","lease_seconds":900}
JSONThe HTTP command result is the object itself, without the CLI's ok/result
wrapper. Errors return error with an HTTP failure status. Use the same revision
and lease-token rules. Keys bind the actor; do not include an actor field.
Authenticate every request using the header, never a URL query parameter. Use
HTTPS beyond localhost. Never put the key in issue text, comments or logs.
The web dashboard follows work through read-only /api views. Those views redact
lease tokens; use command responses to manage your own claims. Other agents can
see the board; assignments reserve work and claims coordinate execution.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

