work
Skill0 starsChanged 29 days agoMITView on GitHub
Use when the user starts or finishes a piece of work and wants the Harvest timer, the Jira ticket and their ⚡ Work Notion row moved together behind one confirmation. Triggers include "/work start", "/work stop", "I'm starting on KEY", "picking up KEY", "clocking on", "done with KEY for now", "stopping for the day", "wrapping up", "clocking off". A timer on its own is harvest; a Notion row on its own is work-log.
42 other projects use a version of this.
Adopted by
Most recently taken up by
- Firzus/agent-skillstheir own version, first seen Nov 8, 2026
- isanchez-aguilar/relayrace-aitheir own version, first seen Nov 8, 2026
- Mharbulous/probanda-devtheir own version, first seen Nov 8, 2026
- Jasenpan1987/multi-codetheir own version, first seen Nov 8, 2026
- withpiper/pipekittheir own version, first seen Nov 8, 2026
- cekrauseee/harnesstheir own version, first seen Nov 1, 2026
Used with
Projects with it also use authoring, done and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
automagik-devSkillauthoring
Write or revise a Genie skill so it survives the shipped contract — frontmatter, house size, starter card, and runtime-neutral voice.
Also in 3 projects that use this
robzolkosSkilldone
Reset the working directory for the next task by ensuring no uncommitted changes exist, then switching to the main branch and pulling latest.
Also in 3 projects that use this
Google CloudSkillfix
Plan a remediation strategy after a test failure.
Also in 4 projects that use this
AlexPEClubSkillrefine
Always use when the user wants to discuss an exsiting feature or specification. Open an existing feature spec to improve, extend, or fundamentally challenge it. Pass the feature ID as argument (e.g. /refine PROJ-2).
Also in 3 projects that use this
MicrosoftSkillmerge
Merge changes from the topic branch to the merge base branch. Use when the user wants to merge their session's work back to the base branch.
Also in 3 projects that use this
Microsoft AzureSkilltest
Also in 6 projects that use this
Other versions42 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 42
- cwinvestments/memstack★ 425same name
- automagik-dev/genie★ 351same name
- namastexlabs/automagik-genie★ 351same name
- ohad6k/emulo★ 292same name
- first-fluke/fullstack-starter★ 226same name
- OutThisLife/brooklyn-skills★ 207same name
- guardana/guardana★ 203same name
- Towow-ai/Flowness★ 107same name
- assaio/assaio★ 63same name
- HubSpot/agent-cli-skills★ 28same name
32 more not listed
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
Files
Work
The two moments a task touches all three systems. start opens it: timer running, Jira In Progress, Work row Doing, the brief on screen. stop closes the session on it: timer stopped, Jira moved to where the code says it is, Work row and Actions logged. Everything in between, a forgotten hour or a mid-day note, stays with harvest and work-log.
Read first: ~/.claude/skills/harvest/references/ticket.md (finding and fetching the ticket), ~/.claude/skills/harvest/references/project-ladder.md (Harvest project and task), and the Work database, Actions database and Notion mechanics sections of ~/.claude/skills/work-sync/references/notion.md. stop also reads the Code-state ladder table at the end of ~/.claude/skills/work-sync/references/sources.md.
Hard rules
- Interactive only. The user is at the keyboard; this never runs from launchd. A subagent may run it read-only to test it, printing every write and question instead of making or asking them.
- This is the one place in these skills that writes to Jira, and only
transitionJiraIssueand the assignee viaeditJiraIssue, on the ticket being started or stopped. Comments, other fields and worklogs stay untouched. Jira calls use themcp__atlassian__*tools with cloudIdhttps://{{ATLASSIAN_SITE}}.atlassian.net. - Harvest writes are
start_timerandstop_timer; existing entries keep their hours and notes, andget_account_settingsis re-read only when a write is rejected. Notion writes follow work-log's rules: neverLast synced;Code state,PR LinkandDuebelong to the sync. - One block, then the writes. Every write appears as
System old → newbefore it happens; the Harvest line's new value is the harvest skill's statement<client> / <project> [<code>] · <task> · "<notes>". Astoptransition in Jira is always confirmed; the rest go on thestartgate below. - Partial failure is reported per system: what was written, what was not, and the command that finishes it by hand (
/harvest start KEY,/work-log KEY doing). - Slack is read at
startonly, never written. When the Slack tools are absent, the Recent Slack section is left out and nothing else changes.
start
- Resolve. Key or free text per
ticket.md, then the fetch. Free text → Harvest only, plus the Work row when one's title matches; say that Jira is skipped. The review flag comes with the key. No review word in the argument →gh pr list --head "$(git branch --show-current)" --state open --json number,url,author; an open PR by someone other than the user makes it a review, and the block says so. - Gather, in parallel:
- Harvest: project and task per the ladder (a review takes Testing and the
- reviewing PRnotes suffix; the ladder's Task section has the rule);get_running_timer. - Jira:
getTransitionsForJiraIssue; status and assignee came with the fetch. - Notion: open rows for the key,
WHERE ("Status" != 'Done' OR "Status" IS NULL) AND ("Jira Code" = ? OR "Title" LIKE ?)on the Work data source; several share the key → keep the one whose title describes this work. - Slack:
slack_search_public_and_privatewithkeywords: ["<KEY>"],natural_language_query: "",sort: timestamp,limit: 5; read the thread of each hit from the last 30 days. Only with the user's standing consent to read private channels and DMs (recorded in their CLAUDE.md); without it, use the public search tool. Free text with no key → skip.
- Harvest: project and task per the ladder (a review takes Testing and the
- Decide the writes.
- Harvest: same key already running → "already running, Xh", no Harvest write. Another timer from today → it will be switched; its ticket's Jira and Work row stay as they are, because a switch is not a stop. A timer from an earlier day → stop here and show it; it needs fixing in Harvest by hand before anything starts.
- Jira: status already In Progress-like (name contains "progress") → no transition. Otherwise the transitions whose target status contains "progress": several to the same target → take the first and name the others; targets that differ, or none → ask with the list. Unassigned → assign to the user (
atlassianUserInfofor the account ID). Assigned to someone else → ask before taking it. - Jira on a review: the board's review status comes first. Status already review-like (name contains "review") → no transition. Otherwise a transition whose target status contains "review" (boards name it differently: Review, Dev review, Code Review) → take it; several → the first, name the others. No such transition → the "progress" rule above. Assigned to someone else → take it without asking; the implementer gets it back at
stop. - Notion: one row → Status Doing, whatever the sync last wrote; the user starting is the freshest statement of intent.
Sincetoday when Status changes andSinceis not already today. No row → create per work-log §4 with Status Doing. Several → ask which. On a review,Next step=You: review <repo>#<n>.
- Gate. Go without asking when the key came from the argument or branch, the project is
strong, the Jira transition is unambiguous, and the Notion match is one row or none. Anything else → oneAskUserQuestionwith a question per open item (project, transition, row, assignee), recommendation first, runners-up after. - Write in this order: Harvest, Jira, Notion. The timer first: time is the one thing that cannot be recovered.
- Report the block as written, then the brief: ticket summary and issue type, on a review the PR's number, author and review decision too, the whole description when it is under 40 lines, else its acceptance criteria section when it has one, else the first 15 non-blank lines; then the row's Notes and Next step as "where you left off"; then Recent Slack: up to five lines, newest first,
<day> <who>: <one-line gist> — <permalink>, with a question to the user that nobody answered marked unanswered. No hits → no section. The user chose a project the ladder did not recommend → append the row toharvest/references/learned.mdas the harvest skill does, keyed<KEY>/<repo>for a derived-client ticket.
Done when: a timer runs on the key, Jira and the Work row both say in progress (or the block says why not), and the brief is on screen.
stop
- Stop the clock first.
get_running_timer. Running →stop_timerat once and keep the hours; the discussion below is not billable. The timer's notes name the ticket: a key there beats the branch, and the argument beats both. Notes ending- reviewing PRmark the session a review; so does a review word in the argument. Nothing running → say so, resolve the key perticket.md, carry on with Jira and Notion. - Gather, in parallel:
- Jira: the fetch (status, assignee) and
getTransitionsForJiraIssue. - Code, from the working directory:
git status --porcelain(uncommitted),git log @{upstream}..HEAD --oneline(unpushed; no upstream → say so),git log --since="<timer_started_at>" --oneline(this session's commits), andgh pr list --head "$(git branch --show-current)" --state all --json number,url,isDraft,reviewDecision,mergedAt,baseRefName,reviewRequests,authorfor the branch's PR. Map to aCode staterung with the table insources.md; a merged PR needs the compare in that ladder before it counts as staging or production. - Notion: the row, as in
start.
- Jira: the fetch (status, assignee) and
Propose the Jira status from the code state. The user's words in the argument win over the table ("sent for review", "finished"; work-log's word → status map applies):
Code state Jira target (transition name or target status contains) Work row No branch, Branch, PR draft stays in progress, no transition Doing; Next step=You: <what is left>PR awaiting review / changes requested / approved reviewWaiting; Waiting on= the requested reviewer (login when that is all there is);Next step=<Reviewer>: review <repo>#<n>On staging testorqaWaiting; Waiting on= the tester, asked when unknownIn production live,deployordone; several fit → askDoing while the deploy is the user's; Done once the ticket closes The user says finished doneorclosedDone Current status already matches → no transition, say so. Exactly one transition fits → propose it. None or several → ask with the full transition list.
Review session: the table does not apply. The status stays where it is, whatever the code state: the implementer merges, stages and deploys, and moves the ticket as they go. The assignee goes back to the implementer, who is the PR author:
gh api users/<login> -q .name, thenlookupJiraAccountIdon that name; no single match → the ticket's reporter; still unclear → ask. Work row: Done when the user approved, because their part is finished; Waiting when they requested changes,Waiting on= the implementer,Next step=<Implementer>: address the review on <repo>#<n>.- Draft the Actions entry: one line under 20 words in the user's voice, from the session's commits and the conversation:
Fixed the open-tracking double count; PR up for Sam.TypeCoded when commits exist, Investigated when none, Reviewed when the session reviewed; the user can change it.SourceYou,Work= the row,Dateempty (the automation stamps it). Notes = one line on where it stands.Since= today only when Status or the owner changed. - Confirm. One block: hours stopped, Jira
<current> → <target>and, on a review,assignee <user> → <Implementer>, each Notion fieldold → new, the Action line with its Type, and the git lines (3 uncommitted files,2 unpushed commits) as warnings only; nothing here commits or pushes. The user says yes or edits. - Write: Jira, then Notion (
update_properties,notion-create-pageson Actions; 429 → waitretry_after, retry). Report one line per write and end with the row URL.
Done when: no timer runs on the key, the Jira status and the Work row agree on whose move it is, an Actions entry exists for the session, and any uncommitted or unpushed work has been named.
Common mistakes
- Asking before stopping the timer, so the Q&A gets billed.
- Treating a switched-away timer at
startas astopand moving that ticket to Waiting. - Proposing a Jira status from its name rather than the code state; "whose move" decides.
- Setting
Sinceon a Notes-only change, or writingLast synced. - Re-asking the whole block when the only open item is the project.
- Taking a review ticket to In Progress when the board has a review status.
- Moving a reviewed ticket's status at
stop. The implementer owns merge, staging and deploy; only the assignee changes.
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.

