team-update
The team-update skill posts project updates to team chat, collects and triages feedback responses, and helps plan next steps by adapting to available communication tools (chat platforms, git, issues, tasks). On first run, it discovers which tools are available and saves a configuration playbook; subsequent runs execute directly from the saved playbook, allowing users to edit preferences like channel, message style, and triage rules without re-running discovery.
git clone --depth 1 https://github.com/jezweb/claude-skills /tmp/team-update && cp -r /tmp/team-update/plugins/dev-tools/skills/team-update ~/.claude/skills/team-updateSKILL.md
# Team Update Post project updates to team chat, read and triage feedback, and plan next steps. Adapts to whatever communication and project tools are available. ## The Playbook Pattern This skill uses a **playbook** file at `.claude/team-update-playbook.md` in the project root. - **First run**: Discover available tools, ask the user for preferences, execute, save a playbook - **Subsequent runs**: Read the playbook, skip discovery, execute directly - **User edits playbook**: Changes take effect immediately (channel, style, triage rules) The playbook is plain markdown the user can edit. It captures tool configuration, channel preferences, message style, triage rules, and last-run metadata. --- ## Phase 0: Playbook Check Check if `.claude/team-update-playbook.md` exists in the project root. **If it exists**: Read it. All tool configuration, channel info, message style, and triage rules are in there. Jump to Phase 1 with known config. **If it does not exist**: Run Phase 0b (Discovery) first. --- ## Phase 0b: Discovery (First Run Only) Detect available capabilities by checking what MCP tools are connected and what local tools exist. Read [references/discovery-patterns.md](references/discovery-patterns.md) for detection patterns. ### Capability Detection Check for each capability category: | Capability | How to detect | Fallback if missing | |---|---|---| | **Chat** | MCP tools matching `chat`, `slack`, `discord`, `teams` | Output formatted text for manual posting | | **Git** | `git rev-parse --is-inside-work-tree` | Skip commit summaries | | **Issues** | MCP tools matching `github`, `linear`, `jira` | Skip or output text list | | **Tasks** | MCP tools matching `tasks`, `todos`, `asana` | Skip or output text list | | **Knowledge** | Basalt Cortex (`~/Documents/basalt-cortex/`) | Search for related knowledge notes | ### User Preferences (Ask) After discovery, ask the user to confirm: 1. **Channel**: Which chat space/channel to post updates to? (List discovered options) 2. **Identity**: Post as yourself or a bot identity? (e.g. Anthro Morphic) 3. **Repo scope**: Which repo(s) to track? (Default: current repo) 4. **Message style**: Brief standup, detailed changelog, or conversational update? 5. **Team context**: Any team members to be aware of? (Names, roles) 6. **Triage rules**: Any custom rules for handling feedback? (Or use defaults) ### Save Playbook After discovery + user preferences, save the playbook to `.claude/team-update-playbook.md`. Read [references/playbook-format.md](references/playbook-format.md) for the full template. Fill in all sections with discovered tools and user preferences. If a capability was not found, note it as "Not available" in the playbook. Ensure `.claude/` is in `.gitignore` (the playbook contains space IDs and preferences that shouldn't be committed). --- ## Phase 1: Gather Context Collect information from all available sources. Use the playbook's "Data Sources" section to know which tools to call. ### 1a. Determine Time Window Check the playbook's "Last Run" section for the last update timestamp. If no previous run, ask the user how far back to go (default: 24 hours). ### 1b. Collect Data Gather from each available source: | Source | What to collect | Tool | |---|---|---| | **Git commits** | `git log --oneline --since=<last-update>` | Bash | | **Chat messages** | Messages in the configured channel since last update | Chat MCP tool from playbook | | **Open issues/PRs** | Recently updated or newly created items | Issue tracker from playbook | | **Active tasks** | In-progress or recently completed tasks | Task tracker from playbook | ### 1c. Summarise for Drafting Group commits by theme (not individual hashes). Note any issues closed, PRs merged, or tasks completed. Flag any team messages that need response. --- ## Phase 2: Draft and Post Update ### 2a. Compose Message Read [references/message-composition.md](references/message-composition.md) for message patterns. Follow the playbook's "Message Style" section. General principles: - Lead with what shipped or changed, not process - Group related commits into themes - Mention specific people only when relevant - Keep it scannable (short paragraphs, bullet points) - **Write like a teammate, not an AI** — no emoji spam, no hedging, no over-explaining context the team already has. See the Communication Style section in [references/message-composition.md](references/message-composition.md). ### 2b. Preview and Approval Show the draft to the user. Include: - The composed message - Which channel it will be posted to - Whether it's a new message or thread reply **APPROVAL REQUIRED**: Never post to external channels without explicit user approval. ### 2c. Post Post the approved message using the chat tool from the playbook. If no chat tool is available, output the formatted message for the user to post manually. ### 2d. Update Playbook After posting, update the "Last Run" section of the playbook with: - Current timestamp - Thread key (if applicable) - Brief summary of what was posted --- ## Phase 3: Read and Triage Feedback ### 3a. Read Responses Read messages from the configured channel since the update was posted. Look for: - Direct replies to the update - New messages in the channel that reference the project - Reactions or acknowledgements ### 3b. Classify Feedback Read [references/feedback-triage.md](references/feedback-triage.md) for classification patterns. Use the playbook's "Triage Rules" section. Default classification: | Type | Action | |---|---| | Bug report | Create issue (label: bug) | | Feature request | Create issue (label: enhancement) | | Question | Draft reply for user approval | | Blocker | Flag immediately, suggest resolution | | Acknowledgement | Note, no action needed | | Off-topic | Ignore | ### 3c. Present and Act Present a summary of feedback with proposed actions: ``` ## Feedback Summary - Daniel: "Can we add dark mode?" -> Create issue (
Hit the Cloudflare REST API directly for operations that wrangler and MCP can't handle well. Bulk DNS, custom hostnames, email routing, cache purge, WAF rules, redirect rules, zone settings, Worker routes, D1 cross-database queries, R2 bulk operations, KV bulk read/write, Vectorize queries, Queues, and fleet-wide resource audits. Produces curl commands or scripts. Triggers: 'cloudflare api', 'bulk dns', 'custom hostname', 'email routing', 'cache purge', 'waf rule', 'd1 query', 'r2 bucket', 'kv bulk', 'vectorize query', 'audit resources', 'fleet operation'.
Scaffold and deploy Cloudflare Workers with Hono routing, Vite plugin, and Static Assets. Describe project, scaffold structure, configure bindings, deploy. Use whenever the user wants to create a Worker project, set up Hono on Cloudflare, configure D1 / R2 / KV / Queues bindings, or troubleshoot Worker export syntax, API route conflicts, HMR issues, or deployment failures.
Generate Drizzle ORM schemas for Cloudflare D1 databases with correct D1-specific patterns. Produces schema files, migration commands, type exports, and DATABASE_SCHEMA.md documentation. Handles D1 quirks: foreign keys always enforced, no native BOOLEAN/DATETIME types, 100 bound parameter limit, JSON stored as TEXT. Use when creating a new database, adding tables, or scaffolding a D1 data layer.
Cloudflare D1 migration workflow: generate with Drizzle, inspect SQL for gotchas, apply to local and remote, fix stuck migrations, handle partial failures. Use when running migrations, fixing migration errors, or setting up D1 schemas.
Generate database seed scripts with realistic sample data. Reads Drizzle schemas or SQL migrations, respects foreign key ordering, produces idempotent TypeScript or SQL seed files. Handles D1 batch limits, unique constraints, and domain-appropriate data. Use when populating dev/demo/test databases. Triggers: 'seed database', 'seed data', 'sample data', 'populate database', 'db seed', 'test data', 'demo data', 'generate fixtures'.
Scaffold Hono API routes for Cloudflare Workers. Produces route files, middleware, typed bindings, Zod validation, error handling, and API_ENDPOINTS.md documentation. Use after a project is set up with cloudflare-worker-builder or vite-flare-starter, when you need to add API routes, create endpoints, or generate API documentation.
Build a full-stack TanStack Start app on Cloudflare Workers from scratch — SSR, file-based routing, server functions, D1+Drizzle, better-auth, Tailwind v4+shadcn/ui. Use whenever the user mentions TanStack Start, asks to scaffold a full-stack Cloudflare app with SSR, wants an SSR dashboard, or asks for a React 19 + Cloudflare Workers app with file-based routing and server functions — even if they don't name TanStack Start specifically. No template repo — Claude generates every file fresh per project.
Scaffold a full-stack Cloudflare app from the vite-flare-starter template — React 19 + Hono + D1+Drizzle + better-auth + Tailwind v4+shadcn/ui + TanStack Query + R2 + Workers AI. Run setup.sh to clone, configure, and deploy. Use whenever the user wants a batteries-included Cloudflare full-stack app, vite-flare-starter scaffold, or a React + Cloudflare app with auth + database + Workers AI ready to go.