Skip to content
ElliotDrelPublic

About

A collection of Claude Code + ChatGPT + Codex skills by Elliot Drel. Their goal is to help COACH you on industry best practices in (AI Use, Software Dev, Leadership, and Productivity)

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

407 Commits

Folders and files

Repository files navigation

E-Stack - elliot-stack

npm version license

A curated skill pack by Elliot Drel for Claude Code and other agents that support the installed skills directory. One command installs the pack.

Install

npx elliot-stack@latest

This 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. Agents configured to discover ~/.agents/skills/ can load the pack. Host-specific commands, hooks, and monitoring features depend on the agent integration.

Skills

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 or Codex chat sessions — a short subject you can skim, plus project and keywords you can grep
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 when preparing to negotiate with an outside counterpart; hard conversations with your own team go to Leadership Coach, and the message itself to Email Writer or Cold Message Writer
CLAUDE.md Optimizer /estack-claude-md-optimizer Creates, audits, and maintains concise CLAUDE.md / AGENTS.md instructions, preserving project conventions and the chosen canonical file while applying authorized edits
Cold Message Writer /estack-cold-message-writer Writes first-touch messages to strangers with a truthful, recipient-specific hook and a clear ask
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 Markdown review viewer with versioned snapshots, threaded comments anchored to quoted text, and a feedback handoff to the agent
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 email to someone who already knows the sender — subject lines, openers, single weightless asks, scheduling without round-trips, and a human voice; first-touch mail to a stranger is Cold Message Writer
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 leadership decisions using responsibility-centered frameworks for delegation, team development, management, difficult conversations, meetings, and communication, with practical artifacts sized to the request
Migrate Claude Session History /estack-migrate-claude-session-history Moves a Claude Code transcript and subagent sidecars between projects with path rewriting, a migration note, verification, and retained recovery backups
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 Helps choose outcomes and plan execution using RPM, prioritization filters, and momentum exercises, with scope and pace matched to real constraints
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 Turns an unclear request into a usable prompt or work brief, using goal shaping, scope checks, and definitions of done where needed
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 or reuses external GitHub repositories for source-grounded code research while preserving cached work
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

Hooks

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.

How it works

  • 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/
  • SessionStart adapters 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 // @version comment), 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.

Updating

Skills update automatically on session start in Claude Code and Codex. To force an update manually:

npx elliot-stack@latest

Configuration

Everything 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_SKILL_PREFIX estack- Set to none to install skills under their short names
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.

Skill names. Skills install prefixed by default: /estack-email-writer, /estack-repo-search. Set ESTACK_SKILL_PREFIX=none (or install with --no-prefix) and they install as /email-writer and /repo-search instead, with every cross-reference inside the skills rewritten to match. Change the value later and the next session start reconciles an existing install to it — the old names are retired and the same skills are reinstalled under the new ones, after backing up the previous files and preserving per-skill .env files. The old name is retired only after its replacement installs successfully. Anything a skill saved stays put: state directories keep their prefixed names either way, so /flight-planner still reads the ~/.e-stack/estack-flight-planner/config.json you already had. Two things to know before turning the prefix off: the short names are ordinary ones like notify and repo-search, so if you already have a skill of your own on one of them it gets copied to ~/.estack-backup/ and replaced (the installer names it in a warning first); and every doc here writes the prefixed form. Silent updates defer a switch when the source is edited or the destination belongs to another skill, preserving both and printing a diagnostic; run the manual installer to review it. Startup updates back up foreign skills before replacement and identify them separately from local edits. Existing backup directories are retained; newer copies get unique suffixes.

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. Opposing flags such as --prefix --no-prefix are rejected before any changes. --dry-run never migrates settings or writes files, even when combined with --startup or --silent. --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, and --prefix / --no-prefix do the same for the estack- prefix on skill names.

Requirements

  • Claude Code CLI installed (other agents that read ~/.agents/skills/ work too)
  • Node.js 18+

Contributing

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.

The Astra and Fable audit records the prompting rationale, retained skill value, and verification scope.

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/.

Testing locally

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.

License

MIT

About

A collection of Claude Code + ChatGPT + Codex skills by Elliot Drel. Their goal is to help COACH you on industry best practices in (AI Use, Software Dev, Leadership, and Productivity)

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages