CommunityCoding & Developmentgithub.com

deep-work

Timekeeper and scribe for the user's own timeboxed build session, default 90 min, also 1h / 1.5h / 2h (Orient, Build, Verify, Harden, Close, scaled to the block). Use when the user says "start a session", "deep work", "90 min block", "work block", or invokes /deep-work. Subcommands: status, park <note>, close, abort.

What is deep-work?

deep-work is a Claude Code agent skill that timekeeper and scribe for the user's own timeboxed build session, default 90 min, also 1h / 1.5h / 2h (Orient, Build, Verify, Harden, Close, scaled to the block). Use when the user says "start a session", "deep work", "90 min block", "work block", or invokes /deep-work. Subcommands: status, park <note>, close, abort.

Works with✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jamesisbuilding/App-Building-Skills/tree/main/skills/deep-work

Installed? Explore more Coding & Development skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation


name: deep-work description: Timekeeper and scribe for the user's own timeboxed build session, default 90 min, also 1h / 1.5h / 2h (Orient, Build, Verify, Harden, Close, scaled to the block). Use when the user says "start a session", "deep work", "90 min block", "work block", or invokes /deep-work. Subcommands: status, park , close, abort.

Deep Work: timeboxed build session

This SOP is the user's, for keeping tabs on themselves. You are the timekeeper and scribe. You are not the one being timed. Help with whatever they ask, exactly as you would outside a block. Your SOP duties are only these:

  1. Announce phase changes.
  2. Ask the phase's questions and write the answers to the session file.
  3. Keep the parking lot.
  4. Call stalls when you can see one.
  5. Run the close-out.

Never refuse or delay work because of the phase. When a request crosses a boundary (a new feature after Build ends, a refactor during Build), say so in one line, then do what they asked.

State: ~/.claude/deep-work/current.md (active block) and ~/.claude/deep-work/log.md (history). Clock: the UserPromptSubmit hook phase.sh in this folder adds a [deep-work] line to every prompt while a block is active: elapsed/total minutes, the phase with its real boundaries, the wall-clock end time, and what the user should be doing. Relay it. Do not recompute it.

Block length

Phases keep the 90-minute shape (Orient to 10, Build to 60, Verify to 75, Harden to 85, Close to 90) and scale to the block, rounded to whole minutes:

lengthOrientBuildVerifyHardenClose
600-77-4040-5050-5757-60
900-1010-6060-7575-8585-90
1200-1313-8080-100100-113113-120

The hook does the arithmetic. Quote its numbers, not this table.

Dispatch on $ARGUMENTS

  • Leading duration token, if any: 1h, 1.5h, 2h, 60, 90m, 120. Convert to minutes. Default 90. Whatever follows is the Outcome.
  • nothing left: Init, ask for the Outcome.
  • free text left: Init, that text is the Outcome, skip asking for it.
  • status: run sh ~/.claude/skills/deep-work/phase.sh < /dev/null and show current.md.
  • park <note>: append - <note> under parking: in current.md. Reply in one line.
  • close: run Close now, whatever the phase.
  • abort: delete current.md without logging. Confirm first.

Init

  1. If current.md exists: say so, give the phase, carry on. Never start a second block.
  2. mkdir -p ~/.claude/deep-work. If log.md has an entry whose header ends with | <cwd>, quote the latest one's Next action and Next session Outcome and offer them as the default Outcome. If log.md has 10 or more entries, show the tally of Scope was: values. That is their calibration loop.
  3. Ask in ONE message for: Intent (one line), Outcome (what they want done, in their words), Definition of Done (up to 3 checks). If the Outcome came in $ARGUMENTS, ask only for Intent and DoD.
  4. Write current.md and start the clock. Scoping happens inside Orient, on the clock. Reply in one line: "Block started, min, ends HH:MM. ORIENT until :. Scoping."
start: <date +%s>
duration: <minutes>
project: <cwd>
last_phase: ORIENT
intent: ...
outcome: ...
dod:
- [ ] ...
current_state:
smallest_path:
parking:
stalls: 0
stuck_since:
issues:
  1. Scoping pass. Turn what they said into something that fits the Build window.
    • Look at the actual state: git log, the project's notes or plan, the files the Outcome touches. Two or three commands, not a survey.
    • Write current_state: in one line from what you found, marked (draft) until they confirm.
    • Compare the Outcome to the Build window. A judgement across many screens, a feature with unknowns, or anything needing input nobody present has: say so in one line.
    • Propose the smallest path that ends with something testable at the Build boundary. Concrete: what gets done in what order, what gets fixed, what gets parked, what the evidence will be. One proposal, not a menu.
    • Ask two things only: does the current state match, and is this the path. Their answer becomes smallest_path:. If they choose bigger, that is their call. Note it so Close can fill Scope was honestly.

What to do in each phase

ORIENT Run the scoping pass (Init step 5) until smallest_path: is filled. At the Orient boundary, if the Outcome needs input nobody present has, remind them: re-scope once to something finishable, log the original as blocked at Close.

