Global Claude Code skills and agent personas for scientific computing workflows.
Subagent personas live in agents/ and are deployed to ~/.claude/agents/. Each adopts a domain-expert reviewer stance — adversarial, ranked concerns, no rewriting.
| Agent | Purpose |
|---|---|
| attribution-reviewer | Reviews climate-attribution claims for counterfactual, baseline, framing, uncertainty, model adequacy, and overclaiming |
| meteo-reviewer | Reviews weather event analyses and atmospheric mechanism claims for dynamical, physical, observational, and hydrological rigor |
| stats-reviewer | Reviews statistical analyses for estimator validity, causal identification, inference under dependence, model specification, multiple testing, and ML validity |
| scicomm-reviewer | Reviews public-facing science products for audience specificity, relevance framing, cognitive load, jargon, solutions/benefits, and uncertainty language (COMPASS principles) |
| Skill | Command | Purpose |
|---|---|---|
| figure-review | /figure-review |
Audit a scientific figure for publication-readiness: colormaps, uncertainty, axis labels, caption completeness, and claim support |
| grill-me | /grill-me |
Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. By Matt Pocock |
| handoff | /handoff |
Create or update a durable project handoff for the next AI agent/session |
| lit-review | /lit-review |
Search and synthesize scientific literature from Zotero, arxiv, bioRxiv, Google Scholar, and Consensus |
| overbaked | /overbaked |
Audit a document, plan, or code for over-engineering, verbosity, and scope creep |
| pathfinder | /pathfinder |
Router: a navigable map of every skill and subagent and when to reach for each; resolves the reviewer-2-vs-panel review decision |
| resume | /resume |
Resume work from repo-local handoff state |
| reviewer-2 | /reviewer-2 |
Adopt a critical-reviewer stance to stress-test a claim, result, or manuscript section |
| slack-message | /slack-message |
Draft an internal Slack message grounded in current project context and recent workflow |
| tab-setup | /tab-setup |
Assign a unique high-contrast color and name to the current Claude Code session. Forked from Jerald Huff |
| unstale | /unstale |
Detect and repair staleness residue in Python library code and notebooks — dead imports, dead code, resolved TODOs, stale comments/docstrings, and HANDOFF blockers |
| update-claude-md | /update-claude-md |
Update CLAUDE.md with durable knowledge from the current session |
| write-new-skill | /write-new-skill |
Create new Claude Code skills with proper structure and progressive disclosure |
Skills split on an invocation axis. User-invoked orchestrators you type explicitly carry disable-model-invocation: true (grill-me, handoff, resume, slack-message, tab-setup, write-new-skill, pathfinder); model-invokable skills Claude may reach mid-task are left discoverable (figure-review, lit-review, overbaked, reviewer-2, unstale, update-claude-md). See CLAUDE.md for the composition rule and a known token-budget caveat.
Clone the repo and deploy all skills and hooks:
git clone https://github.com/dgilford/ai-tools.git ~/Projects/ai-tools
cd ~/Projects/ai-tools
bash scripts/sync.sh pushpush installs skills to ~/.claude/skills/, agents to ~/.claude/agents/, and registers the tab-setup boot hook (see below).
AGENTS.md- Codex entry point. It points Codex atCLAUDE.mdfor shared durable repo guidance.CLAUDE.md- shared source of truth for repository workflow notes, skill-development conventions, sync behavior, and session lifecycle.BACKLOG.md- durable in-repo task tracker (open tasks, someday/explore, connector notes). Transient per-session state lives in the gitignored.ai/.agents/- source copies of Claude Code subagent personas. Edit here first, then deploy withscripts/sync.sh push(syncs to~/.claude/agents/).skills/- source copies of Claude Code skills. Edit here first, then deploy withscripts/sync.sh push.scripts/sync.sh- pushesskills/to~/.claude/skills/andagents/to~/.claude/agents/, syncs the externaltab-setupskill, and registers the startup hook.scripts/ai-sessions.sh- shell function for listing live Claude and Codex CLI sessions with resume commands.templates/- reusable scaffolds (e.g.CLAUDE_scientific_python.md, a fill-in-the-blanks starter CLAUDE.md for new scientific-Python projects).settings/- commit-safe global Claude Code settings plus restore notes. Machine-localsettings.local.jsonbackups stay gitignored.tab-setup/- external skill checkout fromdgilford/tab-setup;sync.sh pushrefreshes this before copying its scripts intoskills/tab-setup/.vscode-extension/- small helper extension for applying pending Claude tab colors/names in VS Code-compatible remote servers.
Every new Claude Code session is automatically named and color-coded at boot via the tab-setup skill's SessionStart hook (hook-startup.sh). The skill is self-contained, originally developed by JeraldHuff/tab-setup and forked to dgilford/tab-setup.
- Name: Haiku generates a logical 2-word adjective-noun name from the project directory name (e.g.,
fiscal-ledgerfor a finance project). Falls back to a deterministic wordlist hash if the API is unavailable. - Color: Picks the next color not already in use by another running Claude session. Persists through
/clearandclaude -c.
Context reminders at startup:
[resume]— if.ai/HANDOFF.mdexists in the project, surfaces the objective and first next action so you know where you left off without running/resume[env]— reminds you to activate the project environment. Detection order:pixi.tomlin project →run: pixi shellenvironment.ymlin project →activate: conda <name>.python-versionin project → shows Python version.claude-sessionin project → explicit override (e.g.,conda: my-env)~/.claude/session-init-config.json→ machine-level default (see below)
Machine-level environment default (e.g., Jupyter server):
After sync.sh push, a template config is created at ~/.claude/session-init-config.json. Edit it to set a default env reminder for every session on that machine:
{ "default_env": "pixi shell" }Leave default_env empty ("") to disable the machine-level reminder.
Requirements:
- Claude Code v2.1.152+
- Python 3 (pre-installed on macOS/Linux)
ANTHROPIC_API_KEYin~/.claude/settings.jsonenvblock (optional — falls back to wordlist hash if absent)
Uninstall:
python3 -c "
import json, os
p = os.path.expanduser('~/.claude/settings.json')
s = json.load(open(p))
s.get('hooks', {}).pop('SessionStart', None)
json.dump(s, open(p, 'w'), indent=2)
"
rm ~/.claude/session-init-config.jsonscripts/ai-sessions.sh defines an ai-sessions shell function that lists your running Claude/Codex CLI sessions with their resume commands. Source it directly from the repo (no copy — git pull keeps it current) by adding to ~/.bashrc (or ~/.zshrc):
source ~/Projects/ai-tools/scripts/ai-sessions.shRun ai-sessions to list sessions. Claude's own recap (away_summary) is shown by default for each session.
Skills in skills/ and agents in agents/ are the source of truth.
bash scripts/sync.sh push # deploy skills/ → ~/.claude/skills/; agents/ → ~/.claude/agents/
bash scripts/sync.sh pull # pull ~/.claude/skills/ → skills/; ~/.claude/agents/ → agents/After pull, review git diff skills/ agents/ — pull brings in all globally installed skills and agents, including any not yet tracked here.
/resume # start of session — loads handoff, reports state
/handoff # end of session — writes handoff, updates CLAUDE.md
/update-claude-md # anytime — promote new knowledge to CLAUDE.md
The .ai/ directory is repo-local (gitignored) and holds session state. Add it to .gitignore in any project where you use these skills.
Copyright (c) 2026 Daniel Gilford
This project is licensed under the MIT License — see the LICENSE file for details. You are free to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of this software, with attribution.