Spin up a personal, motivating daily focus board that renders in a browser canvas and that the user drives by talking to their AI partner. Tasks track status (to-do → in progress → done) with timestamped progress notes and roll up into a "today's momentum" feed; numeric-goal tasks (pages, pomodoros, reps) render as progress-bar counters. Executive-function / neurodivergent-friendly by design: Focus mode, kind "not today" carryover (no overdue-shaming), a brain-dump box, reduced-motion, and gentle deadline countdowns. Add, reorder, and relabel tasks live, assign Eisenhower priority (Do first / Schedule / Delegate / Later), open with an above/below-the-line check-in and a daily mantra, and save an end-of-day recap. Use when someone wants to plan their day, stay focused, kick off a work session, or track progress. Progress persists in the browser (localStorage).
A warm, visual "let's go" board for a person's day — rendered from a self-contained HTML template, opened in a browser (ideally a side-panel canvas in the GitHub Copilot app), and kept current by conversation: the human tells you what they finished, you update the board.
This is Ember partnership in daily practice: not a static to-do list, a thing you run with your AI. Keep it light, encouraging, and honest — celebrate real progress, don't inflate it.
Trigger when the user wants to: plan today, "get organized / stay focused," start a work session, or track progress on a set of tasks they list. If they just mention a pile of things to do, offer the board.
1. Gather the tasks. Ask for (or lift from what they already said) their handful of tasks
for the day. For each, capture: a short title, an optional emoji, an optional one-line
sub-note, and an optional tag. If a task is a count toward a number (steps, pages,
pomodoros, reps), make it a counter with a numeric goal. Keep it to ~4–9 items — a focus
board, not a backlog.
2. Generate the board. Copy assets/board.template.html to a working file (e.g.
focus-board.html in a scratch/working dir — NOT into a source repo unless asked). In the copy,
find this line near the top:
<script>window.__BOARD__ = null; /* SKILL: replace null with the config object above */</script>
Replace null with the config object. Inject it as JSON with < escaped so a task's text
can never break out of the <script> — e.g. JSON.stringify(config).replace(/</g, "\\u003c") —
never hand-concatenate raw user-provided text. Schema:
{
name: "Alex", // optional — shows "Let's go, Alex 🔥"; omit for "Let's go 🔥"
dateKey: "2026-07-27", // optional — localStorage key; defaults to today (YYYY-MM-DD)
mantra: "Small, real, done.", // optional — today's intention (editable on the board)
checkin: "above", // optional — arrival check-in: "below" | "mid" | "above"
tasks: [
// counter task (numeric goal → progress bar + set/+ buttons):
{ id:"pages", emoji:"📖", title:"Read 30 pages",
goal:30, start:0, inc:5, unit:"pages", tag:"mind", tagc:"new", quad:"ins" },
// status task (to-do → in progress → done + progress notes):
{ id:"doc", emoji:"⚙️", title:"Finish the design doc", sub:"the anchor",
due:"2026-07-27T17:00", tag:"deadline", tagc:"deadline", quad:"iu" },
{ id:"move", emoji:"🌿", title:"Move a little — whatever fits your body", tag:"body" }
]
}
id must be unique and stable, using only letters, digits, hyphens, or underscores
([A-Za-z0-9_-]) — it's embedded in HTML attributes, CSS selectors, storage keys, and
colon-delimited note keys, so avoid quotes, colons, brackets, and spaces. tagc is an optional color class:
new (green), deadline (red/pink), career (purple); omit for the default grey.goal (a positive integer), start (default 0), inc (default
max(1, round(goal/10))), unit (label). Everything else is a status task. Carryover
("not today") is for status tasks — counters are progress you dial down, not defer.due (optional, ISO local datetime) shows a gentle live countdown on the card, and after
the time passes says "was due 5:00pm — still worth doing" in soft amber (never angry red). Use
it for the one real anchor, not everything.quad (optional) sets a task's Eisenhower priority: iu (important & urgent → Do first),
ins (important, not urgent → Schedule), niu (urgent, not important → Delegate), ninu
(neither → Later). Renders as a colored accent; the person can change it on the board.mantra / checkin (both optional, top-level) seed today's intention and the above/below-the-line
arrival check-in. Set these from the conversation, or leave them for the person to set/tap.3. Serve + open it. localStorage needs an http:// origin, so serve the folder rather than
opening the file path directly:
python -m http.server 8799 --bind 127.0.0.1 from the board's folder
(or scripts/serve-board.ps1). Binding to 127.0.0.1 keeps a board of personal tasks off the
local network.
If Python isn't available, any static file server works — you just need an http:// origin.http://localhost:8799/focus-board.html in the
default browser.file://, so progress may not persist.Once it's up, keep it current through conversation — this is the whole point:
dateKey
preserves existing progress. Clicking is faster for live updates.The board's UI has EF/neurodivergent affordances, but the biggest help is how you, the partner, behave. This matters for everyone and is essential for people with ADHD or executive-function challenges. Bake these in — they're not optional politeness, they're the point:
due — kindly, not as a threat.Frame all of this as executive-function-friendly design for everyone — never diagnose, never
assume someone is neurodivergent, and keep every affordance optional. See
references/neurodivergent-design.md for the principles behind each feature.
references/customize.md (file-backed state, v2).references/tutorial.md — how to use the board in the GitHub Copilot app (browser canvas) or
directly through Ember: the daily loop (check-in → mantra → plan → work → end-of-day save).examples/sample-board.html — a populated example board: open it to see the board in action,
or copy it as a starting point (it's this template with a sample config injected).references/neurodivergent-design.md — the executive-function / ADHD design principles behind
each feature (task initiation, time blindness, working memory, overwhelm, reward, shame, capture,
body-doubling), and the "make it optional, don't medicalize" stance.references/customize.md — theming, the file-backed-state upgrade (agent can read/write
progress), and the optional "shared signals" bridge for people who run a multi-agent workshop.Copy a source-pinned command for your client. You run it yourself.
Destination: .claude/skills/daily-focus-board · pinned to the source commit
# Run from your project root
git clone https://github.com/github/awesome-copilot.git .skillboard-tmp
git -C .skillboard-tmp checkout f11a4e441c5ff061b4f8ae37952be8c602e4034e
mkdir -p ".claude/skills"
cp -r ".skillboard-tmp/skills/daily-focus-board" ".claude/skills/"
rm -rf .skillboard-tmpReview the source before running. This copies files into your project; it is not a one-click install and does not verify runtime safety.
sudo apt update && sudo apt install -y gitnpm install -g @anthropic-ai/claude-code# Run from your project root
git clone https://github.com/github/awesome-copilot.git .skillboard-tmp
git -C .skillboard-tmp checkout f11a4e441c5ff061b4f8ae37952be8c602e4034e
mkdir -p ".claude/skills"
cp -r ".skillboard-tmp/skills/daily-focus-board" ".claude/skills/"
rm -rf .skillboard-tmpDestination: .claude/skills/daily-focus-board
Scanner static-checks@0.1.0 · commit f11a4e441c5f. Static checks cannot prove runtime safety – review the source and the exact diff before installing. How checks work.
No static rules matched. This is not a safety guarantee.