{"id":"de8f6a12-a9c2-495d-a5f5-d80edb959d20","shortId":"GvbgpQ","kind":"skill","title":"attention","tagline":"Energy and spoon check — come up for air, see what needs attention without breaking focus","description":"# Skill: Attention\n\n**Trigger:** \"Come up for air\", \"Attention check\", \"How's my energy?\", \"What's on my reminders?\"\n\n---\n\n## Step 0: Read the current session (no external tools)\n\nBuild `CURRENT` from in-context signals only — do not call any external tools for this step:\n\n- in-progress todo item (if any)\n- last 1–2 user messages — what is this session aimed at?\n- current branch and dirty files via your `source-control` capability\n\nSummarize as: one-line description + urgency tag (time-sensitive / steady / exploratory / idle).\nIf nothing is active, `CURRENT = idle`.\n\n`CURRENT` is internal scratch — never print it.\n\n---\n\n## Step 1: Discover which calendars and reminder lists to scope to\n\nBefore querying the calendar or reminders, find the entries flagged for attention check in the user's machine-local config. The system maintains per-machine settings that mark a subset of calendars and reminder lists as in-scope; everything else is deliberately out of scope.\n\nLook for entries shaped like `attention_check: true` under calendar and reminder list definitions, and collect their display names.\n\nIf no entries are flagged, ask the user which calendars and lists to use — do not default to all of them. Using all surfaces noise (family members' calendars, subscriptions, holiday feeds, shared lists) that breaks the focus signal.\n\nThe collected names are the only calendars and lists the next step should query.\n\n## Step 2: Gather context (all in parallel)\n\n- **Sessions:** use your `agent` capability with `sessions-today.sql`, `sessions-summary.sql`, `sessions-concurrent.sql` from this skill directory\n- **Calendar:** use your `calendar` capability for today's events and current time, **filtered to the calendar names from Step 1 only**. **Exclude events the user has declined** — for any event with attendee participation status available, drop it if the user's status is \"declined.\" A declined event no longer holds time on the calendar and must not count toward `RUNWAY`. Compute `RUNWAY` = minutes until the earlier of (next non-declined event on those calendars, 4pm). 4pm is the wind-down boundary — buffer for gradual transition, not end of work.\n- **Reminders:** use your `reminders` capability **filtered to the list names from Step 1 only** and **only fetch open (incomplete) reminders** — completed items are done and must never appear in the attention view. Reminder counts climb over time; querying without the open filter surfaces a stale archive that masks what's actually in flight.\n\n  Bucket the open reminders by urgency:\n  1. **Overdue** — due before today. Always surface; these are the first thing the user should see.\n  2. **Due today** — due date is today. Surface if any exist.\n  3. **No due date with explicit priority** — undated reminders the user has tagged `high`, `medium`, or `low`. The user has triaged these; treat as standing items the focus check should respect, sorted by priority.\n  4. **No due date, priority `none`** — awaiting triage. The user has not decided whether these matter. Sample at most 3, oldest-created first. When surfaced, the expected response is \"prioritize or act\" — tag with a priority, complete, or delete; do not treat as a task to do as-is.\n\n  Future-dated reminders (tomorrow onward) are out of scope for the attention check — they belong to a planning ritual, not a focus check.\n\n  Within each bucket, sort by priority (`high` → `medium` → `low` → `none`), then by due date / creation date.\n- **Work:** use your `source-control` and `issues` capabilities for review requests, received reviews, and assigned work. Prioritize closest-to-done: approved merge request ready to merge → received review to address → incoming review request → new work. Group linked merge requests and issues together. Flag any \"In Progress\" issue whose merge request has changes requested or a conflict. Consult your `source-control` capability's known gotchas before querying reviews. \"Received review to address\" means a reviewer left feedback on **your** merge request — never surface another person's merge request under this category. When a surfaced merge request or issue matches `CURRENT` (same branch / linked issue), tag it `[active]` — do not list it again in top-items. Items in the same repository as the current working directory rank higher than items in other repositories at the same priority level.\n\n---\n\n## Step 3: Score energy (internally — don't output this)\n\nScore on a single scale using the worst of: user messages today (< 30 = High, 30–80 = Medium, > 80 = Low), peak concurrent sessions (1–2 = High, 3–4 = Medium, 5+ = Low), and `RUNWAY` (≥ 90m = High, 30–90m = Medium, < 30m = Low). Session titles with high topic variety or cross-repo jumps compound switching cost — nudge down one level.\n\n---\n\n## Step 4: Surface the view\n\nOne snapshot. If something has been waiting and someone else is affected, mention it once, plainly.\n\nEvery output starts with the same signal block:\n\n```\nEnergy: <Low|Medium|High>\n  msgs steered: X   concurrent: X   runway: Xm\n```\n\nWhen comparing items to `CURRENT`: if `CURRENT ≠ idle` and an item is more urgent, mark it `↑ switch`. If less urgent, mark it `↓ later` and only include if there's room. If nothing surfaced is more urgent than `CURRENT`, the recommendation is \"continue current.\" Items in the same repository as the current working directory are considered one urgency level higher than equivalent items in other repositories.\n\nWhen choosing the personal item(s) to surface, use the reminder buckets in order: overdue → due today → undated-with-priority → undated-none. Within a bucket, prefer the highest-priority item.\n\nItems from bucket 4 (priority `none`) are surfaced with an inline `[triage]` tag — these are unprioritized, so the expected response is to set a priority, act, or delete, not to treat them as a task. Energy gating for bucket 4:\n\n- **LOW** — suppress bucket 4 entirely. No spoons for triage.\n- **MEDIUM** — prefer buckets 1–3. If buckets 1–3 are empty, always surface one bucket-4 item tagged `[triage]`.\n- **HIGH** — include up to 3 bucket-4 items tagged `[triage]` when room permits, even when buckets 1–3 also have content.\n\n**LOW**\n```\n[signal block]\n\nTake care of yourself first. Are you hydrated? Have you eaten?\n\nTop work: [single most urgent item — or \"continue current\" if nothing more urgent]\nTop personal: [overdue reminder if any, else due-today, else highest-priority undated-with-priority — bucket 4 suppressed at LOW]\n\nEverything else can wait.\n```\n\n**MEDIUM**\n```\n[signal block]\n\n[1–2 items — mix of work and personal, compared against CURRENT; personal items pulled from buckets 1–3, falling back to one bucket-4 `[triage]` item when 1–3 are empty]\n[Flag any stuck/blocked items briefly]\n\nHow does your body feel right now?\n```\n\n**HIGH**\n```\n[signal block]\n\n[3–4 items — mix of work and personal, excluding items tagged [active]; personal items pulled from buckets 1–3 first, then up to 3 bucket-4 `[triage]` items when room permits]\n\nIs there anything nagging that isn't on this list?\nWhat do you want to focus on?\n```","tags":["attention","dotfiles","athal7","agent-skills"],"capabilities":["skill","source-athal7","skill-attention","topic-agent-skills"],"categories":["dotfiles"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/athal7/dotfiles/attention","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add athal7/dotfiles","source_repo":"https://github.com/athal7/dotfiles","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 6 github stars · SKILL.md body (7,078 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:14:33.938Z","embedding":null,"createdAt":"2026-05-18T13:22:28.376Z","updatedAt":"2026-05-18T19:14:33.938Z","lastSeenAt":"2026-05-18T19:14:33.938Z","tsv":"'-4':977,987,1082,1130 '0':36 '1':69,118,286,370,417,740,965,969,997,1059,1075,1086,1122 '2':70,248,433,741,1060 '3':444,497,710,743,966,970,985,998,1076,1087,1105,1123,1128 '30':730,732,752 '30m':755 '4':478,744,776,916,952,956,1048,1106 '4pm':342,343 '5':746 '80':733,735 '90m':750,753 'act':510,938 'activ':107,677,1116 'actual':408 'address':600,642 'affect':791 'agent':257 'aim':77 'air':9,23 'also':999 'alway':422,973 'anoth':654 'anyth':1138 'appear':385 'approv':591 'archiv':403 'as-i':526 'ask':200 'assign':584 'attende':298 'attent':1,13,18,24,139,181,388,541 'avail':301 'await':484 'back':1078 'belong':544 'block':803,1004,1058,1104 'bodi':1098 'boundari':349 'branch':80,672 'break':15,229 'briefli':1094 'bucket':411,555,891,906,915,951,955,964,968,976,986,996,1047,1074,1081,1121,1129 'buffer':350 'build':44 'calendar':121,131,161,185,204,222,239,267,270,282,320,341 'call':54 'capabl':89,258,271,362,577,632 'care':1006 'categori':661 'chang':622 'check':5,25,140,182,472,542,552 'choos':881 'climb':392 'closest':588 'closest-to-don':587 'collect':191,234 'come':6,20 'compar':816,1067 'complet':378,515 'compound':768 'comput':327 'concurr':738,811 'config':148 'conflict':626 'consid':869 'consult':627 'content':1001 'context':49,250 'continu':856,1023 'control':88,574,631 'cost':770 'count':324,391 'creat':500 'creation':567 'cross':765 'cross-repo':764 'current':39,45,79,108,110,277,670,694,819,821,852,857,865,1024,1069 'date':437,447,481,531,566,568 'decid':490 'declin':293,310,312,337 'default':211 'definit':189 'delet':517,940 'deliber':172 'descript':95 'directori':266,696,867 'dirti':82 'discov':119 'display':193 'done':381,590 'drop':302 'due':419,434,436,446,480,565,895,1037 'due-today':1036 'earlier':332 'eaten':1015 'els':170,789,1035,1039,1053 'empti':972,1089 'end':355 'energi':2,29,712,804,948 'entir':957 'entri':136,178,197 'equival':875 'even':994 'event':275,289,296,313,338 'everi':796 'everyth':169,1052 'exclud':288,1113 'exist':443 'expect':505,931 'explicit':449 'exploratori':102 'extern':42,56 'fall':1077 'famili':220 'feed':225 'feedback':647 'feel':1099 'fetch':374 'file':83 'filter':279,363,399 'find':134 'first':427,501,1009,1124 'flag':137,199,613,1090 'flight':410 'focus':16,231,471,551,1151 'futur':530 'future-d':529 'gate':949 'gather':249 'gotcha':635 'gradual':352 'group':606 'high':457,559,731,742,751,760,807,981,1102 'higher':698,873 'highest':910,1041 'highest-prior':909,1040 'hold':316 'holiday':224 'hydrat':1012 'idl':103,109,822 'in-context':47 'in-progress':61 'in-scop':166 'includ':840,982 'incom':601 'incomplet':376 'inlin':923 'intern':112,713 'isn':1141 'issu':576,611,617,668,674 'item':65,379,469,686,687,700,817,825,858,876,884,912,913,978,988,1021,1061,1071,1084,1093,1107,1114,1118,1132 'jump':767 'known':634 'last':68 'later':837 'left':646 'less':833 'level':708,774,872 'like':180 'line':94 'link':607,673 'list':124,164,188,206,227,241,366,680,1145 'local':147 'longer':315 'look':176 'low':460,561,736,747,756,805,953,1002,1051 'machin':146,154 'machine-loc':145 'maintain':151 'mark':157,829,835 'mask':405 'match':669 'matter':493 'mean':643 'medium':458,560,734,745,754,806,962,1056 'member':221 'mention':792 'merg':592,596,608,619,650,657,665 'messag':72,728 'minut':329 'mix':1062,1108 'msgs':808 'must':322,383 'nag':1139 'name':194,235,283,367 'need':12 'never':114,384,652 'new':604 'next':243,334 'nois':219 'non':336 'non-declin':335 'none':483,562,903,918 'noth':105,846,1026 'nudg':771 'oldest':499 'oldest-cr':498 'one':93,773,780,870,975,1080 'one-lin':92 'onward':534 'open':375,398,413 'order':893 'output':716,797 'overdu':418,894,1031 'parallel':253 'particip':299 'peak':737 'per':153 'per-machin':152 'permit':993,1135 'person':655,883,1030,1066,1070,1112,1117 'plain':795 'plan':547 'prefer':907,963 'print':115 'priorit':508,586 'prioriti':450,477,482,514,558,707,900,911,917,937,1042,1046 'progress':63,616 'pull':1072,1119 'queri':129,246,395,637 'rank':697 'read':37 'readi':594 'receiv':581,597,639 'recommend':854 'remind':34,123,133,163,187,358,361,377,390,414,452,532,890,1032 'repo':766 'repositori':691,703,862,879 'request':580,593,603,609,620,623,651,658,666 'respect':474 'respons':506,932 'review':579,582,598,602,638,640,645 'right':1100 'ritual':548 'room':844,992,1134 'runway':326,328,749,813 'sampl':494 'scale':722 'scope':126,168,175,538 'score':711,718 'scratch':113 'see':10,432 'sensit':100 'session':40,76,254,739,757 'sessions-concurrent.sql':262 'sessions-summary.sql':261 'sessions-today.sql':260 'set':155,935 'shape':179 'share':226 'signal':50,232,802,1003,1057,1103 'singl':721,1018 'skill':17,265 'skill-attention' 'snapshot':781 'someon':788 'someth':783 'sort':475,556 'sourc':87,573,630 'source-athal7' 'source-control':86,572,629 'spoon':4,959 'stale':402 'stand':468 'start':798 'status':300,308 'steadi':101 'steer':809 'step':35,60,117,244,247,285,369,709,775 'stuck/blocked':1092 'subscript':223 'subset':159 'summar':90 'suppress':954,1049 'surfac':218,400,423,440,503,653,664,777,847,887,920,974 'switch':769,831 'system':150 'tag':97,456,511,675,925,979,989,1115 'take':1005 'task':523,947 'thing':428 'time':99,278,317,394 'time-sensit':98 'titl':758 'today':273,421,435,439,729,896,1038 'todo':64 'togeth':612 'tomorrow':533 'tool':43,57 'top':685,1016,1029 'top-item':684 'topic':761 'topic-agent-skills' 'toward':325 'transit':353 'treat':466,520,943 'triag':464,485,924,961,980,990,1083,1131 'trigger':19 'true':183 'undat':451,898,902,1044 'undated-non':901 'undated-with-prior':897,1043 'unpriorit':928 'urgenc':96,416,871 'urgent':828,834,850,1020,1028 'use':208,216,255,268,359,570,723,888 'user':71,143,202,291,306,430,454,462,487,727 'varieti':762 'via':84 'view':389,779 'wait':786,1055 'want':1149 'whether':491 'whose':618 'wind':347 'wind-down':346 'within':553,904 'without':14,396 'work':357,569,585,605,695,866,1017,1064,1110 'worst':725 'x':810,812 'xm':814","prices":[{"id":"7713f350-4ba9-4c5e-b4e4-4bb6d1004b2e","listingId":"de8f6a12-a9c2-495d-a5f5-d80edb959d20","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"athal7","category":"dotfiles","install_from":"skills.sh"},"createdAt":"2026-05-18T13:22:28.376Z"}],"sources":[{"listingId":"de8f6a12-a9c2-495d-a5f5-d80edb959d20","source":"github","sourceId":"athal7/dotfiles/attention","sourceUrl":"https://github.com/athal7/dotfiles/tree/main/skills/attention","isPrimary":false,"firstSeenAt":"2026-05-18T13:22:28.376Z","lastSeenAt":"2026-05-18T19:14:33.938Z"}],"details":{"listingId":"de8f6a12-a9c2-495d-a5f5-d80edb959d20","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"athal7","slug":"attention","github":{"repo":"athal7/dotfiles","stars":6,"topics":["agent-skills"],"license":null,"html_url":"https://github.com/athal7/dotfiles","pushed_at":"2026-05-18T18:53:57Z","description":null,"skill_md_sha":"47fea548a379514bfe2255a8ec63db4c6e5abdec","skill_md_path":"skills/attention/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/athal7/dotfiles/tree/main/skills/attention"},"layout":"multi","source":"github","category":"dotfiles","frontmatter":{"name":"attention","license":"MIT","description":"Energy and spoon check — come up for air, see what needs attention without breaking focus","compatibility":"opencode"},"skills_sh_url":"https://skills.sh/athal7/dotfiles/attention"},"updatedAt":"2026-05-18T19:14:33.938Z"}}