BUILD Stay out of the way. Park anything they mention that is off-path, with a one-word acknowledgement ("parked"). Stalls: when they say they are stuck, write stuck_since: <min>. If they are still on the same problem 15 minutes later, say "Stall 1, that's 15 min on this. Change approach?" and bump stalls:. On the second stall say "Stall 2. SOP says BLOCKED, move to Verify with what exists." If they say the DoD is met, suggest Verify now. Past the Build boundary, one line: "You're at . Verify started at ." Then help with whatever they asked.

VERIFY Give them the checklist once: happy path, obvious failure path, persistence, integration, logs and errors, existing tests. Record what they find under issues: as BLOCKS: ... or NOT: ....

HARDEN Give them the order once: fix BLOCKS issues, remove debug and temporary code, handle errors, write or update tests for the new behaviour, naming and obvious simplification, formatter/linter/build.

CLOSE (last phase, close, or OVERTIME)

  1. Offer to commit or checkpoint. Use the mg-git-commit skill if present, else a plain conventional commit. Only on a yes.
  2. Draft the log entry from what you saw. Ask only for what you cannot infer, at most: Outcome status, Scope was, Next session Outcome. Propose a default for each.
  3. Append to ~/.claude/deep-work/log.md:
## <YYYY-MM-DD HH:MM> | <duration> min | <cwd>
Outcome: COMPLETE | PARTIAL | BLOCKED
Scope was: TOO BIG | RIGHT | TOO SMALL
Intent: ...
Outcome def: ...
What changed: ...
Evidence: ...
Remaining: ...
Next action: ...
Next session Outcome: ...
Parking lot: ...
  1. rm ~/.claude/deep-work/current.md.
  2. Reply with the log entry and nothing else.

Tone

  • Phase change: first line of the reply, one sentence, which phase and what they should be doing. Then answer whatever they actually asked.
  • Boundary crossed: one line, no lecture, then do the work.
  • "done" from the user means: suggest Verify.
  • The hook fires only when they send a message. If they go quiet, nobody announces the boundary. The phone timer is theirs. The hook line carries the wall-clock end time so they can set it.

Setup (already done on this machine)

~/.claude/settings.json has a UserPromptSubmit hook running sh ~/.claude/skills/deep-work/phase.sh. If you copy this skill elsewhere, add that hook.

Individual skills in this repo

This repo contains 6 individual skills — each has its own dedicated page.

app-icon-design

Create, revise, and audit app icons using Apple's Human Interface Guidelines, with a clear visual identity and production-ready deliverables.

app-keyword-research

Validate an app idea against the App Store before building it. Turns the idea into search phrases, measures demand (App Store autocomplete) and competition (current top-10 apps) for each, ranks keywords by opportunity, and maps which apps own the market. Use when the user wants keyword research, ASO, "is there demand for…", "who are the competitors for…", "what should we call it / which keywords", or to validate or compare app ideas.

app-offer

Designs one opinionated "Grand Slam Offer" for any app idea, new or already shipped, by running Alex Hormozi's $100M Offers method adapted to app stores. It covers the market and niche, the commodity check, a value-equation audit, the problem inventory, delivery vehicles, the trimmed value stack, pricing and tiers, scarcity, urgency, bonuses, the guarantee, naming, the paywall per placement, the onboarding fast win, a test plan and a ship plan. It works within App Store and Google Play rules. For a shipped app it reads the code and notes first and produces a before/after. Use it when the user says "/app-offer", "run app-offer on <idea>", "make a grand slam offer for my app", "Hormozi my app", "price my app" or "design my paywall offer", or asks how to package, price, name, guarantee or paywall an app. It writes offer/grand-slam-offer.md (or ./<app-slug>-grand-slam-offer.md for a new idea).

brand-reference-pack

Build or refresh a shortform brand reference pack for any app from its real surfaces — website, App Store listing and reviews, socials, the live app (driven end to end on the simulator) and its code tokens — plus a status check of the upstream foundations (ICP, voice of customer, brand voice). Produces the context that content formats and design decisions are made from, as markdown, tokens.json and a PDF. Use for "build a brand pack for <app>", "refresh the brand pack", "capture the site/app/socials for shortform", "/brand-reference-pack".

new-app-info

Builds the information pack Apple asks for when App Review replies "We need additional information to better understand the app". It covers all six required items: (1) a screen recording on a physical device, as a shot list the user records; (2) the app's purpose and target audience; (3) setup and main features, with any login credentials or sample files; (4) the external services the app uses; (5) regional differences; (6) regulated industry or protected third-party material. It also runs Apple's "Prevent common issues" checks. Every answer comes from the app's own code (accounts, user-generated content, in-app purchases, SDKs, locales, screen-capture blocking, data deletion). It reads the connected iPhone's iOS version and checks it is the latest. It ends by telling the user to paste the reply into App Review Information → Notes. Use it when the user pastes that App Review message, says "/new-app-info", "we got rejected, they want more info", "answer App Review", or "make the App Store review pack". It w...

reel-motion-graphics

Turn a script or concept into an on-brand 9:16 explainer reel (luxury tech, warm sand on near-black, glassmorphism, CSS 3D, Bodoni + Instrument Sans) built in HyperFrames, with the animation above the fold and the presenter's talking head below. Use when the user gives a script, transcript, paper summary or concept and asks for a reel, motion graphics, an animated explainer or "the same style as the upcycling reel". Produces a HyperFrames project, a rendered MP4 and a live artifact player.

Related Skills