AI-powered skills for PM, Data, QA, Dev workflows. PRD generation, GTM tracking, documentation management, and more.
| Component | Count | Description |
|---|---|---|
| Skills | 56 | PM, Dev, Backend, Frontend, QA, UX, Data, Detect, WordPress, Release, Security, DevOps, Core |
| Agents | 3 | quality-reviewer, context-scout, visual-reviewer |
| Hooks | 7 | Setup, SessionStart, PreToolUse, PostToolUse, Stop, TaskCompleted, TeammateIdle |
| Output Styles | 2 | enterprise-doc, concise-summary |
"Jaan" is a Persian word meaning "soul" or "life." When you say "jaan-e man" β "my soul" β you're expressing the deepest form of care.
Jaan.to means "giving soul to something" β a person, a project, a product. It's the act of breathing life into work that would otherwise feel mechanical.
claude
/plugin marketplace add parhumm/jaan-to
/plugin install jaan-to
/jaan-init
# One-command installer (recommended for end users)
bash <(curl -fsSL https://raw.githubusercontent.com/parhumm/jaan-to/main/scripts/install-codex-skillpack.sh)
# Fallback if you're in this repo locally
bash ./scripts/install-codex-skillpack.shThen:
- Restart Codex.
- Open your project in Codex.
- Run
/jaan-initonce. - Use
/skills,/jaan-to:*,/jaan-init, or native$skillmentions.
Examples:
/skills
/jaan-init
/jaan-to:pm-prd-write
$pm-prd-write
In Codex, /jaan-to:* and /jaan-init are intentionally preserved as aliases for native $skill.
Development version:
claude
/plugin marketplace add parhumm/jaan-to#dev
/plugin install jaan-to
/jaan-init
Switch stable/dev:
/plugin uninstall jaan-to
/plugin marketplace add parhumm/jaan-to # stable
/plugin marketplace add parhumm/jaan-to#dev # dev
/plugin install jaan-to
/jaan-init
Check installed version:
/plugin list
# Claude local dev
claude --plugin-dir /path/to/jaan-to
# Build both runtime targets
./scripts/build-all-targets.sh
# Build Codex skillpack source
bash ./scripts/build-codex-skillpack.sh
# Skillpack drift guard
bash ./scripts/validate-codex-skillpack.sh
# Skill PR prep (regenerate + validate + stage skillpack)
bash ./scripts/prepare-skill-pr.sh
# Integrated dual-runtime smoke
bash scripts/test/e2e-dual-runtime-smoke.sh./scripts/build-target.sh codex
cd ./dist/jaan-to-codex
./jaan-to setup /path/to/your-project --mode localsetup --mode auto resolves to global if ~/.agents/skills/jaan-to-codex-pack exists, otherwise local.
- Installer
automethod SSL failure:- Wrapper retries automatically with
--method git.
- Wrapper retries automatically with
$skillambiguity from duplicate names:- Remove duplicate project
.agents/skills/<jaan-to-skill>entries and use global mode.
- Remove duplicate project
- Skills not appearing:
- Restart Codex after install/reinstall.
Claude Code installation, command namespace (/jaan-to:*), and plugin behavior remain unchanged.
Codex support is added as a thin adapter and runner layer without changing Claude runtime contracts.
The bootstrap hook automatically creates jaan-to/ in your project with:
context/β Config and boundary templates (customize for your project)templates/β Output templates for each skilllearn/β Learning seeds (improve over time)outputs/β Generated outputs (PRDs, tracking code, research, etc.)docs/β Reference docs (style guide, skill spec)
./scripts/verify-install.sh /path/to/your-projectjaan.to follows Claude Code best practices by NOT shipping with configuration files. All settings are OPTIONAL and should be added to YOUR project's .claude/settings.json if needed.
Why? Configuration is project-specific, not plugin-specific. This keeps the plugin portable and ensures you maintain full control over permissions and environment variables in your own codebase.
See Recommended Permissions below for examples of common permission patterns.
| Command | Description | Output |
|---|---|---|
/jaan-to:pm-prd-write |
Generate comprehensive PRD from initiative | jaan-to/outputs/pm/{slug}/prd.md |
/jaan-to:pm-story-write |
Generate user stories with Given/When/Then ACs following INVEST principles | jaan-to/outputs/pm/stories/{slug}/stories.md |
Example:
/jaan-to:pm-prd-write "user authentication with OAuth2"
| Command | Description | Output |
|---|---|---|
/jaan-to:data-gtm-datalayer |
Generate GTM tracking code and dataLayer spec | jaan-to/outputs/data/gtm/{slug}/tracking.md |
Example:
/jaan-to:data-gtm-datalayer "checkout flow tracking"
| Command | Description | Output |
|---|---|---|
/jaan-to:docs-create |
Create documentation with templates | docs/ |
/jaan-to:docs-update |
Audit and update stale documentation | Updates existing docs |
Example:
/jaan-to:docs-create "API integration guide"
| Command | Description | Output |
|---|---|---|
/jaan-to:pm-research-about |
Deep research or add file/URL to index | jaan-to/outputs/research/{slug}/ |
Examples:
/jaan-to:pm-research-about "React Server Components best practices"
/jaan-to:pm-research-about https://example.com/article
| Command | Description | Output |
|---|---|---|
/jaan-to:learn-add |
Add lesson to project's LEARN.md | jaan-to/learn/LEARN.md |
Example:
/jaan-to:learn-add "Always validate email format before API submission"
| Command | Description | Output |
|---|---|---|
/jaan-to:pm-roadmap-add |
Add prioritized items to project roadmap | jaan-to/outputs/pm/roadmap/ |
/jaan-to:skill-create |
Create new skill with wizard | skills/{name}/ |
/jaan-to:skill-update |
Update existing skill | Updates skill definition |
Example:
/jaan-to:pm-roadmap-add "Implement dark mode toggle"
jaan.to includes specialized agents that enhance skill execution:
| Agent | Purpose | Usage |
|---|---|---|
| quality-reviewer | Reviews outputs for completeness, accuracy, and quality standards | Automatically invoked by skills that require quality checks |
| context-scout | Gathers relevant context from your codebase before generation | Automatically invoked by skills that need project context |
jaan.to runs a bootstrap script automatically on your first session. This creates:
jaan-to/outputs/directory for generated filesjaan-to/learn/directory for accumulated knowledgejaan-to/.gitignoreto exclude temporary files
Enhance jaan.to's understanding of your project by customizing these files in your project (after installing the plugin):
<!-- jaan-to/context/tech.md -->
## Languages
- Backend: Python 3.11, FastAPI
- Frontend: TypeScript, React 18
## Infrastructure
- Cloud: AWS (ECS, RDS, S3)
- Database: PostgreSQL 15<!-- jaan-to/context/team.md -->
## Team Size
- 2 engineers, 1 PM, 1 designer
## Sprint Cadence
- 2 weeks, story points, Monday start<!-- jaan-to/context/integrations.md -->
## Analytics
- Google Analytics 4
- GTM container ID: GTM-XXXXXXX
## Project Management
- Jira workspace: https://company.atlassian.netConfigure permissions in your project's .claude/settings.json:
Best for: Reviewing generated outputs, learning from examples
{
"permissions": {
"allow": [
"Write(jaan-to/**)"
],
"deny": [
"Bash(*)",
"Write(src/**)",
"Write(.env*)"
]
}
}Best for: Individual contributors generating specs, tracking, documentation
{
"permissions": {
"allow": [
"Write(jaan-to/**)",
"Bash(npm run *)",
"Bash(git status)",
"Bash(git diff *)"
],
"deny": [
"Write(.env*)",
"Bash(rm:*)",
"Bash(curl:*)"
]
}
}Best for: Team leads, PMs, architects managing documentation and workflows
{
"permissions": {
"allow": [
"Write(jaan-to/**)",
"Write(docs/**)",
"Write(jaan-to/outputs/**)",
"Bash(npm run *)",
"Bash(git *)"
],
"deny": [
"Write(.env*)",
"Bash(rm -rf *)"
]
}
}All generated files are written to jaan-to/outputs/ in your project directory:
jaan-to/
βββ outputs/
β βββ pm/{slug}/prd.md
β βββ data/gtm/{slug}/tracking.md
β βββ research/{slug}/report.md
βββ learn/
β βββ LEARN.md
βββ .gitignore
Recommended .gitignore entry:
jaan-to/outputs/
jaan-to/temp/
jaan.to automatically creates jaan-to/.gitignore with sensible defaults on first run.
If you previously used jaan.to as a standalone .claude/ setup, follow these steps to migrate:
# Remove standalone skill definitions (old naming)
rm -rf .claude/skills/pm-prd-write
rm -rf .claude/skills/data-gtm-datalayer
rm -rf .claude/skills/jaan-skill-create
rm -rf .claude/skills/jaan-skill-update
rm -rf .claude/skills/jaan-docs-create
rm -rf .claude/skills/jaan-docs-update
rm -rf .claude/skills/jaan-learn-add
rm -rf .claude/skills/jaan-research-about
rm -rf .claude/skills/jaan-research-add
rm -rf .claude/skills/jaan-roadmap-add
rm -rf .claude/skills/jaan-pm-roadmap-addRemove hooks from .claude/settings.json that reference jaan-to/hooks/:
{
"permissions": {
"allow": [
"Read(jaan-to/**)",
"Read(docs/**)",
"Write(jaan-to/**)",
"Glob",
"Grep"
],
"deny": [
"Write(src/**)",
"Write(.env*)",
"Bash(rm:*)"
]
}
}Remove the entire "hooks" section β hooks are now managed by the plugin.
If you customized context files in jaan-to/context/, migrate them to jaan-to/context/:
# Create new context directory
mkdir -p jaan-to/context
# Migrate your customizations
cp jaan-to/context/tech.md jaan-to/context/tech.md
cp jaan-to/context/team.md jaan-to/context/team.md
cp jaan-to/context/integrations.md jaan-to/context/integrations.md
# Clean up old structure
rm -rf jaan-to/Every skill follows a two-phase workflow with human approval:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PHASE 1: Analysis (Read-Only) β
β - Read context files β
β - Gather requirements β
β - Plan structure β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β HARD STOP: Human Approval β
β "Ready to generate? [y/n]" β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PHASE 2: Generation (Write) β
β - Generate output β
β - Quality check (via quality-reviewer agent) β
β - Preview β
β - Write to jaan-to/ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Why this matters: No accidental writes. You review the plan before anything happens.
Goal: Add OAuth2 authentication to your app
1. Research & PRD
/jaan-to:pm-research-about "OAuth2 best practices for SaaS"
/jaan-to:pm-prd-write "OAuth2 authentication with Google and GitHub"
2. User Stories
/jaan-to:pm-story-write from prd
β Generates: jaan-to/outputs/pm/stories/01-oauth2-auth/
3. Task Breakdowns
/jaan-to:frontend-task-breakdown from prd
β Frontend tasks: Component inventory, state machines, estimates
/jaan-to:backend-task-breakdown from prd
β Backend tasks: API endpoints, data models, security
4. QA & Analytics
/jaan-to:qa-test-cases from prd
β BDD scenarios with Given/When/Then
/jaan-to:data-gtm-datalayer "OAuth signup flow tracking"
β GTM dataLayer pushes for analytics
Flow Diagram:
Research β PRD β Stories β Tasks β QA + Tracking
β β β β β
Docs Context Tickets Code Analytics
Goal: Improve homepage based on user behavior
1. Analyze Heatmaps
/jaan-to:ux-heatmap-analyze "homepage-clicks.csv"
β Identifies: Low engagement on CTA, high scroll depth
2. Synthesize Research
/jaan-to:ux-research-synthesize "UX interview transcripts"
β Themes: Users want clearer value prop
3. Generate Microcopy
/jaan-to:ux-microcopy-write for homepage CTA
β 7 languages: English, Spanish, French, German, Arabic, Chinese, Japanese
Goal: Keep docs in sync with code changes
1. Detect Stale Docs
/jaan-to:docs-update --check-only
β Reports: 3 stale skill docs, 1 outdated hook doc
2. Fix Automatically
/jaan-to:docs-update --fix
β Updates docs based on code changes in last 7 days
3. Add New Documentation
/jaan-to:docs-create guide "API Integration Tutorial"
β Creates: docs/guides/api-integration-tutorial.md
βββββββββββββββ
β Initial β
β Request β
ββββββββ¬βββββββ
β
βββββΌβββββββββββββββββββββββββββββββββββββββββββββ
β Which workflow? β
ββββββββββββββ¬βββββββββββββ¬βββββββββββββββ¬ββββββββ€
β β β β β
ββββΌβββ ββββββΌβββββ ββββββΌββββββ ββββββΌββββββ β
β PRD β βResearch β β UX Res β β Docs β β
ββββ¬βββ ββββββ¬βββββ ββββββ¬ββββββ ββββββ¬ββββββ β
β β β β β
ββStories β β β β
ββTasks ββLearn ββMicrocopy ββUpdateβ
ββTests β
ββGTM β
β β
βββββββββββββββββββββββββββββββββββββββββββββ
β
ββββββΌββββββ
β Output β
β Files β
ββββββββββββ
jaan.to runs entirely on your machine. No telemetry, no analytics, no servers to trust.
| What | Details | |
|---|---|---|
| Reads | Project context | jaan-to/context/, jaan-to/config/ β your tech stack, team, boundaries |
| Writes | Generated outputs only | jaan-to/outputs/, jaan-to/learn/, jaan-to/templates/ |
| Never touches | Secrets & credentials | .env, SSH keys, API tokens, hidden directories |
| Network | None by default | Only pm-research-about (web search) and jaan-issue-report (GitHub) β both require explicit approval |
Every skill declares exactly which tools it can use. No skill has unrestricted shell access, unrestricted file editing, or access to secret files. Every write-heavy skill follows a HARD STOP pattern β you see a complete preview and approve before anything is written.
Path validation prevents directory traversal: a malicious settings.yaml with paths_outputs: "../../.ssh" is rejected using canonical (realpath) checks. Scripts use set -euo pipefail, temp files use mktemp with cleanup traps, and a PreToolUse security gate blocks dangerous commands (sudo, eval, curl | sh, rm -rf /).
Security standards are enforced automatically. A central validation script (scripts/validate-security.sh) checks skill permissions, shell script safety, hook integrity, and dangerous patterns. It runs on every PR to main, every release preparation, and every issue review β violations block the merge.
See Security Guide for full details on what jaan.to accesses and how privacy sanitization works.
jaan.to actively manages its context window footprint so your AI assistant stays fast and responsive, even with 44+ skills installed.
| Layer | What | Effect |
|---|---|---|
| Description budget | All skill descriptions share a 15,000-char budget | Skills beyond budget are silently dropped β jaan.to stays well under |
| Reference extraction | Large skills split into compact execution + on-demand reference | 25-60% reduction in per-invocation token cost |
| Fork isolation | Heavy analysis skills run in isolated subagents | Parent session never sees the 30-48K token analysis cost |
| CI enforcement | 6 automated gates prevent regression | SKILL.md cap, description budget, CLAUDE.md size, hook stdout cap |
Result: A typical session with 3 skill invocations saves 5,000-52,000 tokens versus an unoptimized plugin of equivalent capability.
See Token Strategy for the full architecture.
Go from a napkin sketch to a deployed product using jaan.to skill chains.
The Idea to Product Guide walks through the full pipeline β research, PRD, design, code generation, testing, and deployment β with minimum human intervention. Each skill's output feeds the next.
| Path | Skills | Time | Result |
|---|---|---|---|
| Fast Track | 8 skills | ~4 hours | Working MVP |
| Full Track | 20 skills | ~1 day | Production-grade app |
Define β Design β Build β Quality β Ship
| Document | Description |
|---|---|
| Getting Started | First skill in 5 minutes |
| Concepts | Core ideas explained |
| Skills Reference | All available commands |
| Creating Skills | Build your own skills |
| Configuration | Settings and context |
| Security | What jaan.to accesses and why your data stays safe |
| Token Strategy | How jaan.to manages context window efficiency |
| Vision | Philosophy and architecture |
| Roadmap | What's coming |
jaan.to is open source. To extend:
- Read Creating Skills
- Use
/jaan-to:skill-createto scaffold a new skill - Submit a PR
Claude Code validates plugin.json strictly. Only these fields are allowed:
name, version, description, author.
Component paths (skills, agents, hooks, commands) must not be declared β Claude Code auto-discovers them from standard directories.
If you see validation errors during install, check .claude-plugin/plugin.json for extra fields.
If skills don't appear after installing or updating the plugin:
/plugin uninstall jaan-to
/plugin install jaan-to@jaan-to
This reinstalls the plugin and refreshes the registry. You may also need to restart Claude Code (exit and reopen) for changes to take effect.
Ensure the plugin is properly installed:
/plugin list
You should see jaan-to with version 7.x.x. If not, reinstall:
/plugin marketplace add parhumm/jaan-to
/plugin install jaan-to
Proprietary. All rights reserved. See LICENSE for details.
Give soul to your workflow.