AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Kill The Standup

skill-varnan-tech-opendirectory-kill-the-standup · by Varnan-Tech

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 d…

No reviews yet
0 installs
4 views
0.0% view→install

Install

$ agentstack add skill-varnan-tech-opendirectory-kill-the-standup

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-varnan-tech-opendirectory-kill-the-standup)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Kill The Standup? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Kill the Standup

Read yesterday's Linear issues and GitHub commits. Format a standup update. Post it to Slack.


Step 1: Setup Check

Confirm required env vars are set:

echo "LINEAR_API_KEY: ${LINEAR_API_KEY:+set}"
echo "SLACK_WEBHOOK_URL: ${SLACK_WEBHOOK_URL:+set}"
echo "GITHUB_REPO: ${GITHUB_REPO:-not set}"
echo "GITHUB_USERNAME: ${GITHUB_USERNAME:-not set}"

If LINEARAPIKEY is missing: Stop. Tell the user: "LINEARAPIKEY is required. Get it from Linear → Settings → API → Personal API keys. Add it to your .env file."

If SLACKWEBHOOKURL is missing: Stop. Tell the user: "SLACKWEBHOOKURL is required. Create an Incoming Webhook at api.slack.com/apps → Your App → Incoming Webhooks. Add it to your .env file."

If GITHUB_REPO is missing: Continue. GitHub commits will be skipped. Note this to the user.


Step 2: Fetch Linear Activity

Compute yesterday's date in ISO 8601 format (e.g. 2026-04-09T00:00:00.000Z).

Get current user ID:

curl -s -X POST https://api.linear.app/graphql \
  -H "Authorization: Bearer $LINEAR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "query { viewer { id name email } }"}'

Extract the id field from the response. Store as LINEAR_USER_ID.

Fetch issues assigned to me, updated since yesterday:

curl -s -X POST https://api.linear.app/graphql \
  -H "Authorization: Bearer $LINEAR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "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 } } } }",
    "variables": {"since": "YESTERDAY_ISO", "userId": "LINEAR_USER_ID"}
  }'

Categorize issues:

  • completedAt is non-null → Done
  • state.name is "In Progress", "Started", or "In Review" → Doing
  • state.name is "Cancelled" → skip
  • state.name is "Todo" or "Backlog" → skip (not worked on)

If zero issues: note "No Linear activity found for yesterday."


Step 3: Fetch GitHub Commits

Skip this step silently if GITHUB_REPO is not set.

If GITHUB_REPO is set:

gh api "repos/$GITHUB_REPO/commits?author=${GITHUB_USERNAME:-$(gh api user --jq .login)}&since=YESTERDAY_ISO&per_page=30" \
  --jq '[.[] | {message: .commit.message, url: .html_url}]'

Process commits:

  • Extract the first line of each commit message (everything before the first newline)
  • Skip merge commits: drop any message starting with "Merge"
  • Deduplicate by message text

If GITHUB_REPO is set but returns zero commits: note "No commits found yesterday."


Step 4: Format Standup

Read references/standup-format.md in full before writing.

Produce the standup in this exact structure:

**Done**
- [ENG-123] Title of completed issue
- fix: commit message here

**Doing**
- [ENG-124] Title of in-progress issue

**Blockers**
No blockers.

Rules from standup-format.md:

  • No first-person pronouns ("I", "we")
  • Past tense for Done items, present continuous for Doing items
  • Each Linear item uses the [IDENTIFIER] Title format
  • Each GitHub commit uses the first line of the commit message
  • If no Done items: write "Nothing completed." under Done
  • If no Doing items: write "Nothing in progress." under Doing
  • If no blockers: write "No blockers."
  • Under 200 words total

Step 5: Post to Slack or Output

Present the formatted standup to the user.

Ask: "Post this to Slack, or output only?"

On confirmation to post:

curl -s -X POST "$SLACK_WEBHOOK_URL" \
  -H "Content-Type: application/json" \
  -d '{
    "blocks": [
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text": "*Standup — DATE_HERE*\n\n*Done*\nITEMS\n\n*Doing*\nITEMS\n\n*Blockers*\nITEMS"
        }
      }
    ]
  }'

Pass the body via a temp file or heredoc to avoid shell quoting issues with special characters in commit messages or issue titles:

cat > /tmp/standup-payload.json << 'ENDJSON'
{
  "blocks": [
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "STANDUP_CONTENT_HERE"
      }
    }
  ]
}
ENDJSON
curl -s -X POST "$SLACK_WEBHOOK_URL" -H "Content-Type: application/json" -d @/tmp/standup-payload.json

After posting: "Standup posted."

On "output only": Print the standup in a code block for copy-paste.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.