{"id":"bd99ff66-d901-4920-89c4-552c58181aaa","shortId":"nkYPaH","kind":"skill","title":"kill-the-standup","tagline":"Reads yesterday's Linear issues and GitHub commits for the authenticated user, formats a standup update (done / doing / blockers), and posts it to Slack. Use when asked to write a standup, generate a standup update, post to the standup channel, summarize yesterday's work, or auto","description":"# Kill the Standup\n\nRead yesterday's Linear issues and GitHub commits. Format a standup update. Post it to Slack.\n\n---\n\n## Step 1: Setup Check\n\nConfirm required env vars are set:\n\n```bash\necho \"LINEAR_API_KEY: ${LINEAR_API_KEY:+set}\"\necho \"SLACK_WEBHOOK_URL: ${SLACK_WEBHOOK_URL:+set}\"\necho \"GITHUB_REPO: ${GITHUB_REPO:-not set}\"\necho \"GITHUB_USERNAME: ${GITHUB_USERNAME:-not set}\"\n```\n\n**If LINEAR_API_KEY is missing:**\nStop. Tell the user: \"LINEAR_API_KEY is required. Get it from Linear → Settings → API → Personal API keys. Add it to your .env file.\"\n\n**If SLACK_WEBHOOK_URL is missing:**\nStop. Tell the user: \"SLACK_WEBHOOK_URL is required. Create an Incoming Webhook at api.slack.com/apps → Your App → Incoming Webhooks. Add it to your .env file.\"\n\n**If GITHUB_REPO is missing:**\nContinue. GitHub commits will be skipped. Note this to the user.\n\n---\n\n## Step 2: Fetch Linear Activity\n\nCompute yesterday's date in ISO 8601 format (e.g. `2026-04-09T00:00:00.000Z`).\n\n**Get current user ID:**\n```bash\ncurl -s -X POST https://api.linear.app/graphql \\\n  -H \"Authorization: Bearer $LINEAR_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"query { viewer { id name email } }\"}'\n```\n\nExtract the `id` field from the response. Store as `LINEAR_USER_ID`.\n\n**Fetch issues assigned to me, updated since yesterday:**\n```bash\ncurl -s -X POST https://api.linear.app/graphql \\\n  -H \"Authorization: Bearer $LINEAR_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"query\": \"query($since: DateTime!, $userId: ID!) { issues(first: 50, filter: { assignee: { id: { eq: $userId } } updatedAt: { gte: $since } }) { edges { node { identifier title state { name } url completedAt updatedAt createdAt } } } }\",\n    \"variables\": {\"since\": \"YESTERDAY_ISO\", \"userId\": \"LINEAR_USER_ID\"}\n  }'\n```\n\n**Categorize issues:**\n- `completedAt` is non-null → **Done**\n- `state.name` is \"In Progress\", \"Started\", or \"In Review\" → **Doing**\n- `state.name` is \"Cancelled\" → skip\n- `state.name` is \"Todo\" or \"Backlog\" → skip (not worked on)\n\nIf zero issues: note \"No Linear activity found for yesterday.\"\n\n---\n\n## Step 3: Fetch GitHub Commits\n\nSkip this step silently if GITHUB_REPO is not set.\n\nIf GITHUB_REPO is set:\n\n```bash\ngh api \"repos/$GITHUB_REPO/commits?author=${GITHUB_USERNAME:-$(gh api user --jq .login)}&since=YESTERDAY_ISO&per_page=30\" \\\n  --jq '[.[] | {message: .commit.message, url: .html_url}]'\n```\n\n**Process commits:**\n- Extract the first line of each commit message (everything before the first newline)\n- Skip merge commits: drop any message starting with \"Merge\"\n- Deduplicate by message text\n\nIf GITHUB_REPO is set but returns zero commits: note \"No commits found yesterday.\"\n\n---\n\n## Step 4: Format Standup\n\nRead `references/standup-format.md` in full before writing.\n\nProduce the standup in this exact structure:\n\n```\n**Done**\n- [ENG-123] Title of completed issue\n- fix: commit message here\n\n**Doing**\n- [ENG-124] Title of in-progress issue\n\n**Blockers**\nNo blockers.\n```\n\nRules from standup-format.md:\n- No first-person pronouns (\"I\", \"we\")\n- Past tense for Done items, present continuous for Doing items\n- Each Linear item uses the `[IDENTIFIER] Title` format\n- Each GitHub commit uses the first line of the commit message\n- If no Done items: write \"Nothing completed.\" under Done\n- If no Doing items: write \"Nothing in progress.\" under Doing\n- If no blockers: write \"No blockers.\"\n- Under 200 words total\n\n---\n\n## Step 5: Post to Slack or Output\n\nPresent the formatted standup to the user.\n\nAsk: \"Post this to Slack, or output only?\"\n\n**On confirmation to post:**\n\n```bash\ncurl -s -X POST \"$SLACK_WEBHOOK_URL\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"blocks\": [\n      {\n        \"type\": \"section\",\n        \"text\": {\n          \"type\": \"mrkdwn\",\n          \"text\": \"*Standup — DATE_HERE*\\n\\n*Done*\\nITEMS\\n\\n*Doing*\\nITEMS\\n\\n*Blockers*\\nITEMS\"\n        }\n      }\n    ]\n  }'\n```\n\nPass the body via a temp file or heredoc to avoid shell quoting issues with special characters in commit messages or issue titles:\n\n```bash\ncat > /tmp/standup-payload.json << 'ENDJSON'\n{\n  \"blocks\": [\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": \"STANDUP_CONTENT_HERE\"\n      }\n    }\n  ]\n}\nENDJSON\ncurl -s -X POST \"$SLACK_WEBHOOK_URL\" -H \"Content-Type: application/json\" -d @/tmp/standup-payload.json\n```\n\nAfter posting: \"Standup posted.\"\n\n**On \"output only\":** Print the standup in a code block for copy-paste.","tags":["kill","the","standup","opendirectory","varnan-tech","agent-skills","gtm","hermes-agent","openclaw-skills","skills","technical-seo"],"capabilities":["skill","source-varnan-tech","skill-kill-the-standup","topic-agent-skills","topic-gtm","topic-hermes-agent","topic-openclaw-skills","topic-skills","topic-technical-seo"],"categories":["opendirectory"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/Varnan-Tech/opendirectory/kill-the-standup","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add Varnan-Tech/opendirectory","source_repo":"https://github.com/Varnan-Tech/opendirectory","install_from":"skills.sh"}},"qualityScore":"0.511","qualityRationale":"deterministic score 0.51 from registry signals: · indexed on github topic:agent-skills · 123 github stars · SKILL.md body (4,465 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-02T00:55:50.330Z","embedding":null,"createdAt":"2026-04-18T22:18:29.931Z","updatedAt":"2026-05-02T00:55:50.330Z","lastSeenAt":"2026-05-02T00:55:50.330Z","tsv":"'-04':205 '-09':206 '-123':463 '-124':474 '/apps':163 '/graphql':222,268 '/tmp/standup-payload.json':639,665 '00':208 '00.000':209 '1':71 '2':191 '200':549 '2026':204 '3':357 '30':395 '4':445 '5':553 '50':289 '8601':201 'activ':194,352 'add':135,168 'api':83,86,113,122,131,133,227,273,378,386 'api.linear.app':221,267 'api.linear.app/graphql':220,266 'api.slack.com':162 'api.slack.com/apps':161 'app':165 'application/json':233,279,590,663 'ask':31,566 'assign':255 'assigne':291 'authent':15 'author':224,270,382 'auto':50 'avoid':624 'backlog':341 'bash':80,215,261,376,578,637 'bearer':225,271 'block':592,641,679 'blocker':23,481,483,544,547,612 'bodi':616 'cancel':335 'cat':638 'categor':316 'channel':44 'charact':630 'check':73 'code':678 'commit':12,61,181,360,403,410,419,438,441,469,514,521,632 'commit.message':398 'complet':466,529 'completedat':305,318 'comput':195 'confirm':74,575 'content':231,277,588,649,661 'content-typ':230,276,587,660 'continu':179,500 'copi':682 'copy-past':681 'creat':156 'createdat':307 'curl':216,262,579,652 'current':212 'd':234,280,591,664 'date':198,600 'datetim':284 'dedupl':426 'done':21,323,461,497,525,531,604 'drop':420 'e.g':203 'echo':81,89,97,104 'edg':298 'email':240 'endjson':640,651 'eng':462,473 'env':76,139,172 'eq':293 'everyth':412 'exact':459 'extract':241,404 'fetch':192,253,358 'field':244 'file':140,173,620 'filter':290 'first':288,406,415,489,517 'first-person':488 'fix':468 'format':17,62,202,446,511,561 'found':353,442 'full':451 'generat':36 'get':126,211 'gh':377,385 'github':11,60,98,100,105,107,175,180,359,366,372,380,383,431,513 'gte':296 'h':223,229,269,275,586,659 'heredoc':622 'html':400 'id':214,238,243,252,286,292,315 'identifi':300,509 'in-progress':477 'incom':158,166 'iso':200,311,392 'issu':9,58,254,287,317,348,467,480,627,635 'item':498,503,506,526,535 'jq':388,396 'key':84,87,114,123,134,228,274 'kill':2,51 'kill-the-standup':1 'line':407,518 'linear':8,57,82,85,112,121,129,193,226,250,272,313,351,505 'login':389 'merg':418,425 'messag':397,411,422,428,470,522,633 'miss':116,146,178 'mrkdwn':597,646 'n':602,603,606,607,610,611 'name':239,303 'newlin':416 'nitem':605,609,613 'node':299 'non':321 'non-nul':320 'note':185,349,439 'noth':528,537 'null':322 'output':558,572,671 'page':394 'pass':614 'past':494,683 'per':393 'person':132,490 'post':25,40,66,219,265,554,567,577,582,655,667,669 'present':499,559 'print':673 'process':402 'produc':454 'progress':327,479,539 'pronoun':491 'queri':235,236,281,282 'quot':626 'read':5,54,448 'references/standup-format.md':449 'repo':99,101,176,367,373,379,432 'repo/commits':381 'requir':75,125,155 'respons':247 'return':436 'review':331 'rule':484 'section':594,643 'set':79,88,96,103,110,130,370,375,434 'setup':72 'shell':625 'silent':364 'sinc':259,283,297,309,390 'skill' 'skill-kill-the-standup' 'skip':184,336,342,361,417 'slack':28,69,90,93,142,151,556,570,583,656 'source-varnan-tech' 'special':629 'standup':4,19,35,38,43,53,64,447,456,562,599,648,668,675 'standup-format.md':486 'start':328,423 'state':302 'state.name':324,333,337 'step':70,190,356,363,444,552 'stop':117,147 'store':248 'structur':460 'summar':45 't00':207 'tell':118,148 'temp':619 'tens':495 'text':429,595,598,644,647 'titl':301,464,475,510,636 'todo':339 'topic-agent-skills' 'topic-gtm' 'topic-hermes-agent' 'topic-openclaw-skills' 'topic-skills' 'topic-technical-seo' 'total':551 'type':232,278,589,593,596,642,645,662 'updat':20,39,65,258 'updatedat':295,306 'url':92,95,144,153,304,399,401,585,658 'use':29,507,515 'user':16,120,150,189,213,251,314,387,565 'userid':285,294,312 'usernam':106,108,384 'var':77 'variabl':308 'via':617 'viewer':237 'webhook':91,94,143,152,159,167,584,657 'word':550 'work':48,344 'write':33,453,527,536,545 'x':218,264,581,654 'yesterday':6,46,55,196,260,310,355,391,443 'z':210 'zero':347,437","prices":[{"id":"5d7ab7c5-ffce-4b99-8877-499003d68aee","listingId":"bd99ff66-d901-4920-89c4-552c58181aaa","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"Varnan-Tech","category":"opendirectory","install_from":"skills.sh"},"createdAt":"2026-04-18T22:18:29.931Z"}],"sources":[{"listingId":"bd99ff66-d901-4920-89c4-552c58181aaa","source":"github","sourceId":"Varnan-Tech/opendirectory/kill-the-standup","sourceUrl":"https://github.com/Varnan-Tech/opendirectory/tree/main/skills/kill-the-standup","isPrimary":false,"firstSeenAt":"2026-04-18T22:18:29.931Z","lastSeenAt":"2026-05-02T00:55:50.330Z"}],"details":{"listingId":"bd99ff66-d901-4920-89c4-552c58181aaa","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Varnan-Tech","slug":"kill-the-standup","github":{"repo":"Varnan-Tech/opendirectory","stars":123,"topics":["agent-skills","gtm","hermes-agent","openclaw-skills","skills","technical-seo"],"license":null,"html_url":"https://github.com/Varnan-Tech/opendirectory","pushed_at":"2026-04-30T18:54:05Z","description":" AI Agent Skills built for GTM, Technical Marketing, and growth automation.","skill_md_sha":"73c2408a4d93d542f8123ee1da08970e17598a27","skill_md_path":"skills/kill-the-standup/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Varnan-Tech/opendirectory/tree/main/skills/kill-the-standup"},"layout":"multi","source":"github","category":"opendirectory","frontmatter":{"name":"kill-the-standup","description":"Reads yesterday's Linear issues and GitHub commits for the authenticated user, formats a standup update (done / doing / blockers), and posts it to Slack. Use when asked to write a standup, generate a standup update, post to the standup channel, summarize yesterday's work, or automate the daily standup. Trigger when a user says \"write my standup\", \"post standup\", \"generate standup update\", \"what did I do yesterday\", or \"kill the standup\".","compatibility":"[claude-code, gemini-cli, github-copilot]"},"skills_sh_url":"https://skills.sh/Varnan-Tech/opendirectory/kill-the-standup"},"updatedAt":"2026-05-02T00:55:50.330Z"}}