Skills Reference
Skills live in skills/j-<name>/SKILL.md — the root-canonical location; .agents/skills/ and .claude/skills/ are generated mirrors, never the source of truth. Invoke a skill as /j-<name> (the directory-resolved slash form) or j.<name> (the frontmatter form) in any Claude Code session. Three permanent exceptions keep their bare names: /jenga, /jenga-permission-level, and /index (the latter has no SKILL.md and isn’t part of routing). Each skill’s SKILL.md defines its behaviour, and optionally its prefered_agent (the sub-agent it delegates to).
Setup & Planning
/j-init
Description: Initialize a new project with the standard directory structure, PROJECT_SUMMARY.md, workflow.json, git repo, and gitignore.
Output type: any
Invokes: /j-uncharted (conditional)
When to use: At the start of a new project — run this first, before anything else.
What it creates:
project/board/epics|stories|tasks/project/configs/workflow.jsonproject/queue/,project/logs/,project/rapports/,project/documentation/- Initial
.gitignoreand first git commit
Example:
/j-init
→ Created project/ directory structure
→ Created project/configs/workflow.json
→ Created project/PROJECT_SUMMARY.md (stub)
→ git init + initial commit: "chore: init jenga project structure"
/j-jbp
Description: Scaffold the project using the JengaBasePlate boilerplate.
Output type: any
Invokes: none
When to use: When you want a full project starter (not just the workflow scaffold). JBP includes opinionated structure for apps built with Jenga AI from the start.
Example:
/j-jbp
→ Clones JengaBasePlate into current directory
→ Installs dependencies
→ Runs /j-init automatically
/jenga
Description: Interactive-by-default board orchestrator with a fully automated escape hatch. Bare /jenga renders a picker and confirmation tree before scoping the run; /jenga <ids> resolves an explicit fuzzy-ID scope and confirms it; /jenga * reproduces the original zero-prompt behavior — decomposing any unbroken Epics into Stories, any unbroken Stories into Tasks, queuing all unqueued Tasks into todo.md, then executing every eligible item with no user prompts — until the board is fully started. /jenga <free-form text> (no ID pattern, not *) routes to the best-matching skill instead; prefix that free-form text with --enrich (e.g. /jenga --enrich something broke in the auth flow) to opt into board-context and documentation enrichment before the matched skill is invoked — reporting Board items found/Docs found counts alongside the routing decision. The flag is a no-op on the bare/<ids>/* forms (E53_S13_T01); the default (unflagged) natural-language path performs no enrichment scan, unchanged from before this flag existed.
Output type: id_list
Invokes: /j-do; any matched skill (conditional, when the argument is free-form natural-language text)
When to use: When you want to review and scope a run before it executes (bare /jenga or /jenga <ids>), or hands-free execution across the whole board via /jenga *. Jenga will read existing epics, decompose anything incomplete, and start executing.
Delegates to: Scrum Master (for decomposition), Developer (for execution)
Example:
/jenga
→ Reads PROJECT_SUMMARY.md
→ Finds E01 has no stories yet
→ Scrum Master decomposes E01 into S01, S02, S03
→ Decomposes each story into tasks
→ Queues all tasks in todo.md
→ Starts executing: /j-do on T01, T02, T03...
/j-pi-plan
Description: Define or expand project Epics in PROJECT_SUMMARY.md. Use at the start of a project to establish its foundation, or whenever adding major new features.
Output type: any
Invokes: none
When to use: When starting a new project, or when the user wants to plan a significant new area of work (new epic). Triggers on phrases like “new feature area”, “big change”, “expand the project”.
Delegates to: Scrum Master
Example:
/j-pi-plan
Scrum Master: "Tell me about the project. What are the major goals?"
You: "It's a habit tracker with social sharing and analytics"
→ Creates E01: Core Habit Tracking
→ Creates E02: Social Sharing
→ Creates E03: Analytics Dashboard
→ Writes all three to PROJECT_SUMMARY.md
/j-brainstorm
Description: Focused planning session with the Scrum Master before committing anything to the board. Explores, challenges, and refines ideas in dialogue.
Output type: any
Invokes: /j-todo (conditional)
When to use: Before you know exactly what you want to build. The Scrum Master will ask pointed questions, surface assumptions, and propose board mappings — but nothing is written until you say so.
Delegates to: Scrum Master (Brainstorm Mode)
Example:
/j-brainstorm
"I want to add notifications to the app"
Scrum Master: "Which users receive notifications and for what events?"
You: "Users get notified when a friend completes a shared habit"
Scrum Master: "That touches E02 (Social Sharing). Should this be a new story
under E02, or does it warrant its own epic if push + email + in-app are all needed?"
...
→ After agreement: "Ready to commit? → E02_S04: Habit Completion Notifications"
/j-deep-dive
Description: Multi-phase investigation workflow. Orchestrates information gathering, brainstorming, scrutiny, and solution assessment to produce a refined output document.
Output type: any
Invokes: /j-brainstorm, /j-examplify (conditional), /j-todo (conditional)
When to use: When a request needs thorough analysis before committing to a plan. Trigger phrases: “deep dive”, “investigate thoroughly”, “think this through properly”, “analyze this in depth”.
Delegates to: Scrum Master
Phases:
- Gather — collects all available information about the topic
- Brainstorm — generates and explores options interactively
- Scrutinise — challenges assumptions, surfaces risks
- Assess — evaluates options and produces a recommendation
Example:
/j-deep-dive on our auth strategy before we build it
Phase 1 — Scrum Master gathers: existing auth code, tech stack, threat model
Phase 2 — Brainstorms: JWT vs sessions vs OAuth, tradeoffs per use case
Phase 3 — Scrutinises: "JWT revocation is the riskiest assumption here"
Phase 4 — Produces: docs/auth-strategy-analysis.md with recommendation
/j-todo
Description: Add missions to project/todo.md, optionally linking them to epics and stories. Loops until done, then optionally executes the list.
Output type: any
Invokes: /j-do (conditional)
When to use: When you have specific features or tasks to add and want them tracked on the board.
Delegates to: Scrum Master
Example:
/j-todo
"Add rate limiting to the API"
→ Links to E02_S03 (or creates new story if none fits)
→ Writes to project/todo.md: E02_S03_T01
"Add request logging middleware"
→ Links to E02_S03_T02
Done. Run /j-do now? → Yes
/j-btw
Description: Capture a new mission mid-flow. Fits it into the Epic/Story structure and lets you choose to implement now or defer.
Output type: any
Invokes: none
When to use: When you think of something important while working on something else and don’t want to lose the idea but also don’t want to derail your current work.
Delegates to: Scrum Master
Example:
(While implementing auth)
/j-btw add a "remember me" checkbox to the login form
→ Scrum Master: "That fits under E01_S03 (Login UI). Add as T04?"
→ You: "Yes, defer it"
→ Written to board as E01_S03_T04, status: Pending
→ Returns to current task
/j-spinoff
Description: Capture a diverging topic mid-conversation. Collects context, optionally runs /j-brainstorm for prerequisites, saves a /j-todo entry, and returns focus to the primary thread.
Output type: any
Invokes: /j-brainstorm (conditional), /j-idea
When to use: When the conversation drifts to a new topic and you want to preserve both threads without losing context.
Delegates to: Scrum Master
Example:
(Mid-session on rate limiting)
You: "Oh, we should also think about caching strategy"
/j-spinoff
→ Scrum Master: "Captured: 'Evaluate caching strategy — Redis vs in-memory,
touched on during rate limiting discussion'. Want to /j-brainstorm prereqs?"
→ Saved to todo.md
→ "Returning to rate limiting..."
/j-idea
Description: Capture a loosely-defined idea to project/ideas.md — a lightweight, “maybe someday” log with no board or promotion overhead.
Output type: any
Invokes: none
When to use: When you have a rough idea worth remembering but don’t want the structured intake of /j-todo or an immediate board placement.
Delegates to: Scrum Master
What it does:
- Appends to
project/ideas.md(auto-created from a template if missing) - Loops for multiple ideas until you say you’re done
- Never executes, refines, or promotes the idea itself — promotion happens later, e.g. via
/j-brainstorm
Example:
/j-idea
"Maybe add a dark mode toggle to settings"
→ Appended to project/ideas.md
"Capture another idea, or done?" → Done
/j-playbook-new
Description: Guided wizard that walks you through authoring a new project-local playbook — id, name, description, keywords, examples, and an ordered list of skills — validated against the real skill/playbook catalogs and self-validated before success is ever reported.
Output type: any
Invokes: none
When to use: When you want to define your own reusable skill chain for j.jenga’s natural-language matching, beyond the built-in playbooks.
What it does:
- Validates id uniqueness and skill names against the live catalogs (never a hardcoded list)
- Writes
project/.playbooks/<id>.json - Re-validates the just-written file via
load-playbooks.sh lookupbefore declaring success
Example:
/j-playbook-new
"id: my-release-flow"
"name: My Release Flow"
→ skills: /j-commit, /j-dev-done
→ Written to project/.playbooks/my-release-flow.json
→ Confirmed loadable — invoke via j.playbook my-release-flow
/j-strategy
Description: Walk through a guided conversation to capture or update project/documentation/STRATEGY.md — covering Vision, Value Proposition, Scope, and Target Audience — one section at a time.
Output type: any
Invokes: none
When to use: When you want to capture or refresh the project’s strategic brief for investors/partners. Revenue model, pricing, and competitive analysis are always out of scope and never asked about.
Delegates to: Developer
Example:
/j-strategy
→ project/documentation/STRATEGY.md does not exist — running new capture flow
"What is the long-term direction or ambition for this project?" → [answer]
...
→ Written to project/documentation/STRATEGY.md — captured Vision, Value Proposition, Scope, and Target Audience.
Execution
/j-do
Description: Execute tasks from the scrum board. Reads from project/todo.md, resolves each entry to its full board context, and drives the Developer agent through implementation with the correct sender object and communication contract.
Output type: any
Invokes: /j-commit
When to use: When you’re ready to implement. The main execution skill.
Delegates to: Developer
Example:
/j-do
→ Reads todo.md: E01_S02_T01-jwt-middleware, E01_S02_T02-refresh-tokens
→ You select: E01_S02_T01
→ Builds sender object with task/story/epic IDs
→ Invokes Developer agent
→ Developer implements, Tester validates, board status updated
/j-dooo
Description: Parallel execution orchestrator. Calls /j-do to start implementations via sub-agents, then loops back to identify and offer parallelisable tasks until the user selects “Done”.
Output type: any
Invokes: /j-do
When to use: When multiple independent tasks are ready and you want to run them simultaneously to save time.
Delegates to: Scrum Master (orchestration), Developer (per task)
Example:
/j-dooo
→ Starts E01_S02_T01 as background sub-agent
→ Identifies E02_S01_T01 as parallelisable (no dependencies on T01)
→ "Start E02_S01_T01 in parallel?"
→ Yes → Starts second sub-agent
→ Both run simultaneously
→ Board updated as each completes
/j-redo
Description: Rework a previous implementation by commit SHA or Epic/Story number. Includes scope assessment, plan, and doc updates.
Output type: any
Invokes: /j-todo
When to use: When previously completed work needs to be revisited — incorrect implementation, changed requirements, or a bug found post-release.
Delegates to: Scrum Master (scope assessment), Developer (implementation)
Example:
/j-redo E01_S02 — auth tokens aren't being invalidated on logout
→ Scrum Master: "E01_S02 was marked Passed on 2026-06-01.
Scope: T01 (JWT) and T02 (refresh tokens) both need review.
Reason: logout doesn't call token blacklist. Creating E01_S02_T04."
→ Developer re-implements, Tester re-validates
→ PROJECT_SUMMARY.md updated to note the fix
/j-error
Description: Guided troubleshooting flow that gathers context about an error — where it occurs, what was attempted, what went wrong, and what was expected.
Output type: any
Invokes: /j-todo
When to use: When something is broken and you need structured help diagnosing it.
Delegates to: Tester
What it captures:
- Where the error occurs (file, function, endpoint)
- What action triggered it
- The actual error output
- The expected behaviour
Example:
/j-error
"500 on POST /api/auth/login"
→ Tester: "What's the stack trace?"
→ You: [paste]
→ Tester: "The issue is in token-service.ts line 42 — bcrypt.compare()
is being called with undefined salt rounds. Likely missing env var."
→ Creates task E01_S02_T05 "Fix bcrypt config on login endpoint"
/j-train
Description: Scaffold and run ML training jobs. Use new <type> <job-name> to scaffold from a template, or run <job-dir> to execute the validate → train pipeline.
Output type: any
Invokes: none
When to use: When working on machine learning components within a Jenga AI project.
Subcommands:
/j-train new <type> <job-name>— scaffold a new job from a template (classifiers,transformers,nlp)/j-train run <job-dir>— execute the two-phase pre-flight → smoke test → full train pipeline
Example:
/j-train new classifiers sentiment-model
→ Copies .training/template/classifiers/ to jobs/sentiment-model/
→ "✅ Scaffolded job 'sentiment-model' from template 'classifiers'"
/j-train run jobs/sentiment-model
→ Phase 1: validates config and data paths
→ Phase 2: runs smoke test (small batch)
→ Full train: executes start.sh
/j-playbook
Description: Invoke a specific /jenga playbook directly by ID, skipping natural-language matching entirely and going straight to chain confirmation and execution.
Output type: any
Invokes: /jenga (by reference)
When to use: When you already know the exact playbook id you want to run, rather than describing your intent in natural language for j.jenga to match.
What it does:
- Bare invocation (no id) lists all available playbooks in a table
- Resolves the given id, reporting
not_foundandinvalidas distinct outcomes - Reuses
/jenga’s own chain-confirmation and sequential-execution machinery — no separate implementation
Example:
/j-playbook brainstorm-to-mirror
→ Resolved playbook: "Brainstorm to Mirror" (3 steps)
→ Confirm chain: /j-brainstorm → /j-commit → /mirror-public? [y/N] → y
→ Executing step 1/3...
/j-uncharted
Description: Investigate code that has no Jenga board provenance — a foreign file, an external source being pulled in, or an entire pre-existing codebase — and give it a consistent understanding document plus proper board representation.
Output type: text
Invokes: none
When to use: When you have code nobody planned, decomposed, or tracked through Jenga — a segment, an imported source, or a whole legacy codebase — and want it understood and represented on the board.
Delegates to: Scrum Master
What it does:
segment— analyses one file/directory/feature and proposes a standard epic/story/task (or, in--mode investigate, a conversational architecture investigation)import— acquires an external source (git URL, out-of-repo path, or pasted snippet) into the repo, then hands off tosegmentonboard— analyses a whole codebase and writes board-only,[ARCH]-tagged or backfilled epics — it never touches application coderefresh— incremental re-scan of an already-onboarded codebase since its last baseline, skipping unchanged subsystems
Example:
/j-uncharted segment src/legacy/billing/
→ Target unlinked — no board item references it
→ Understanding document written to project/rapports/analysis/uncharted-segment-billing-...md
→ Proposes E12: Billing Module Stabilization (2 stories, 5 tasks)
→ Accept as proposed? [y/N] → y
→ Written to project/board/, queued to todo.md
Status & Review
/j-status
Description: Print a human-readable summary of the entire scrum board — all epics, stories, and tasks with their statuses — plus any open rapports and unprocessed queue triggers.
Output type: text
Invokes: none
When to use: Any time you want a quick overview without reading raw board files.
Example:
/j-status
E01 — Auth System (In Progress)
S01 — JWT Middleware ✅ Passed
S02 — Refresh Tokens 🔄 In Progress
T01 — Token generation ✅
T02 — Token rotation ⏳ Pending
S03 — Logout flow ⏳ Pending
Open rapports: 1 (E01_S02_T01 — bcrypt config)
Queue depth: 2 triggers pending
/j-continue
Description: Check project status across PROJECT_SUMMARY.md, epics, and stories to determine what should be done next. Reports “All done!” if everything is complete.
Output type: any
Invokes: none
When to use: At the start of a session when you want the system to orient you and pick up where you left off.
Example:
/j-continue
→ Reads PROJECT_SUMMARY.md and board state
→ "E01_S02 is In Progress. T02 (token rotation) is Pending.
Recommended next: /j-do E01_S02_T02"
/j-proceed
Description: Review project progress by checking epics and stories, optionally consulting PROJECT_SUMMARY.md and WARP.md, then continue executing the project plan.
Output type: any
Invokes: none
When to use: Similar to /j-continue but more assertive — it reviews progress and immediately resumes execution rather than just recommending.
Delegates to: Scrum Master
Example:
/j-proceed
→ Scrum Master reviews board
→ "E01 is 60% complete. S03 (Logout) is unstarted but has no blockers.
Starting E01_S03 now..."
→ Invokes /j-do
/j-reconcile
Description: Reconcile the scrum board with actual implementation state. Cross-checks every task’s board status against git history and worktrees, merges orphaned worktree branches, demotes unimplemented “Done” items, and promotes secretly-implemented items.
Output type: text
Invokes: /j-uncharted (conditional)
When to use: When the board feels out of sync — after a big merge session, when tasks were completed outside the normal workflow, or when todo.md has grown stale.
Delegates to: Scrum Master
What it checks:
- Every task status vs. git history (commit messages with task IDs)
- Orphaned worktrees that were never merged
todo.mdentries that are already Done on the board
Example:
/j-reconcile
→ Scanning board: 23 tasks
→ E02_S01_T03: board says "Pending" but commit "feat(E02_S01_T03)" found
→ Promoted to "Passed"
→ E03_S02_T01: board says "Done" but no commits found
→ Demoted to "Pending"
→ Found orphaned worktree: app-E01_S03_T02-logout
→ Merged and cleaned up
→ Removed 3 stale entries from todo.md
/j-close-story
Description: Close a story by verifying all tasks are in terminal state, extracting actual diff stats per task, computing scope divergence flags, and writing closure metadata to task frontmatter.
Output type: any
Invokes: none
When to use: When every task in a story has reached a terminal status and you want to formally close the story with real, git-derived diff stats instead of estimates.
What it does:
- Guards that all tasks are terminal before proceeding
- Extracts
actual_files_changed/actual_lines_deltaper task from EST-tagged commits - Computes and writes
scope_divergence_flagagainstproject/configs/scope-thresholds.json - Marks
status: Privatizedinstead ofDonewhen every touched file is blocklisted from the public mirror
Example:
/j-close-story E17_S06
→ CLOSEABLE — all tasks terminal
→ E17_S06_T01: files_changed=3, lines_delta=142, scope_divergence_flag=false
→ E17_S06_T02: files_changed=1, lines_delta=18, scope_divergence_flag=false
→ Scope Divergence: none
→ Story E17_S06 closed as Done
/j-dashboard
Description: Launch the local Jenga project dashboard (API + UI), or export a single self-contained HTML snapshot with a point-in-time data snapshot baked in.
Output type: any
Invokes: none
When to use: When you want a visual overview of the scrum board, or need a portable, offline-viewable snapshot to hand to someone else — including over a remote/cloud session with no shared filesystem, via --data-url.
What it does:
start/open/both— launches the API + UI dashboard viaproject/app’s own npm scripts--snapshot [--out <path>]— bundles a point-in-time snapshot into one self-contained HTML file--data-url— additionally base64-encodes the snapshot into adata:text/html;base64,...URI for remote delivery
Example:
/j-dashboard --snapshot
→ Captured /v1/board, /v1/history, /v1/architecture
→ Snapshot dashboard written to: jenga.html
/j-reconcile-origin
Description: Sync the current (or specified) branch with origin by rebasing local commits on top of the latest upstream state.
Output type: any
Invokes: none
When to use: When your local branch has drifted from origin and you want a scripted rebase, with structured conflict rapports instead of raw git conflict markers.
What it does:
- Rebases onto
origin/<branch>via a dedicated script — no inline git commands - Detects a missing local tracking branch and offers to create one
- On conflict, presents a structured rapport (local vs. origin sections) with resolution options, including “handle later” with annotated markers
Example:
/j-reconcile-origin feature/rate-limiting
→ Rebasing onto origin/feature/rate-limiting...
→ Conflict in src/middleware/rate-limit.ts
1. Resolve now 2. Keep local, re-apply upstream 3. Handle later 4. Other
→ 3 → Annotated with # RECONCILE-ORIGIN CONFLICT: and continuing
Committing & Maintenance
/j-commit
Description: Commit implemented epic, story, or task work using the EST naming convention. Also handles user-action prerequisites and new-epic boundaries.
Output type: any
Invokes: /j-reconcile, /j-doc-sync
When to use: After completing any EST work item — when you want a structured, trackable commit message.
Naming convention: epic(E##): <title>, story(E##_S##): <title>, task(E##_S##_T##): <title>
Example:
/j-commit E01_S02_T01
→ "task(E01_S02_T01): add JWT validation middleware"
→ Staged: src/middleware/jwt.ts, tests/middleware/jwt.test.ts
→ git commit -m "task(E01_S02_T01): add JWT validation middleware"
/j-lgtm
Description: Approve and commit the current work, then continue to the next task. Shortcut that chains /j-commit followed by /j-continue.
Output type: any
Invokes: /j-commit, /j-continue
When to use: When you’ve reviewed the work and want to quickly commit and move on.
Example:
/j-lgtm
→ /j-commit (creates EST commit)
→ /j-continue (identifies next task)
→ "Next: E01_S02_T02 — Refresh token rotation. Start? [yes/no]"
/j-distribute
Description: Distribute Jenga AI framework files from this private monorepo to one or more consuming projects via the local filesystem — release type selection, version bumping, a dry-run preview, per-target file copy, and a post-distribution git commit.
Output type: any
Invokes: none
What it is: /j-distribute treats this repository as the master copy of your Jenga AI framework and each registered consumer project as a versioned snapshot of it. Consumer projects are registered in distribute.config.json at the repo root (not .jenga_paths/jenga.config.json — that mechanism has been retired), as entries in a targets array:
{
"name": "my-project",
"path": "/absolute/or/relative/path/to/project",
"active": true
}
Passing a path argument (e.g. /j-distribute /path/to/project) adds a new entry to distribute.config.json automatically, deriving name from the target directory’s name. Schema reference: skills/j-distribute/CONFIG_SCHEMA.md.
When to use: Use major, minor, or patch after making framework changes that should become a versioned upgrade for every active target — these bump the version in package.json (via npm version) and distribute to every active, path-valid target. Use amend when quietly onboarding a new consumer project or fixing files missed in a previous release; it keeps the version unchanged and only updates targets whose config reports they’re behind. Every release type stops at a dry-run preview (distribute-changes.sh --dry-run) and requires explicit confirmation before any file is copied.
Release types:
major/minor/patch— bumpspackage.json’s version vianpm version, distributes to all active targetsamend— no version bump; distributes only to targets that are behind or have no prior config, viacheck-version.sh
What it does:
- Validates each target’s
activeflag and on-diskpathbefore including it in the run - Runs a dry-run preview per target and waits for
yconfirmation before touching anything - Copies files via
scripts/distribute-changes.sh, never inline - Commits the version bump via
scripts/commit-version-bump.sh(skipped foramend) - Never invokes
/j-self-syncor/j-mirror-public— those are separate distribution surfaces with separate triggers
Example:
/j-distribute
Release type? → minor
→ Version bumped to 1.3.0
→ Scanning distribute.config.json...
→ Eligible targets: my-app-1, my-app-2
→ Dry-run preview for my-app-1 ... my-app-2 ...
Proceed with distribution to the above targets? [y/N] → y
→ Syncing my-app-1: ✅ succeeded
→ Syncing my-app-2: ✅ succeeded
→ Committed version bump: chore(release): bump to 1.3.0
/j-doc
Description: Generate or update a documentation file by resolving a target path to a clear documentation objective before writing.
Output type: any
Invokes: none
When to use: When you want to create or refresh a specific doc file — “update the docs”, “write docs for X”, “the README is stale”, “generate documentation for X”. Pass an optional target path (e.g. /j-doc docs/API.md); omit it to default to README.md.
Example:
/j-doc docs/CLI.md
→ Resolved target: docs/CLI.md — objective: CLI usage guide
→ Reading existing docs/CLI.md...
→ Gathering evidence: package.json, board items, skill metadata
→ Regenerating docs/CLI.md with current commands and flags
→ Written: docs/CLI.md ✅
/j-doc-sync
Description: Compare the current state of a project with its documentation and update any documentation that is stale, incomplete, or missing.
Output type: any
Invokes: none
When to use: When documentation may have drifted from the implementation, or after a big implementation sprint.
Arguments:
update: <path>— specific doc file(s) to check and updatesource: <path>— source file(s) to diff againstexclude: <pattern>— paths to skipminify: true— shrink verbose docs to essential content only
Example:
/j-doc-sync update: docs/api.md source: src/routes/
→ Reading src/routes/auth.ts, src/routes/users.ts, src/routes/habits.ts
→ Comparing against docs/api.md
→ Found: 3 new endpoints not documented
→ Found: 1 deprecated endpoint still documented
→ Updated docs/api.md ✅
/j-skillify
Description: Refactor one or more existing skills into a cleaner structure — extracting hardcoded content into asset files, moving deterministic steps into scripts, and simplifying the skill body.
Output type: any
Invokes: none
When to use: When a skill has grown large, contains hardcoded templates, or has multi-step logic that would be more reliable as a shell script.
What it does:
- Extracts hardcoded file content (JSON, Markdown, config) into
assets/templates - Extracts directory lists into
assets/reference files - Moves deterministic sequences into
scripts/bash scripts - Rewrites the skill body to delegate to those assets and scripts
Example:
/j-skillify j-init
→ Reading skills/j-init/SKILL.md
→ Found: 40-line hardcoded directory list
→ Extracted to: skills/j-init/assets/directories.txt
→ Found: inline workflow.json template
→ Extracted to: skills/j-init/assets/workflow.json.template
→ Rewrote SKILL.md: 80 lines → 22 lines
/j-improve
Description: Analyse a codebase and produce a structured improvement plan toward a defined goal.
Output type: any
Invokes: /j-examplify (conditional), /j-evaluate, /j-todo
When to use: When you want a systematic review of what can be improved in a specific area (performance, maintainability, test coverage, etc.).
Example:
/j-improve improve test coverage in the auth module
→ Goal confirmed: increase test coverage in src/auth/
→ Scanning: 12 files, current coverage 54%
→ Improvement plan:
1. Add unit tests for token-service.ts (0% coverage, high risk)
2. Add integration tests for /auth/refresh (no tests)
3. Parameterise bcrypt test cases to cover edge inputs
→ Creates task: E01_S06_T01 "Improve auth module test coverage"
/j-evaluate
Description: Analyse example files against a target goal and produce a structured evaluation rapport.
Output type: any
Invokes: none
When to use: When you have example outputs or implementations and want them measured against a defined quality goal.
Inputs: A filled eval_invokation_template.yml with a goal and a list of paths to example files.
Example:
/j-evaluate
goal: "API responses should follow RFC 7807 error format"
paths: [examples/auth-error.json, examples/rate-limit-error.json]
→ Evaluating auth-error.json: missing 'instance' field — partial compliance
→ Evaluating rate-limit-error.json: compliant ✅
→ Rapport written to: project/rapports/analysis/eval-rfc7807-2026-07-09.md
/j-examplify
Description: Explain a concept, feature, use case, or pattern with grounded examples — what it is, why it exists, how it works, when to use it, and a concrete example.
Output type: any
Invokes: none
When to use: When you want to understand something (a pattern, a Jenga AI concept, a piece of code) without digging through docs.
Output: Saves an explanation to project/documentation/examples/.
Example:
/j-examplify sender objects in Jenga AI
What it is: A typed JSON contract passed between every agent call
Why it exists: Prevents agents from operating on stale or ambiguous context
How it works: Contains task_id, story_id, epic_id, commit SHAs, worktree path
When to use: Every inter-agent call — no exceptions
Example: [before/after showing agent call with and without sender object]
→ Saved to: project/documentation/examples/sender-objects.md
/j-help
Description: List all available skills with a short description of each.
Output type: any
Invokes: none
When to use: When you want a quick overview of what skills are available in the current project.
Example:
/j-help
→ Available skills:
/j-brainstorm — Focused planning session with Scrum Master
/j-btw — Capture a mid-flow idea
/j-commit — Commit using EST naming convention
...
/j-dev-done
Description: Commit the current work and immediately sync it into the .claude/ and .agents/ mirrors. Shortcut that chains /j-commit followed by /j-self-sync.
Output type: any
Invokes: /j-commit, /j-self-sync
When to use: Right after implementing a root-level framework change (skills/, agents/, hooks/, scripts/, templates/, settings.json), so the mirrors never sit stale waiting on a manual /j-self-sync call.
What it does:
- Runs
/j-commitfor the given scope id — halts cleanly if there was nothing to commit - Runs
/j-self-sync(including its Merged-status and Deploy-reconcile passes) - Commits whatever
/j-self-syncwrote, in a second, reconciliation-free commit
Example:
/j-dev-done E42_S04_T01
→ task(E42_S04_T01): add permission-level invariant check
→ self-sync: +4 ~2 -0
→ chore(self-sync): mirror skills/agents/hooks changes
/j-gitignore
Description: Retroactively repair an already-scaffolded project’s Jenga gitignore state — strips the stray heredoc EOF line left by pre-fix /j-init scaffolds, adds or removes the Jenga-owned path entries via a managed block, and untracks those paths from git (and from origin) while leaving every file on disk.
Output type: any
Invokes: none
When to use: When Jenga files (.claude/, .agents/, jenga.config.json, etc.) are being committed unexpectedly, when .gitignore has a stray EOF line, or you want the Jenga scaffold gone from the remote while it stays on disk locally. /j-init cannot do this — it hard-stops on an already-scaffolded project.
What it does:
- Audits the current gitignore/tracked state (read-only)
- Repairs
.gitignorevia a managed block, tiered by path (scaffold/hybrid/board/optional) - Untracks matched paths via
git rm --cached, with opt-in commit and push
Example:
/j-gitignore
→ Audit: 6 Jenga-owned paths tracked, stray EOF line found
Which Jenga paths should this project ignore? → 1 (scaffold only)
→ .gitignore repaired, 6 paths untracked and staged
How far should I take the untracking? → 2 (commit locally)
/j-self-sync
Description: Mirror this repo’s root-level framework directories into its own .claude/ and .agents/ sub-trees so edits to skills/, agents/, hooks/, scripts/, templates/, and settings.json take effect in the current session — the in-repo replacement for the retired /j-distribute self-sync loop.
Output type: any
Invokes: none
When to use: After editing any root-level framework file, before expecting the current agent session to see the change.
What it does:
- Mirrors
bin/,lib/,scripts/,agents/,hooks/,mcp/,skills/,templates/,settings.jsoninto both.claude/and.agents/, plusagents/alone into.github/agents/ - Runs a non-fatal Merged-status pass, promoting closed tickets whose files are now fully mirrored
- Runs a non-fatal Deploy-reconcile pass against the public
jenga-npmrepo’s tags
Example:
/j-self-sync
→ +3 ~1 -0 mirrored into .claude/ and .agents/
→ Merged-status pass: E42_S04_T01 -> Merged
→ Deploy-reconcile pass: no new tags found
Publishing, Cloud & Utilities
/j-cloud-connect
Description: Guided cloud storage setup wizard — installs rclone if missing, lets you pick any rclone-supported backend from a live provider list, runs that backend’s own config/auth flow, and independently verifies the remote works.
Output type: any
Invokes: none
When to use: Before using /j-dashboard-share or any other flow that uploads to a cloud remote, if no rclone remote is configured yet.
What it does:
- Installs/detects
rclone - Lists live backends via
rcloneitself (never a hardcoded list) - Runs the backend’s own config/auth flow, surfacing any auth URL directly
- Verifies the resulting remote with
rclone aboutbefore reporting success
Example:
/j-cloud-connect
→ rclone already installed
Pick a backend: 1. Google Drive 2. S3 3. Dropbox ... → 1
→ Opening auth URL: https://accounts.google.com/...
→ PASS: remote 'gdrive' is configured and verified working.
/j-connect
Description: Guided service setup — lists the service descriptors on disk, detects your platform, then installs the service’s CLI (opt-in), authenticates, registers its MCP server where one exists, and independently verifies the result, skipping whatever is already done and never handling a secret value.
Output type: any
Invokes: none
When to use: To wire a third-party service into a project (CLI installed and authenticated, MCP server registered) without hand-running vendor-specific steps. Adding a service is a descriptor-only change (project/documentation/service-descriptor.md), not a new skill.
What it does:
- Builds the service picker from the descriptors on disk (never a hardcoded list)
- Detects the platform; on an undeterminable one it prints the official instructions URL instead of guessing an install command
- Skips an already installed CLI and an already authenticated account, and reports what was skipped
- Asks before running any install; hands browser sign-in and token steps to you and re-checks afterwards
- Refers to secrets by environment-variable name only; values are never echoed or committed
- Ends with a pass/fail report from independent verification, never from your confirmation alone
Example:
/j-connect
Which service would you like to connect? 1. <service from a descriptor> 2. Other (type a service id) -> 1
[SKIPPED] install - already installed
[ACTION] auth - set the environment variable <NAME>. ...
→ (after you set it, re-run) VERIFIED: <service>
/j-tools
Description: Guided wizard for the preferred-tools registry: choose the user or project layer, then add, edit, remove or suppress an entry, or show the effective merged list. Every input is validated as it is given and the written file is self-validated before success is reported.
Output type: any
Invokes: none
When to use: To declare which tools Jenga agents should reach for, and whether each choice is required (binding) or recommended (advisory), without hand-writing alternatives, version constraints and descriptor links. Hand-editing the registry files stays fully supported; the wizard preserves every entry it did not touch.
What it does:
- Writes the user layer (
~/.jenga/tools.json) or the project layer (preferred-tools.jsonunder the project’s configs path); the curated shipped list is read-only - Validates the category against the vocabulary (extensible per layer), the enforcement flag, the version constraint format, and the install-hint descriptor against the real
j-connectdescriptors on disk - Adds, edits and removes entries, and suppresses a shipped entry at the chosen layer
- Replaces the file atomically and only after the result validates; an invalid change leaves the file untouched
- Ends with an independent validator run and never reports success on a failed one
Example:
/j-tools
What would you like to do? 1. Add a tool -> 1
Which layer? 1. Project -> 1
Name: shellcheck Category: lint Enforcement: 1. required
→ Written to project/configs/preferred-tools.json
→ VALID: project/configs/preferred-tools.json
/j-convert
Description: Convert JSON, JSONL, YAML, or YML dataset files to CSV format. Pass-through for files already in CSV. Flattens nested structures using dot-notation.
Output type: any
Invokes: none
When to use: When preparing a dataset file for /j-train jobs that expect CSV input.
What it does:
- Auto-detects the input format from the file extension
- Flattens nested objects (e.g.
{"user": {"age": 30}}→ columnuser.age) - Warns before converting a top-level JSON object instead of an array
Example:
/j-convert data/train.jsonl
→ Detected format: jsonl
→ Flattened nested fields: user.name, user.age
→ Output: data/train.csv
/j-dashboard-share
Description: Snapshot the project dashboard and upload it to a configured cloud storage remote in one step, by sequencing /j-dashboard’s snapshot script and a templated-path rclone upload script.
Output type: any
Invokes: none
When to use: When you want to hand off a point-in-time dashboard snapshot to someone via cloud storage, without manually running snapshot and upload as two separate steps.
What it does:
- Captures a snapshot via
/j-dashboard’s own script - Resolves which configured rclone remote to use (prompts if more than one; points at
/j-cloud-connectif none are configured) - Uploads via a templated-path
rclone copyto— upload only, never creates a public share link
Example:
/j-dashboard-share
→ Snapshot dashboard written to: jenga.html
→ Uploading to remote 'gdrive'...
→ Uploaded to: JengaAI/agents/20260923T134500-board-snapshot.html
/j-mirror-public
Description: Mirror this private repo one-way to its public counterpart (jenga-npm), applying a .publicignore blocklist and producing a single squash commit per run so private board, queue, log, and rapport artefacts never leak downstream.
Output type: any
Invokes: none
When to use: When you want to publish the current framework state to the public GitHub repo, after verifying with a dry run what would ship.
What it does:
--dry-run/--inventory— read-only previews of what would ship or be blocked--exclude <path>— appends a new.publicignoreentry- Real run — fetches, safety-checks against the last mirror marker, rsyncs, squash-commits, pushes
--force— destructive override for a diverged public repo, with enumeration, confirmation, and an automatic pre-force rescue tag
Example:
/j-mirror-public --dry-run
→ would ship: 607 files, would block: 599 files
/j-mirror-public
→ nothing to mirror — public tree already matches private (post-blocklist)
/j-publish
Description: Configure, validate, and orchestrate scaffolded release workflows through a single /j-publish entry point with bounded sub-commands, across mobile-ios, npm, npm-ci, and droplet targets.
Output type: any
Invokes: none
When to use: When you’re ready to configure a deployment target or ship a release — an iOS App Store build, an npm package, an OIDC-based npm CI publish, or a droplet deploy over SSH.
What it does:
setup— wizard to scaffold or refresh a target’s configdeploy— full gated deploy pipeline (pre/post-deploy quality gates, changelog update, semver bump, adapter dispatch, ledger entry);--dry-runrehearses end-to-end with no real publishstage— npm/npm-ci only: stage, smoke-test, and approve/reject a release before it goes livehistory/release-notes— read the publish ledger / merge new entries intoCHANGELOG.md
Example:
/j-publish deploy --target npm-registry --dry-run
→ Pre-deploy gates: build ✅ test ✅
→ Suggested bump: minor (1.2.0 -> 1.3.0)
→ Deploy v1.3.0 to npm-registry? [y/N] → y (dry-run — no real publish)
/j-clearify
Description: Clarifies ambiguous, dense, or under-specified prompts and conversation on request — inspects an attached prompt or falls back to the current conversation and surfaces plain-language clarifications with examples.
Output type: any
Invokes: none
When to use: When a request, instruction, or piece of conversation is jargon-heavy, vague, or bundles multiple asks, and you want it broken down in plain language before proceeding.
What it does:
- Targets an attached prompt/file/pasted text, or falls back to the most recent message plus surrounding context
- Flags jargon, unclear references, compound asks, unstated assumptions, and vague qualifiers
- For each item: a plain-language clarification, a simplified restatement, added context, and an example where it helps
Example:
/j-clearify "spin up the usual setup for the staging deploy"
### 1. "the usual setup"
Plain-language: ...
Simplified restatement: ...
Example: ...
/j-wtf
Description: Alias of /j-clearify — identical behaviour, provided so j.wtf (and its /j-wtf directory form) resolves to a skill.
Output type: any
Invokes: /j-clearify
When to use: Same as /j-clearify — invoke either name interchangeably.
Example:
/j-wtf does this error mean
→ (identical to /j-clearify)