From d2f10d360601abdfbbdad796fd8035d41f7852fe Mon Sep 17 00:00:00 2001 From: Robert Herber Date: Fri, 6 Feb 2026 06:04:37 +0100 Subject: [PATCH 1/5] Add Claude Code skills marketplace with 10 curated plugins MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduces a Claude Code plugin marketplace at skills/.claude-plugin/ featuring both external and local plugins: External plugins: - expo-skills (expo/skills) - callstack-skills (callstackincubator/agent-skills) - anthropic-skills (anthropics/skills) Local plugins: - kysely-sql: SQL with Kysely query builder for Expo/Bun - planning: MVP-style planning with issue context gathering - typescript: Strict TypeScript with typecheck hook - biome: Auto-format/lint with Biome hook - bun: Environment setup with version management - general: Git commands, Linear/Sentry/GitHub MCP integrations Includes hooks for SessionStart, PostToolUse, and notifications, plus slash commands for /commit, /push, /amend, /start-linear-task. πŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .vscode/settings.json | 6 + README.md | 51 ++++ skills/.claude-plugin/marketplace.json | 131 +++++++++ .../plugins/biome/.claude-plugin/plugin.json | 27 ++ skills/plugins/biome/skills/biome/SKILL.md | 48 ++++ skills/plugins/bun/.claude-plugin/plugin.json | 22 ++ .../plugins/bun/scripts/setup-environment.sh | 101 +++++++ skills/plugins/bun/skills/bun/SKILL.md | 80 ++++++ .../general/.claude-plugin/plugin.json | 59 ++++ skills/plugins/general/commands/amend.md | 15 ++ skills/plugins/general/commands/commit.md | 21 ++ skills/plugins/general/commands/push.md | 22 ++ .../general/commands/start-linear-task.md | 19 ++ .../general/scripts/git-branch-context.sh | 35 +++ .../general/scripts/pushover-notification.sh | 46 ++++ .../general/skills/integrations/SKILL.md | 106 ++++++++ .../kysely-sql/.claude-plugin/plugin.json | 9 + skills/plugins/kysely-sql/skills/sql/SKILL.md | 154 +++++++++++ .../planning/.claude-plugin/plugin.json | 34 +++ skills/plugins/planning/skills/plan/SKILL.md | 142 ++++++++++ .../typescript/.claude-plugin/plugin.json | 28 ++ .../typescript/skills/typescript/SKILL.md | 252 ++++++++++++++++++ 22 files changed, 1408 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 skills/.claude-plugin/marketplace.json create mode 100644 skills/plugins/biome/.claude-plugin/plugin.json create mode 100644 skills/plugins/biome/skills/biome/SKILL.md create mode 100644 skills/plugins/bun/.claude-plugin/plugin.json create mode 100755 skills/plugins/bun/scripts/setup-environment.sh create mode 100644 skills/plugins/bun/skills/bun/SKILL.md create mode 100644 skills/plugins/general/.claude-plugin/plugin.json create mode 100644 skills/plugins/general/commands/amend.md create mode 100644 skills/plugins/general/commands/commit.md create mode 100644 skills/plugins/general/commands/push.md create mode 100644 skills/plugins/general/commands/start-linear-task.md create mode 100755 skills/plugins/general/scripts/git-branch-context.sh create mode 100755 skills/plugins/general/scripts/pushover-notification.sh create mode 100644 skills/plugins/general/skills/integrations/SKILL.md create mode 100644 skills/plugins/kysely-sql/.claude-plugin/plugin.json create mode 100644 skills/plugins/kysely-sql/skills/sql/SKILL.md create mode 100644 skills/plugins/planning/.claude-plugin/plugin.json create mode 100644 skills/plugins/planning/skills/plan/SKILL.md create mode 100644 skills/plugins/typescript/.claude-plugin/plugin.json create mode 100644 skills/plugins/typescript/skills/typescript/SKILL.md diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..13ab12e --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "search.exclude": { + "**/skill": false, + "**/skills": false + }, +} \ No newline at end of file diff --git a/README.md b/README.md index 50cd96e..11c8710 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,57 @@ This repository contains shared GitHub Actions, workflow templates, and organization-wide configurations for the Kingstinct organization. +## Claude Code Skills Marketplace + +This repo hosts a Claude Code skills marketplace with curated plugins for Expo, React Native, SQL, and document processing. + +### Installation + +```bash +# Add the marketplace +/plugin marketplace add kingstinct/.github/skills + +# Install the plugins you need +/plugin install expo-skills@kingstinct-skills +/plugin install callstack-skills@kingstinct-skills +/plugin install anthropic-skills@kingstinct-skills +/plugin install kysely-sql@kingstinct-skills +/plugin install planning@kingstinct-skills +/plugin install typescript@kingstinct-skills +/plugin install biome@kingstinct-skills +/plugin install general@kingstinct-skills +/plugin install bun@kingstinct-skills +``` + +### Available Plugins + +#### External Plugins + +| Plugin | Source | Description | +|--------|--------|-------------| +| `expo-skills` | [expo/skills](https://github.com/expo/skills) | App design, SDK upgrades, and deployment to App Store/Play Store/web | +| `callstack-skills` | [callstackincubator/agent-skills](https://github.com/callstackincubator/agent-skills) | React Native best practices, performance optimization, and GitHub workflows | +| `anthropic-skills` | [anthropics/skills](https://github.com/anthropics/skills) | Document processing (Excel, Word, PowerPoint, PDF) and example skills | + +#### Kingstinct Plugins + +| Plugin | Description | Hooks | +|--------|-------------|-------| +| `kysely-sql` | SQL with Kysely (expo-sqlite / bun:sqlite) | - | +| `planning` | MVP-style planning with issue context and test strategies | - | +| `typescript` | Strict TypeScript best practices | `bun run typecheck` on Edit/Write | +| `biome` | Auto-format and lint with Biome | `biome check --fix` on Edit/Write | +| `bun` | Bun setup: install version from .bun-version/package.json/.env.github, run codegen | SessionStart | +| `general` | Git commands, Linear integration, Pushover notifications | Session hooks + /commit, /push, /amend, /start-linear-task | + +### Updating + +```bash +/plugin marketplace update kingstinct-skills +``` + +Updates are pulled automatically from the upstream sources. + ## Reusable Actions The following composite actions are available for use across all repositories in the organization: diff --git a/skills/.claude-plugin/marketplace.json b/skills/.claude-plugin/marketplace.json new file mode 100644 index 0000000..6cd5de6 --- /dev/null +++ b/skills/.claude-plugin/marketplace.json @@ -0,0 +1,131 @@ +{ + "name": "kingstinct-skills", + "owner": { + "name": "Kingstinct", + "email": "robert@kingstinct.com" + }, + "metadata": { + "description": "Curated Claude Code skills marketplace featuring Expo, React Native, SQL, and document processing tools", + "version": "1.0.0", + "pluginRoot": "./plugins" + }, + "plugins": [ + { + "name": "expo-skills", + "source": { + "source": "github", + "repo": "expo/skills" + }, + "description": "Official Expo skills: app design, SDK upgrades, and deployment to App Store/Play Store/web.", + "author": { + "name": "Expo Team", + "email": "bacon@expo.io" + }, + "category": "development", + "tags": ["expo", "react-native", "mobile", "deployment", "upgrade"], + "license": "MIT" + }, + { + "name": "callstack-skills", + "source": { + "source": "github", + "repo": "callstackincubator/agent-skills" + }, + "description": "React Native best practices, performance optimization, and GitHub workflows by Callstack.", + "author": { + "name": "Callstack", + "email": "hello@callstack.com" + }, + "category": "development", + "tags": ["react-native", "performance", "optimization", "github", "best-practices"], + "license": "MIT" + }, + { + "name": "anthropic-skills", + "source": { + "source": "github", + "repo": "anthropics/skills" + }, + "description": "Document processing (Excel, Word, PowerPoint, PDF) and example skills (design, MCP builder, web artifacts).", + "author": { + "name": "Anthropic", + "email": "klazuka@anthropic.com" + }, + "category": "productivity", + "tags": ["documents", "excel", "word", "pdf", "design", "mcp"], + "license": "MIT" + }, + { + "name": "kysely-sql", + "source": "./kysely-sql", + "description": "SQL database guidelines using Kysely query builder with expo-sqlite or bun:sqlite drivers.", + "author": { + "name": "Kingstinct", + "email": "robert@kingstinct.com" + }, + "category": "development", + "tags": ["sql", "sqlite", "kysely", "expo", "bun", "database"], + "license": "MIT" + }, + { + "name": "planning", + "source": "./planning", + "description": "Concise MVP-style planning with issue context gathering and integration/E2E test strategies.", + "author": { + "name": "Kingstinct", + "email": "robert@kingstinct.com" + }, + "category": "workflow", + "tags": ["planning", "mvp", "testing", "e2e", "integration"], + "license": "MIT" + }, + { + "name": "typescript", + "source": "./typescript", + "description": "TypeScript best practices with typecheck hook on file changes.", + "author": { + "name": "Kingstinct", + "email": "robert@kingstinct.com" + }, + "category": "development", + "tags": ["typescript", "types", "strict", "functional"], + "license": "MIT" + }, + { + "name": "biome", + "source": "./biome", + "description": "Auto-format and lint with Biome on file changes.", + "author": { + "name": "Kingstinct", + "email": "robert@kingstinct.com" + }, + "category": "development", + "tags": ["biome", "linting", "formatting", "code-quality"], + "license": "MIT" + }, + { + "name": "general", + "source": "./general", + "description": "Git commands (/commit, /push, /amend), Linear integration, and Pushover notifications.", + "author": { + "name": "Kingstinct", + "email": "robert@kingstinct.com" + }, + "category": "workflow", + "tags": ["git", "linear", "notifications", "pushover", "workflow"], + "license": "MIT" + }, + { + "name": "bun", + "source": "./bun", + "description": "Bun environment setup on session start: installs correct version and runs codegen if available.", + "author": { + "name": "Kingstinct", + "email": "robert@kingstinct.com" + }, + "category": "development", + "tags": ["bun", "setup", "codegen", "environment"], + "license": "MIT" + } + ] +} diff --git a/skills/plugins/biome/.claude-plugin/plugin.json b/skills/plugins/biome/.claude-plugin/plugin.json new file mode 100644 index 0000000..e34cf97 --- /dev/null +++ b/skills/plugins/biome/.claude-plugin/plugin.json @@ -0,0 +1,27 @@ +{ + "name": "biome", + "description": "Auto-format and lint with Biome on file changes", + "version": "1.0.0", + "author": { + "name": "Kingstinct", + "email": "robert@kingstinct.com" + }, + "allowedTools": [ + "Bash(biome:*)", + "Bash(bunx biome:*)", + "Bash(bun run biome:*)" + ], + "hooks": { + "PostToolUse": [ + { + "matcher": "Edit|Write|MultiEdit", + "hooks": [ + { + "type": "command", + "command": "git add $CLAUDE_PROJECT_DIR && bunx biome check --fix --unsafe --staged --no-errors-on-unmatched && git add $CLAUDE_PROJECT_DIR" + } + ] + } + ] + } +} diff --git a/skills/plugins/biome/skills/biome/SKILL.md b/skills/plugins/biome/skills/biome/SKILL.md new file mode 100644 index 0000000..12ef8af --- /dev/null +++ b/skills/plugins/biome/skills/biome/SKILL.md @@ -0,0 +1,48 @@ +--- +description: Biome linting and formatting guidelines +--- + +# Biome Guidelines + +Biome is used for linting and formatting. The PostToolUse hook automatically runs `biome check --fix` on file changes. + +## Fix Warnings Too + +When modifying files, fix both errors AND warnings reported by Biome. Don't leave warnings behind. + +After editing a file: +1. Check if Biome reported any warnings +2. Fix them before moving on +3. Run `bunx biome check ` to verify + +## Manual Commands + +```bash +# Check a specific file +bunx biome check path/to/file.ts + +# Check and fix a file +bunx biome check --fix path/to/file.ts + +# Check entire project +bunx biome check . + +# Format only (no linting) +bunx biome format --write path/to/file.ts + +# Lint only (no formatting) +bunx biome lint path/to/file.ts +``` + +## Common Issues to Fix + +- Unused imports and variables +- Missing semicolons or extra semicolons (per project config) +- Inconsistent quotes +- Trailing commas +- Unsafe operations (use `--unsafe` flag when appropriate) +- Accessibility issues in JSX + +## Configuration + +Biome config is in `biome.json` or `biome.jsonc` at project root. Respect project-specific rules. diff --git a/skills/plugins/bun/.claude-plugin/plugin.json b/skills/plugins/bun/.claude-plugin/plugin.json new file mode 100644 index 0000000..55ee447 --- /dev/null +++ b/skills/plugins/bun/.claude-plugin/plugin.json @@ -0,0 +1,22 @@ +{ + "name": "bun", + "description": "Bun environment setup: auto-install correct version and run codegen on session start", + "version": "1.0.0", + "author": { + "name": "Kingstinct", + "email": "robert@kingstinct.com" + }, + "hooks": { + "SessionStart": [ + { + "matcher": "startup", + "hooks": [ + { + "type": "command", + "command": "\"${CLAUDE_PLUGIN_ROOT}/scripts/setup-environment.sh\"" + } + ] + } + ] + } +} diff --git a/skills/plugins/bun/scripts/setup-environment.sh b/skills/plugins/bun/scripts/setup-environment.sh new file mode 100755 index 0000000..68f02c2 --- /dev/null +++ b/skills/plugins/bun/scripts/setup-environment.sh @@ -0,0 +1,101 @@ +#!/bin/bash + +echo "Setting up Bun environment..." + +set -euo pipefail + +PROJECT_DIR="${CLAUDE_PROJECT_DIR:-.}" + +# Try to get BUN_VERSION from multiple sources (fail gracefully) +BUN_VERSION="" + +# 1. Try .bun-version file +if [ -f "$PROJECT_DIR/.bun-version" ]; then + BUN_VERSION=$(cat "$PROJECT_DIR/.bun-version" | tr -d '[:space:]') + echo "πŸ“„ Found BUN_VERSION from .bun-version: $BUN_VERSION" +fi + +# 2. Try package.json packageManager field +if [ -z "$BUN_VERSION" ] && [ -f "$PROJECT_DIR/package.json" ]; then + # Extract bun version from "packageManager": "bun@1.2.3" + PACKAGE_MANAGER=$(grep -o '"packageManager"[[:space:]]*:[[:space:]]*"bun@[^"]*"' "$PROJECT_DIR/package.json" 2>/dev/null || echo "") + if [ -n "$PACKAGE_MANAGER" ]; then + BUN_VERSION=$(echo "$PACKAGE_MANAGER" | sed 's/.*bun@\([^"]*\).*/\1/') + echo "πŸ“¦ Found BUN_VERSION from package.json packageManager: $BUN_VERSION" + fi +fi + +# 3. Try .env.github file +if [ -z "$BUN_VERSION" ] && [ -f "$PROJECT_DIR/.env.github" ]; then + ENV_VERSION=$(grep -E '^BUN_VERSION=' "$PROJECT_DIR/.env.github" 2>/dev/null | cut -d'=' -f2 | tr -d '[:space:]"'"'" || echo "") + if [ -n "$ENV_VERSION" ]; then + BUN_VERSION="$ENV_VERSION" + echo "πŸ”§ Found BUN_VERSION from .env.github: $BUN_VERSION" + fi +fi + +# 4. Check if already set in environment +if [ -z "$BUN_VERSION" ] && [ -n "${BUN_VERSION:-}" ]; then + echo "🌍 Using BUN_VERSION from environment: $BUN_VERSION" +fi + +check_bun_not_installed() { + if command -v bun >/dev/null 2>&1; then + local installed + installed=$(bun --version | awk '{print $1}') + + if [ -z "$BUN_VERSION" ]; then + echo "βœ… Found bun version $installed (no specific version required)" + return 1 + fi + + # If version matches exactly + if [ "$installed" = "$BUN_VERSION" ]; then + echo "βœ… Found bun version $installed (required: $BUN_VERSION). Skipping installation." + return 1 + else + echo "⚠️ Found bun version $installed but recommended is $BUN_VERSION." + if [ "${CLAUDE_CODE_REMOTE:-}" != "true" ]; then + return 1 + fi + return 0 + fi + else + echo "πŸ” bun not found in PATH." + if [ -z "$BUN_VERSION" ]; then + echo "⚠️ No BUN_VERSION specified and bun not installed. Skipping." + return 1 + fi + return 0 + fi +} + +if check_bun_not_installed; then + echo "🎯 Installing Bun version: $BUN_VERSION" + curl -fsSL https://bun.sh/install | bash -s "bun-v${BUN_VERSION}" + echo "βœ… Bun installation complete" + bun --version +fi + +# Only run install if node_modules doesn't exist +if [ ! -d "$PROJECT_DIR/node_modules" ]; then + echo "πŸ“¦ Running bun install (node_modules not found)..." + cd "$PROJECT_DIR" && bun install +else + echo "βœ… Skipping bun install (node_modules already exists)" +fi + +# Only run codegen if the script exists in package.json +if [ -f "$PROJECT_DIR/package.json" ]; then + HAS_CODEGEN=$(grep -o '"codegen"[[:space:]]*:' "$PROJECT_DIR/package.json" 2>/dev/null || echo "") + if [ -n "$HAS_CODEGEN" ]; then + echo "πŸ”„ Running codegen..." + cd "$PROJECT_DIR" && bun run codegen + else + echo "βœ… Skipping codegen (no codegen script in package.json)" + fi +fi + +echo "βœ… Bun environment setup complete" + +exit 0 diff --git a/skills/plugins/bun/skills/bun/SKILL.md b/skills/plugins/bun/skills/bun/SKILL.md new file mode 100644 index 0000000..5a56285 --- /dev/null +++ b/skills/plugins/bun/skills/bun/SKILL.md @@ -0,0 +1,80 @@ +--- +description: Bun runtime preferences and version management +--- + +# Bun Guidelines + +Always prefer Bun over Node.js for all operations. + +## Command Preferences + +| Use | Instead of | +|-----|------------| +| `bun` | `node` | +| `bunx` | `npx` | +| `bun install` | `npm install`, `yarn`, `pnpm install` | +| `bun run