skills/git-project-status/SKILL.md
Generate comprehensive status reports for git repositories. Analyzes commits, codebase structure, type errors, branch health, dependency status, GitHub PRs/issues/CI, working tree changes, and optionally integrates with `td` (task management CLI) if a `.todos` folder is present. **TRIGGERS - Use this skill when:** - User asks for the status of a git project or repo - User asks "what's going on in [project]" or "give me an overview of [repo]" - User wants a project summary, progress report, or codebase overview - User asks about recent commits, code structure, or project health - User says "check my project" or "project status" **Output:** A rich, structured text report covering overview, branches, commit history, codebase breakdown, GitHub activity, dependency health, issues/errors, working tree changes, task management, and summary.
npx skillsauth add espennilsen/pi git-project-statusInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate a comprehensive status report for one or more git repositories.
Path resolution (in priority order):
/Users/espen/Dev/<project-name>.)Never ask the user for a path — resolve it using the rules above and run the report. The skill produces a structured report for each repo.
Each report MUST include these sections in order. Sections marked (Conditional) are only included when the relevant tool/data is available.
*)Format example:
Branches (4 total) * feature/typescript-refactor +12 ahead, 3 behind main (last: 2h ago) main up to date (last: 3d ago) fix/webhook-retry +2 ahead (last: 5d ago) old/experiment +1 ahead (last: 45d ago) ⚠ stale
Format as a simple two-column list — hash followed by message. Truncate long messages with "…".
d7bd8b feat: Integrate pi-crm-personal extension e0469f deps: Add pi-crm-personal as file: dependency 6638a4 fix(heartbeat): normalize db health-check path in checklist 8770c4 chore: update agent name note and add start:tui script bedca7 Merge 'hannah/td-2f5211-workon' — workon tool, cross-proj…
Format example:
Codebase (3,420 lines across 18 files) TypeScript 82% ████████████████░░░░ 2,804 lines HTML 9% ██░░░░░░░░░░░░░░░░░░ 308 lines SQL 5% █░░░░░░░░░░░░░░░░░░░ 171 lines Shell 4% █░░░░░░░░░░░░░░░░░░░ 137 lines
Counting rules:
Only include this section if the git remote origin points to GitHub (github.com) AND the gh CLI is available and authenticated.
Detect GitHub origin:
git remote get-url origin 2>/dev/null | grep -q "github.com"
Check gh is available and authenticated:
gh auth status 2>/dev/null
If both conditions are met, include:
gh pr list --state open --json number,title,headRefName,author,reviewDecision,statusCheckRollup,updatedAt --limit 20
Show for each PR:
gh issue list --state open --json number,title,labels,assignees,createdAt --limit 20
Show for each issue:
gh pr list --state merged --json number,title,mergedAt,author --limit 5
Show the 5 most recently merged PRs with merge date.
gh run list --limit 5 --json databaseId,displayTitle,status,conclusion,headBranch,createdAt
Show the 5 most recent workflow runs with:
If gh is not available or not authenticated, skip this entire section silently (do not show an error or placeholder).
Only include if the project has a dependency manifest.
Check for outdated packages based on project type:
Node.js (package.json exists):
npm outdated --json 2>/dev/null
Show: package name, current version, wanted version, latest version. Highlight major version bumps.
Rust (Cargo.toml exists):
cargo outdated 2>/dev/null
Python (requirements.txt or pyproject.toml exists):
pip list --outdated --format=json 2>/dev/null
Go (go.mod exists):
go list -u -m all 2>/dev/null
Format as a compact table if there are outdated deps:
Dependencies (3 outdated of 24 total) typescript 5.3.3 → 5.6.2 (major) eslint 8.56.0 → 8.57.0 (minor) @types/node 20.11 → 20.14 (minor)
If all dependencies are up to date, say "All N dependencies are up to date." If the outdated check tool is not available, skip gracefully.
Run appropriate type-checking or linting commands based on the project type:
npx tsc --noEmit 2>&1 (if tsconfig.json exists)python -m py_compile on source files, or mypy if configuredcargo check 2>&1 (if Cargo.toml exists)go vet ./... (if go.mod exists)If no errors are found, say "No type errors or lint issues detected."
If errors are found:
IMPORTANT: Install dependencies first if needed (check for node_modules, etc.) but do so silently. If type-checking tools aren't available or fail to install, skip this section gracefully and note it.
Scan all source files for common debt markers:
grep -rn --include="*.ts" --include="*.tsx" --include="*.js" --include="*.jsx" \
--include="*.py" --include="*.rs" --include="*.go" \
-E "(TODO|FIXME|HACK|XXX|WORKAROUND|TEMP)(\(|:| )" . \
--exclude-dir=node_modules --exclude-dir=.git --exclude-dir=dist --exclude-dir=build
Format as a compact list grouped by marker type:
Code Markers (7 found) TODO (4): src/db.ts:42 — add migration rollback support src/tool.ts:118 — handle edge case for empty contacts src/web.ts:55 — add pagination src/web.ts:201 — rate limiting FIXME (2): src/registry.ts:88 — race condition on concurrent register src/tool.ts:340 — incorrect type cast HACK (1): src/db.ts:167 — temporary workaround for SQLite locking
If none found, say "No TODO/FIXME/HACK markers found."
Only include if a test runner is detected.
Detect test configuration:
jest, vitest, mocha in package.json scripts or devDependenciescargo test (always available)pytest, unittest configgo test ./... (always available)Run the test suite and report:
# Node.js example:
npx vitest run --reporter=verbose 2>&1 # or npm test
Show:
Format example:
Tests (vitest) 32 passed ✅ 2 failed ❌ 1 skipped ⏭ Failures: src/db.test.ts > migrations > should rollback on error src/tool.test.ts > actions > should validate contact fields Coverage: 74% lines (if available)
If no test runner is detected, skip this section silently. IMPORTANT: Run tests with a timeout. If tests hang or take longer than 60 seconds, kill the process and note "Tests timed out after 60s."
Quick scan for potentially leaked secrets in tracked files:
# Check for common secret patterns in tracked files
git grep -lnE "(PRIVATE_KEY|SECRET_KEY|API_KEY|PASSWORD|TOKEN|Bearer )['\"]?=" -- '*.ts' '*.js' '*.py' '*.env*' '*.json' '*.yaml' '*.yml' 2>/dev/null
# Check if .env files are tracked
git ls-files | grep -E "^\.env"
# Check if common sensitive files are in .gitignore
Report:
.env files are tracked (⚠ warning if they are).gitignore covers common sensitive patterns (.env, *.pem, *.key)Format example:
Secrets Check ⚠ .env is tracked in git — should be in .gitignore ⚠ src/config.ts:12 — contains hardcoded API_KEY pattern ✅ .gitignore covers: .env, *.pem, *.key
If everything looks clean: "✅ No secrets exposure detected."
Only include this section if the working tree is dirty (has uncommitted changes).
Show a breakdown of:
git diff --cached --stat
git diff --stat
git ls-files --others --exclude-standard
Format example:
Uncommitted Changes Staged (2 files): M src/tool.ts (+15, -3) A src/newfile.ts (+42) Unstaged (1 file): M src/db.ts (+8, -2) Untracked (1 file): src/experimental.ts
If the working tree is clean, skip this section entirely.
Only include this section if a .todos directory exists in the project root.
Run td usage and include the output, covering:
Format this under a "Task Management" heading.
A 2-3 sentence summary covering:
A prioritized, numbered list of 3–5 concrete actions derived from the report findings. Only include items backed by actual findings — do not invent generic advice.
Draw from these categories (in rough priority order):
Format example:
Recommended Next Steps 1. 🔍 Review P0 issue td-31b69b "CRM plugin architecture" 2. 🔒 Add *.pem and *.key to .gitignore 3. 📦 Evaluate better-sqlite3 major upgrade (11 → 12) 4. 🧹 Delete 8 merged branches 5. 🚀 Start td-b02d69 "pi-crm-personal extension"
When executing this skill, follow these steps:
# 1. Navigate to project (default: current working directory)
cd <project_path_or_.>
# 2. Verify it's a git repo
git rev-parse --is-inside-work-tree
# 3. Get project metadata
# - Read package.json / Cargo.toml / pyproject.toml for name, version, description
# - Read first paragraph of README.md for description fallback
# - Get current branch: git branch --show-current
# - Get working tree status: git status --porcelain
# 4. Get branch info
git branch --format='%(refname:short) %(committerdate:relative)'
# For each branch, get ahead/behind vs default branch:
git rev-list --left-right --count main...branch-name
# Identify default branch:
git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@'
# 5. Get commit history
git log --oneline --no-decorate -n 5
git rev-list --count HEAD
git log --reverse --format="%ai" | head -1 # first commit date
git log -1 --format="%ai" # latest commit date
# 6. Analyze codebase — language breakdown
# Count lines per file extension, excluding generated/vendor dirs
# Group by language (e.g. .ts + .tsx = TypeScript)
find . -type f \( -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.jsx" \
-o -name "*.py" -o -name "*.rs" -o -name "*.go" -o -name "*.rb" \
-o -name "*.java" -o -name "*.c" -o -name "*.cpp" -o -name "*.h" \
-o -name "*.sh" -o -name "*.sql" -o -name "*.html" -o -name "*.css" \) \
-not -path "*/node_modules/*" -not -path "*/.git/*" -not -path "*/dist/*" \
-not -path "*/build/*" -not -path "*/target/*" -not -path "*/__pycache__/*" \
-not -path "*/.next/*" -not -path "*/coverage/*" \
-not -name "*.min.*" -not -name "*.map" -not -name "*.d.ts" \
-exec wc -l {} + | sort -rn
# 7. Check for GitHub remote and gh CLI
GITHUB_ORIGIN=$(git remote get-url origin 2>/dev/null | grep "github.com")
GH_AVAILABLE=$(gh auth status 2>&1 && echo "yes" || echo "no")
if [ -n "$GITHUB_ORIGIN" ] && [ "$GH_AVAILABLE" = "yes" ]; then
gh pr list --state open --json number,title,headRefName,author,reviewDecision,statusCheckRollup,updatedAt --limit 20
gh issue list --state open --json number,title,labels,assignees,createdAt --limit 20
gh pr list --state merged --json number,title,mergedAt,author --limit 5
gh run list --limit 5 --json databaseId,displayTitle,status,conclusion,headBranch,createdAt
fi
# 8. Check dependencies
# Node.js: npm outdated --json 2>/dev/null
# Rust: cargo outdated 2>/dev/null
# Python: pip list --outdated --format=json 2>/dev/null
# Go: go list -u -m all 2>/dev/null
# 9. Check for errors (language-specific)
# TypeScript: npx tsc --noEmit 2>&1
# Python: mypy or py_compile
# Rust: cargo check
# Go: go vet ./...
# 10. Scan for TODO/FIXME/HACK markers
grep -rn --include="*.ts" --include="*.tsx" --include="*.js" --include="*.jsx" \
--include="*.py" --include="*.rs" --include="*.go" \
-E "(TODO|FIXME|HACK|XXX|WORKAROUND|TEMP)(\(|:| )" . \
--exclude-dir=node_modules --exclude-dir=.git --exclude-dir=dist --exclude-dir=build
# 11. Run tests (if test runner detected, with 60s timeout)
# Node.js: timeout 60 npx vitest run --reporter=verbose 2>&1 || timeout 60 npm test 2>&1
# Rust: timeout 60 cargo test 2>&1
# Python: timeout 60 pytest --tb=short 2>&1
# Go: timeout 60 go test ./... 2>&1
# 12. Check for secrets exposure
git grep -lnE "(PRIVATE_KEY|SECRET_KEY|API_KEY|PASSWORD|TOKEN|Bearer )['\"]?=" -- '*.ts' '*.js' '*.py' '*.env*' '*.json' '*.yaml' '*.yml' 2>/dev/null
git ls-files | grep -E "^\.env"
# 13. Get uncommitted changes detail (if dirty)
if [ -n "$(git status --porcelain)" ]; then
git diff --cached --stat # staged
git diff --stat # unstaged
git ls-files --others --exclude-standard # untracked
fi
# 14. Check for .todos directory and run td usage if present
if [ -d ".todos" ]; then
td usage 2>&1
fi
# 15. Compile and format report
If the user provides multiple paths, generate a separate report for each project with a clear separator between them. Optionally provide a summary table at the end comparing projects.
See the user's example in the conversation for the target format and level of detail. Match that style closely:
tools
# pi-a2a Long-Running Tasks Skill ## Overview The pi-a2a extension supports **long-running tasks** that can execute for hours or days without timeouts. This is essential for: - Data processing pipelines - Batch operations - Research and aggregation tasks - External API jobs with unpredictable duration - Any A2A task that exceeds the standard timeout ## When to Use **Use long-running tasks when:** - Task execution time is unpredictable or known to exceed 10 minutes - The remote agent is proc
development
Orchestrate cmux terminal panes — split terminals, run parallel processes, read output from other panes, and use the built-in browser. Use when working inside cmux and you need to run a dev server, watch tests, spawn sub-agents, or preview web pages.
testing
Review UI designs and implementations for accessibility, consistency, usability, and visual quality. Use when asked to review a design, audit accessibility, check UI consistency, compare implementation against mockups, or evaluate a user interface.
tools
Create, review, and improve skills for Pi agents. A skill is a folder with a SKILL.md that teaches an agent specialized workflows, domain knowledge, or tool integrations. Use when asked to create a new skill, improve an existing skill, review a skill for quality, scaffold a skill from a workflow, or convert documentation into a skill. Also triggers on "make a skill for", "build a skill", "skill for [topic]", "teach the agent to", or "package this workflow as a skill".