A curated set of Claude Code skills by Elliot Drel. One command installs them all.
npx elliot-stack@latestThis installs skills to ~/.agents/skills/ and symlinks them into ~/.claude/skills/, then registers SessionStart hooks for Claude Code and Codex so your skills stay up to date automatically. Any agent that reads from ~/.agents/skills/ (OpenClaw, Codex, ChatGPT, Cursor, and others) will pick them up automatically with no extra config.
| Skill | Command | Description |
|---|---|---|
| Active Learning Tutor | /estack-active-learning-tutor |
Tutors a student through exam preparation using active learning — questioning, gap diagnosis, and concept mastery tracking |
| Better Title | /estack-better-title |
Renames Claude Code chat sessions with descriptive titles |
| Book Extractor | /estack-book-extractor |
Turns a book or doc set (PDF, EPUB, DOCX, HTML, RTF, TXT/MD) into a standalone, on-demand Agent Skill — deterministic text extraction, then per-chapter reference files, glossary, cheatsheet, and a master index generated by the agent, installed outside the e-stack pack |
| Chris Voss | /estack-chris-voss |
Applies negotiation principles from Never Split the Difference |
| CLAUDE.md Optimizer | /estack-claude-md-optimizer |
Creates, refines, and maintains CLAUDE.md / AGENTS.md files as short hand-authored letters of intent — welcomes first-time users with the why behind the format and coaches through pushback instead of enforcing rules |
| Cold Message Writer | /estack-cold-message-writer |
Writes cold outreach messages — LinkedIn, email, or X DMs — that read as hand-typed for one person and actually get replies |
| Customer Discovery | /estack-customer-discovery |
Guides through customer discovery — validating ideas, outreach, interviews, and analysis |
| Doc Review Viewer | /estack-doc-review-viewer |
Opens a local live-reloading viewer for a markdown document — versioned snapshots, threaded comments anchored to quoted text, and a Send to Claude button that wakes the agent without switching back to the terminal |
| Drive CLI Agent | /estack-drive-cli-agent |
Drives another AI coding agent CLI programmatically — Codex (codex exec) and Claude Code headless (claude -p) — under existing subscriptions, with the invocation templates, structured-output parsing, and documented footguns (stdin hangs, timeout gaps, sandbox traps, false-success signals) needed to do it reliably |
| Email Writer | /estack-email-writer |
Writes, edits, and reviews any email — subject lines, openers, single weightless asks, scheduling without round-trips, and a human voice; pairs with Cold Message Writer for first-touch outreach |
| Flight Planner | /estack-flight-planner |
Finds flights between two airports and pairs them with a ground shuttle on either end of the trip. Automates what is repetitive and easy to get wrong (fetching every route, parsing the results, timezone-aware buffer math) and leaves filtering and ranking to judgment. Saves preferences and reusable trip presets |
| GitHub Issue Tracker | /estack-github-issue-tracker |
Tracks and manages GitHub issues across repos |
| Leadership Coach | /estack-leadership-coach |
Coaches real leadership decisions through the lens of responsibility-centered leadership (Lencioni's The Motive): reads the motive behind every request, catches abdication dressed up as delegation, and coaches six areas — delegation, developing your team, managing your people, difficult conversations, running meetings, and repetitive communication — each ending in a concrete artifact |
| Migrate Claude Session History | /estack-migrate-claude-session-history |
Moves a Claude Code session (transcript + subagent sidecars) from one project to another with full path-encoding rewrite, migration note, and end-to-end verification so /resume works under the new project |
| Notify | /estack-notify |
Arms a desktop toast at the end of every turn for the current session, per-session so one chat never pings for another, with a bell in the statusline while it is armed |
| PR Description Writer | /estack-pr-description |
Rewrites a PR description for a maintainer who reviews product logic and risk — decisions with tradeoffs, real verification, and DB/migration/operational status, sourced from the actual diff, not the old description |
| Productivity Prioritization Coach | /estack-productivity-prioritization-coach |
Coaches you through outcome-focused planning using RPM (Result, Purpose, Massive Action Plan) and five leverage filters — including an MVP anchor and a speed-to-outcome cut — to find the fastest path to a shippable result, plus a high-agency momentum engine for when you're stuck on execution, not choice |
| PDF to Markdown | /estack-pdf-to-md |
Converts PDFs to Markdown or plain text using the RunPulse API — parallel page batching, cost-saving blank-page filter, scanned-PDF OCR support, and encrypted-PDF handling |
| Prompt Builder Coach | /estack-prompt-builder-coach |
Four-part kit for shaping, building, auditing, and scoping prompts for AI agents |
| Purdue Knowledge Lab Stickers | /estack-purdue-stickers |
Takes a sticker idea to submission-ready files for Purdue's Knowledge Lab (free student sticker printing) — designs the SVG, renders a print-ready transparent 300 DPI PNG, and walks the Lab's booking-site submission, with the BuildPurdue design system, logo, six ready-made designs, and the official guide preloaded |
| Read Agent Session History | /estack-read-agent-history |
Searches, reads, recovers, and analyzes local AI coding-agent session history — Claude Code and Codex (OpenAI codex-cli) — across sessions, projects, and backups. A CLI for common lookups and reports (timeline, engagement, and other cross-session modes merge both agents by default via --agent), plus a documented Python library, with a worked example, for the custom queries no mode covers. Batch-checks a list of saved session IDs against live and every backup root in one sweep, separating still-resumable from restorable-from-backup from permanently gone |
| Repo Search | /estack-repo-search |
Clones and searches external GitHub repos to answer questions about their code |
| Sponsorship Offer Builder | /estack-sponsorship-offer-builder |
Coaches you through defining a real sponsorship offer (Hormozi value equation, Enns three-option pricing, sponsorship-industry research preloaded), then optionally builds the packet, the cold email chain, and the sponsor-meeting script |
| VS Code File Recovery | /estack-vscode-file-recovery |
Recovers permanently deleted files from VS Code or Cursor Local History, Claude session transcripts, or Windows Shadow Copies |
| Hook | Purpose |
|---|---|
| estack-statusline | Statusline showing model, context tokens used, project, rate limits, and an estack-notify bell |
| repo-search-nudge | Suggests estack-repo-search when WebFetch/WebSearch hits GitHub |
| estack-startup-update-core | Shared utility that updates the installed E-Stack package |
| estack-claude-startup | Claude Code adapter for the shared SessionStart updater |
| estack-codex-startup | Codex adapter for the shared SessionStart updater |
The shared startup-hook source installs to ~/.agents/hooks/. Claude Code and Codex each register their host-specific adapter in their own configuration files (~/.claude/settings.json and ~/.codex/hooks.json).
Important: E-Stack keeps the reusable startup-hook source in ~/.agents/hooks/,
but each host still needs its own hook registration because Claude Code and Codex
discover lifecycle hooks from different configuration files.
- Skills install to
~/.agents/skills/estack-*/(symlinked from~/.claude/skills/estack-*/; auto-detected by any agent that reads~/.agents/skills/, including OpenClaw, Codex, ChatGPT, and Cursor) - The startup-update core and its two adapters live once in
~/.agents/hooks/; other E-Stack hook scripts remain Claude Code-only under~/.claude/hooks/ SessionStartadapters auto-update skills each time you open Claude Code or Codex; Codex asks you to review and trust its new command once in/hooks- If you've made local edits to a skill or hook, the installer detects the conflict and lets you choose: overwrite, skip, or merge
- Every skill carries its own semver (
version:in SKILL.md frontmatter; hooks use a// @versioncomment), independent of the package version — update messages show exactly what moved, e.g.estack-chris-voss (1.0.0 → 1.1.0). Under the hood, updates are detected by content hash, so a change can never be missed; a release-time check (scripts/check-versions.cjs) guarantees every content change ships with a version bump.
Skills update automatically on session start in Claude Code and Codex. To force an update manually:
npx elliot-stack@latestEverything you configure lives in one file, ~/.e-stack/.env — the same file every skill in the pack reads its API keys from. Format is KEY=value, one per line:
# ~/.e-stack/.env
SERPAPI_KEY=abc123
ESTACK_SKILLS_DIR=/opt/agents/skills
ESTACK_NO_STATUSLINE=1
| Variable | Default | What it does |
|---|---|---|
ESTACK_SKILLS_DIR |
~/.agents/skills |
Where skill files are installed |
ESTACK_HOOKS_DIR |
~/.claude/hooks |
Where Claude hook scripts are installed |
ESTACK_BACKUP_DIR |
~/.estack-backup |
Where your local changes are backed up |
ESTACK_NO_STATUSLINE |
unset | Set to 1 to remove the statusline |
ESTACK_HOME |
~/.e-stack |
Where this file itself lives (env-only) |
Resolution order is the one every skill uses: the live process environment first, then the file. So exporting a variable overrides it for a single run without editing anything. Path values must be absolute; a relative one is ignored and the default applies. The installer only ever replaces or appends its own line, so your API keys are never disturbed.
Statusline. E-Stack ships a statusline showing the model, tokens used in the current context window, the project folder, rate limits, and an estack-notify bell. A first install claims the statusLine slot even if you already have one configured, so you can see what it does; your previous value is saved to ~/.estack-backup/statusLine.json. From then on it is only updated while it is still E-Stack's. Switch back to your own or clear it, and no later update touches it again. --no-statusline removes it outright and --statusline brings it back.
Installer flags. --install applies changes (the installer previews by default when run from a clone). --yes answers the locally-modified prompt with "back up my changes, install the latest" and --skip-modified answers it with "keep my versions" — pass one of them from any script or CI job, since the prompt otherwise reads EOF on a non-interactive stdin and aborts. --statusline / --no-statusline turn the statusline on or off and remember the choice.
- Claude Code CLI installed (other agents that read
~/.agents/skills/work too) - Node.js 18+
External contributions are welcome via pull request. Direct pushes to main are blocked — fork the repo, push your changes to a branch, and open a PR. Only the maintainer (Elliot) can merge to main and cut releases. This is intentional: elliot-stack is a security-sensitive npm package and the release tag can only be pushed by the maintainer.
Adding or editing a skill? Authoring conventions (versioning, doc listings, feedback section) are in docs/skill-authoring.md, and coaching-style skills can start from the scaffold in templates/.
Run the installer straight from your checkout to preview what a real install would do to your ~/.claude/:
node bin/install.cjs # dry run — previews changes, writes nothing
node bin/install.cjs --install # actually sync your local edits to ~/.agents/skills/ + ~/.claude/skills/Run from the repo, the installer dry-runs by default so testing never clobbers your live install. Pass --install once the preview looks right. (--dry-run forces a preview even under npx.)
See docs/publishing.md for the release flow and security model.
MIT