agentleFS
kl-autonomouskl-autonomous/agent-team-skills/skills/owner-desk/SKILL.md

owner-desk

Skill2 starsChanged 9 days agoMITView on GitHub

Give the human owner a live board, a Claude artifact with its own small database, for everything only they can decide or do. Each decision or task gets its own card, with a recommended answer, answer buttons, steps to tick, text to copy and files; the owner answers from their phone whenever they like, the answer wakes the agent through a comment, and the agent acts and archives the item. Use this whenever an agent has several open questions or owner-only tasks (approvals, uploads, sign-ins, purchases, account changes), when the owner says questions get lost or buried in chat, when they ask for a dashboard, inbox, to-do board, decision board or "desk" for what's waiting on them, or when a chief-of-staff or manager session needs a home for its "waiting for the owner" list.

The file

Show its rules and text

We split this skill into the rules it gives an agent

14 rules. About 0 are common, 10 are distinctive, and 4 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈10

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    A main-loop session: Only a main-loop session can hold a watch.

    line 19
  2. Very specific:

    Check it once: ArtifactData list on the collection items.

    line 48
  3. Distinctive:

    Write the link into a file in the project (the status page, or the project's notes), so a fresh session can find it.

    line 50
  4. Distinctive:

    On a "Send all" comment: read every comment thread on the cards it names first (an earlier thread can change what an answer means), re-read …

    line 60
  5. Distinctive:

    read the desk at the start of every turn.

    line 67
  6. Distinctive:

    ask the owner to say "desk" in chat after answering.

    line 68
  7. Very specific:

    Add new items with ArtifactData.

    line 105
  8. Distinctive:

    If you also work from a chat list of open questions (as the chief of staff does), keep both the same: the same number, the same words.

    line 107
  9. Distinctive:

    Write each item so it stands on its own: what is being decided, what changes either way, and what you recommend.

    line 108
  10. Very specific:

    To attach a file: read the whole file first, then upload it with Artifact (url of the board, asset: true) and link it as /_blob/<asset id>.

    line 110
  11. Distinctive:

    When a comment wakes you, or at the start of a turn:

    line 117
  12. Distinctive:

    If the item isn't saved as answered, but the comment carries an answer, the comment is the owner's newer word.

    line 122
  13. Very specific:

    If another session published the board, read it first (Artifact read) and build on what comes back.

    line 171
  14. Distinctive:

    Keep anything the owner marks (read, seen, ticked) in the database, never in browser storage: it has to hold on every device.

    line 173

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Owner desk

Questions in chat get buried, and the owner has to answer when the agent asks, not when they have time. The desk moves them out of the chat into a board: a Decisions tab and a Tasks tab with every open item, a yellow Urgent tab only when something can't wait, a Decided tab for answered ones, a Later tab for what can wait, and an Archive for what's done. On a phone or iPad, the owner swipes sideways to move between tabs. The owner answers there; you read the answers, act, and archive.

What this needs

  • Claude artifacts with the db and comments capabilities, on claude.ai or in the Claude desktop app. Add assets if items will carry attached files, or if the owner should be able to attach screenshots to their questions.
  • Tools:

    • Artifact, to publish the board and upload files;
    • ArtifactData, to write and read items;
    • ArtifactComments, to watch the board and answer the comments that wake you.

    Load them with ToolSearch when they're deferred.

  • A main-loop session. Only a main-loop session can hold a watch; a subagent can't.

Without these, say so and keep the questions in chat as a numbered list. Don't pretend there's a board.

Who writes to it

One session only:

  • the chief of staff, if there is one (see the chief-of-staff skill);
  • otherwise, the session that works with the owner.

Two writers would number items twice and archive each other's work.

Create the board

  1. Fill in the template, assets/desk.html. It has three placeholders:

    • {{TITLE}}: the board's name, two to four words, such as "Recipe App Desk";
    • {{EYEBROW}}: a small line above the title, such as "Recipe app · from the chief of staff";
    • {{AGENT}}: who reads the answers, as it reads mid-sentence: "the chief of staff", or "Claude". Plain words only, with no quotes.

    For example:

    sed -e 's/{{TITLE}}/Recipe App Desk/g' -e 's/{{EYEBROW}}/Recipe app · from the chief of staff/g' -e 's/{{AGENT}}/the chief of staff/g' <skill>/assets/desk.html > desk.html
  2. Publish it with the Artifact tool:

    • capabilities: {"db": {}, "user": {}, "comments": {}}, plus "assets": {} if items will carry files;
    • icon: "inbox";
    • a one-line description.

    Publishing also starts this session watching the board.

  3. Check it once: ArtifactData list on the collection items. It's empty, and the page says "Nothing needs you."
  4. Give the owner the link, and say the board is private to them.
  5. Write the link into a file in the project (the status page, or the project's notes), so a fresh session can find it.

Opened outside Claude, in a plain browser, the page shows made-up example items with a note saying so. That's for previews and screenshots; it never writes anything.

Be woken by answers

A database write doesn't wake you; a comment sent to Claude does.

  • Answers wait for "Send all". An answer, or a task marked done, on an ordinary item is saved with wakePending: true and a short wakeLine ("Yes (+ note)", "CHANGED to No"), and wakes nothing yet. A bar at the bottom of the page lists them; when the owner presses it, one comment comes, anchored on the desk's title, with a line per answer ("№ 12 · Open the beta this Friday? → Yes (+ note)"). The page then clears wakePending. Ten answers wake you once, not ten times.
  • Urgent items and questions still go at once, as a short comment in the item's own thread, for example "№ 16 · Stop build 1.1? Answer: Stop it now".
  • On a "Send all" comment: read every comment thread on the cards it names first (an earlier thread can change what an answer means), re-read each card, act on all of them in that one turn, and reply once.
  • That comment wakes the session watching the board.
  • Publishing starts the watch, but it's only a watch once ArtifactComments watch (with no url) lists the board as connected, with auto-replies armed.
  • A fresh session must watch again, with ArtifactComments watch and the board's url. Auto-replies arm only when the owner gave that link in their own message, so the link goes in the restart prompt the owner pastes.
  • The page tells the owner which case they're in: "…is told the moment you answer", or "Saved here; … reads it at its next check".
  • If comments can't reach you (they're off, or no session is watching), fall back on these:
    • read the desk at the start of every turn;
    • ask the owner to say "desk" in chat after answering;
    • offer a scheduled check, only if the owner wants one.

An item

Each item is one document in the collection items. Its document id is its handle: use q<number> for decisions and t-<word> for tasks. Use plain words throughout, since the owner may read it on a phone.

FieldWritten byWhat it holds
kindyou"decision", "task", or "beta" for feedback from a tester (see below)
statusboth"open"; the page sets "answered"; you set "archived"
lateryoutrue parks it on the Later tab
urgentyoutrue puts it on a yellow Urgent tab and at the top of the Overview. Only for what can't wait: a deadline today, or something broken for users
numyoua running number, the same one you use in chat; never reused
titleyouthe question itself, answerable with the choices, or the task as an action
body, bulletsyoushort paragraphs and points: why it matters, what it affects. Always lists, even for one paragraph: the page mends a plain text, but an older copy of it blanked a whole tab
recommendationyouyour answer first, then the reason, in one or two sentences
choicesyoutwo to four answers; defaults to Yes / No
steps, stepsDoneyou; pagea task's steps, and the ones ticked (indexes)
copiesyou[{label, text}]: text the owner will paste somewhere
linksyou[{label, url, note}]: guides, pages, attached files
imagesyou[{url, caption}]: screenshots shown on the card as small thumbnails; a tap opens them full size
fromyouwhich session asked
priorityyou1 first; sorts the open items
createdyouwhen you posted it (ISO time)
answerpage{choice, note, at}
askspage; you[{q, at, via, images, a, aAt}]: the owner's questions about the item; you fill in a and aAt. images lists screenshots the owner attached, as /_blob/<id>: fetch each with Artifact read (url the board, path the bare id, one per call)
wakePending, wakeLine, wakeSentAtpagean answer saved but not sent yet, its one-line summary, and when "Send all" sent it; leave them alone
threadpagethe comment thread the page uses for this item; leave it alone
outcome, archivedyouwhat happened, in one line; when you archived it

Tester feedback (kind: "beta") gets its own tab and never counts as something that needs the owner, whatever its flags; it stays there when answered, until you archive it. It's a decision with these extra fields: tester (a name or a label; real names only on a private desk, never in a repo or an example), build, date, said (their words, as they wrote them) and testerQuestions (questions the owner can send back; the owner replies to testers themselves). body holds how the session that read it understands it, and from names that session. Attach the tester's screenshots as files in links.

assets/example-items.json holds eight made-up items, as ArtifactData batch writes. Use them to try a board, never on the owner's real one.

Post items

  • Add new items with ArtifactData. Use set for a new document, and batch for more than two. Never republish the page to change items.
  • Then say in chat what you added, with a link to each item: <board url>#<doc id> opens its tab and scrolls to it.
  • If you also work from a chat list of open questions (as the chief of staff does), keep both the same: the same number, the same words.
  • Write each item so it stands on its own: what is being decided, what changes either way, and what you recommend.
  • A task lists the exact steps, the text to paste in copies, and the guide in links.
  • To attach a file: read the whole file first, then upload it with Artifact (url of the board, asset: true) and link it as /_blob/<asset id>.
  • To show a screenshot on the card: upload it the same way and put it in images with a one-line caption, rather than in links.
  • A test item on a live board can get answered. Title it "TEST ITEM", and delete it pinned to the version you read; if the version moved, read it again first.
  • Never put passwords, keys or private records in an item. A task that needs a secret says where to type it, never what it is.

Read, act, archive

When a comment wakes you, or at the start of a turn:

  1. ArtifactData query on items with where: [["status", "==", "answered"]]. Read each item's answer and any new asks. An item with wakePending: true is answered but not sent yet: act on it like the others.
  2. Act on the answer. With a chief of staff, relay the owner's choice and note verbatim to the session that asked.
    • The comment and the item normally agree.
    • If the item isn't saved as answered, but the comment carries an answer, the comment is the owner's newer word. Write it into the item yourself.
  3. Archive the item: update it with status: "archived", a one-line outcome ("The builder moved the beta to Friday"), and archived (the time). Pin every write with if_version, so an answer the owner changes meanwhile isn't overwritten.
  4. Answer each open entry in asks on the same item. Send the whole asks array back, with a and aAt filled in, pinned with if_version.
  5. Reply in the comment thread with one line ("Got it: moving the beta to Friday"), then resolve the thread (ArtifactComments reply, then resolve).
  • A batch write fails whole if one card moved (the owner answered again, or an automatic reply bumped its version). Query again and resend, rather than writing the rest one by one.
  • Read every automatic reply in the desk's threads against the files, and correct it in its thread. On a real desk they have said work was "going ahead" when nothing was being built, misread a card, and invented a mock-up nobody made.

Park an item with later: true, and bring it back with later: false. A decided item can stay on Later until it's time to act on it. Archive instead of deleting: the Archive is the record of what was decided. Delete only on the owner's word.

Status and Roadmap (optional)

Two more tabs show the owner where the project stands, between the Overview and the items. Each appears once you write its document to the collection board, and updates live. Write each with ArtifactData (set the first time, then update pinned with if_version). assets/example-board.json holds a made-up pair.

board/status: where every session stands. Update it each time you check on the team; a chief of staff writes it whenever it updates its status page.

FieldWhat it holds
updatedwhen you last checked (ISO time); the page shows how long ago
oneLinewhere the project stands, in one sentence
sessions[{name, state, doing, last, restart}], a row per session. state is a word or two ("Working", "Waiting", "Stopped at a limit"), and the page colours it. restart starts with "Yes" when it's a good moment to restart that session
donewhat finished since the last update, a line each
next[{who, what}]: the next steps, the owner's too (who: "you")

The Status tab counts the owner's urgent and open items by itself; don't repeat them in oneLine.

board/roadmap: the plan, stage by stage. Update it when a stage or one of its items moves.

FieldWhat it holds
updatedwhen you last changed it
headlinewhere the project is in its plan, in one sentence
stages[{id, name, state, when, summary, items}], in order. state is done, now, next or later; items are [{text, state}] with done, now or next. The stage marked now opens at the top

Updates (optional)

An Updates tab lists what changed, one entry per pull request, in the collection updates. Add an entry only after the reviewer passed it and it merged, never when the builder finishes. The tab shows how many are new. The owner marks each one read (saved in the database, so it holds on every device), and read entries move to an "Updates archive" tab at the far right. assets/example-updates.json holds three made-up entries.

FieldWritten byWhat it holds
pr, titleyouthe pull request's number and a plain title
merged, reviewedyouwhen it merged (ISO time), and the reviewer's verdict ("PASS")
changesyouwhat changed, a line each, in words the owner uses
summary, build, note, urlyouoptional: one sentence, the build it ships in, a remark, a link
read, readAtpageset when the owner marks it read; leave them alone

Change the page

  • Republish the page only to change the page itself. Pass the same capabilities, or omit capabilities to keep them.
  • If another session published the board, read it first (Artifact read) and build on what comes back.
  • The items live in the database, so they survive a republish.
  • Keep anything the owner marks (read, seen, ticked) in the database, never in browser storage: it has to hold on every device.
  • A collection other than items redraws the page only on its own tab; elsewhere, redraw just the tab rail, or a live write wipes a half-typed answer.
  • To test without signing in, serve a local copy from 127.0.0.1 with a stand-in window.claude.use("db") that supports collection().onSnapshot and doc().update. Load a copy of the real items, and compare every tab before and after the change.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.