---
title: "Help"
description: "OrchestKit help directory with categorized skill listings. Use when discovering skills for a task, finding the right workflow, or browsing capabilities."
canonical: "https://orchestkit.yonyon.ai/docs/reference/skills/help"
---

# Help

OrchestKit help directory with categorized skill listings. Use when discovering skills for a task, finding the right workflow, or browsing capabilities.

<span className="badge badge-blue">Command</span> <span className="badge badge-green">low</span>

```bash title="Invoke"
/ork:help
```

<ContextualSkillSidebar slug="help" />

> **Help** OrchestKit help directory with categorized skill listings. Use when discovering skills for a task, finding the right workflow, or browsing capabilities.


# OrchestKit Skill Directory

Dynamic skill discovery: enumerates the installed plugin at runtime so listings are never stale.

> **CC 2.1.121+ tip:** if you just want to find one skill quickly, the native `/skills` command now has type-to-filter — open it and start typing the skill name. Use `/ork:help` when you want categorized browsing or rationale for *why* a skill applies.

## Quick Start

```bash
/ork:help           # Show all categories
/ork:help build     # Show BUILD skills only
/ork:help git       # Show GIT skills only
/ork:help all       # List every user-invocable skill
```

## Argument Resolution

```python
CATEGORY = "$ARGUMENTS[0]"  # Optional: build, git, plan, quality, memory, config, explore, design, ops, all
# If provided, skip AskUserQuestion and show that category directly.
# $ARGUMENTS is the full string (CC 2.1.59 indexed access)
```

---

## STEP 0: Dynamic Skill Discovery

**ALWAYS run this first** to get accurate, up-to-date skill data:

```python
# ${CLAUDE_PLUGIN_ROOT} is set by the plugin runtime and points at the INSTALLED
# plugin. That is the normal case: a marketplace user has no src/ directory.
SKILLS_ROOT = "${CLAUDE_PLUGIN_ROOT}/skills"
matches = Grep(pattern="user-invocable:\\s*true", path=SKILLS_ROOT, output_mode="files_with_matches")

# Dogfooding fallback: inside the OrchestKit repo itself the skills live in the
# source tree. Retry there if the env var was unset or the probe found nothing.
if not matches:
    SKILLS_ROOT = "src/skills"
    matches = Grep(pattern="user-invocable:\\s*true", path=SKILLS_ROOT, output_mode="files_with_matches")
```

If BOTH probes return zero files, say so plainly ("could not locate the OrchestKit
skills directory, checked `$\{CLAUDE_PLUGIN_ROOT\}/skills` and `src/skills`") and stop.
Do NOT substitute a remembered list of skill names. Any such list is stale by
construction and a confident wrong answer is worse than no answer.

For each matched file, read the frontmatter to get name, description, version,
complexity, `argument-hint` and tags:

```python
Read(file_path=f"{SKILLS_ROOT}/{skill_dir}/SKILL.md", limit=25)
```

Every number rendered later is derived from this scan, never typed as a literal:

```python
TOTAL = len(matches)   # user-invocable skill count
```

Build the skill list dynamically. **Never hardcode counts or skill names.**

---

## STEP 1: Category Selection

If CATEGORY argument provided, skip to STEP 2 with that category.

Otherwise, present categories interactively:

```python
AskUserQuestion(
  questions=[{
    "question": "What type of task are you working on?",
    "header": "Category",
    # 4-option cap (CC schema): every category from STEP 2 is grouped into one of
    # 3 buckets + "Show all". STEP 2 renders the constituent categories for the
    # picked bucket. Descriptions name intents, never skills, so they cannot drift.
    "options": [
      {"label": "Build & ship", "description": "Writing code, tests, git and PRs, UI and design work"},
      {"label": "Plan & assess", "description": "Requirements, planning, quality assessment, review"},
      {"label": "Explore & operate", "description": "Codebase exploration, memory, setup, diagnostics, CI"},
      {"label": "Show all", "description": "List every user-invocable skill"}
    ],
    "multiSelect": false
  }]
)
```

---

## STEP 2: Render Category

For the selected category, render the skill table from the data gathered in STEP 0.

### Category Definitions

Categories are defined by **tag predicates**, never by a list of skill names, so a
newly shipped skill lands in the right bucket without editing this file. Match each
discovered skill's frontmatter `tags` against the sets below (case-insensitive, one
hit is enough):

| Category | CLI arg | Matches any of these tags |
|----------|---------|---------------------------|
| BUILD | `build` | implementation, feature, testing, coverage, test-generation, verification, e2e |
| GIT | `git` | git, github, commit, pull-request, pr, issue, bug-fix |
| PLAN | `plan` | planning, ideation, prd, requirements, visualization |
| QUALITY | `quality` | quality, assessment, evaluation, code-review, validation, grading |
| MEMORY | `memory` | memory, decisions, graph-memory, consolidation |
| CONFIG | `config` | setup, configuration, onboarding, diagnostics, health-check, dev-loop |
| EXPLORE | `explore` | exploration, codebase, code-search, architecture, discovery |
| DESIGN | `design` | design, design-context, design-tokens, design-to-code, frontend, ui, components, stylecards |
| OPS | `ops` | ci, automation, telemetry, observability, release, migration |
| OTHER | (none) | anything the rows above did not match |

A skill matching two categories is listed under both. That is expected, not a bug.
OTHER is what makes the totals reconcile: every skill found in STEP 0 must appear
somewhere in a full listing, so a skill nobody has categorized yet still shows up.

The STEP 1 picker only offers **3 buckets** (the AskUserQuestion schema caps a
question at 4 options). Each bucket renders the union of its categories:

| Picker bucket | Renders categories |
|---------------|--------------------|
| Build & ship | BUILD + GIT + DESIGN |
| Plan & assess | PLAN + QUALITY |
| Explore & operate | MEMORY + CONFIG + EXPLORE + OPS + OTHER |

For each skill in the category, render:

```
/ork:{name}  v{version}  {complexity}
  {description}
  Example: /ork:{name} {argument-hint example}
```

### "Show all" — Full Listing

If user picks "Show all", render ALL user-invocable skills grouped by category from
STEP 0 data, then close with the derived total: `\{TOTAL\} user-invocable skills`.
Print `TOTAL` from `len(matches)`. Never type a number you did not just count.

---

## CC Built-in Commands (2.1.72+)

Not OrchestKit skills — these are Claude Code built-ins:

| Command | Description | Since |
|---------|-------------|-------|
| `/code-review` | Review changed code for correctness bugs at a chosen effort level; `--comment` posts inline PR comments (renamed from `/simplify` in 2.1.146; the old cleanup-and-fix behavior was removed) | CC 2.1.146 |
| `/help` | Claude Code built-in help | CC 2.1.0+ |
| `/config` | Claude Code configuration | CC 2.1.0+ |
| `/clear` | Clear conversation (preserves background agents) | CC 2.1.72 |
| `/fast` | Toggle fast mode (same model, faster output) | CC 2.1.59+ |
| `/loop` | Recurring interval (e.g. `/loop 5m /foo`) | CC 2.1.71 |
| `/plan` | Enter plan mode (CC 2.1.222 removed the ultraplan feature, so `/ultraplan` and the "Refine with Ultraplan" hand-off no longer exist) | CC 2.1.72 |
| `/team-onboarding` | Generate teammate ramp-up guide | CC 2.1.101 |
| `/recap` | Session context restoration after idle | CC 2.1.108 |
| `/undo` | Alias for `/rewind` | CC 2.1.108 |
| `/skills` | Native skill picker — type to filter | CC 2.1.121 |
| `/effort` | Reasoning effort — sets `$CLAUDE_EFFORT` env for skills | CC 2.1.72 (env var since 2.1.120) |
| `/cd` | Move session to a new working directory without breaking the prompt cache | CC 2.1.169 |
| `--safe-mode` | Start with ALL customizations disabled (troubleshooting bisect) | CC 2.1.169 (flag/env, not a slash command) |

## Performance Tips

- **`ENABLE_PROMPT_CACHING_1H=1`** — Extends prompt cache TTL from 5 min to 1 hour. Set this for long sessions with multi-phase skills (brainstorm, implement, cover). Available on API key, Bedrock, Vertex, Foundry.
- **`/recap`** — Restores session context after stepping away. Complements OrchestKit's checkpoint-resume for chain recovery.

## Keyboard Shortcuts

| Shortcut | Action |
|----------|--------|
| `Ctrl+F` | Find in session output |
| `Esc` | Cancel / dismiss |
| `Shift+Enter` | Newline in input |
| `Ctrl+C` | Cancel operation |

---

## Pro Tip

You don't need to memorize skills. Just describe your task naturally:

```
"I need to implement user login"     → /ork:implement
"Show me the payment architecture"   → /ork:explore
"Review PR 123"                      → /ork:review-pr
"Is this code good?"                 → /ork:assess
"Plan out the billing redesign"      → /ork:visualize-plan
```

## Related Skills

- `/help` — Claude Code built-in help
- `/ork:doctor` — OrchestKit health check
- `/ork:setup` — Full onboarding wizard


---

## Rules (2)

### Cross-check skill category assignments against skill tags to prevent miscategorization — MEDIUM


## Problem

The help skill maps skills to categories (BUILD, GIT, PLAN, MEMORY, QUALITY, CONFIG, EXPLORE). When skills are recategorized or their tags change, the hardcoded mapping in the help skill can assign a skill to a category that no longer matches its actual function. Users looking for a specific capability browse the wrong category and miss the skill entirely.

## Rule

When assigning a skill to a display category, verify the assignment by checking the skill's `tags` and `metadata.category` fields from its SKILL.md frontmatter. If the skill's tags contradict the category placement, use the tags as the source of truth.

### Category-to-Tag Mapping

```
BUILD   -> tags contain: implement, build, feature, brainstorm, verify
GIT     -> tags contain: git, commit, pr, pull-request, branch, issue
PLAN    -> tags contain: plan, prd, assessment, visualization, strategy
MEMORY  -> tags contain: memory, decisions, patterns, graph-memory
QUALITY -> tags contain: quality, review, assess, health, diagnostics
CONFIG  -> tags contain: setup, config, onboarding, diagnostics
EXPLORE -> tags contain: explore, analysis, architecture, codebase
```

### Incorrect -- placing skill in wrong category:

```python
# "assess" placed only in PLAN category
PLAN_SKILLS = ["visualize-plan", "write-prd", "assess"]
# But assess has tags: [quality, assessment, scoring, grading]
# User looking in QUALITY never finds it

# "doctor" placed only in CONFIG
CONFIG_SKILLS = ["setup", "doctor", "configure"]
# But doctor has tags: [health, diagnostics, quality]
# User checking QUALITY for diagnostics misses it
```

### Correct -- using tags to allow multi-category placement:

```python
# Read skill frontmatter
assess_tags = ["quality", "assessment", "scoring", "grading"]

# assess matches both PLAN (assessment) and QUALITY (quality)
PLAN_SKILLS = ["visualize-plan", "write-prd", "assess"]
QUALITY_SKILLS = ["assess", "review-pr", "doctor"]

# doctor matches both CONFIG (diagnostics) and QUALITY (diagnostics, health)
CONFIG_SKILLS = ["setup", "doctor", "configure"]
# doctor appears in QUALITY too -- correct cross-listing
```

### Incorrect -- ignoring metadata.category field:

```python
# Skill has metadata.category: "workflow-automation"
# But help places it under CONFIG because of a legacy mapping
CONFIG_SKILLS = ["setup", "doctor", "configure", "remember"]
#                                                  ^^^^^^^^
# remember.metadata.category = "workflow-automation", not config
# remember.tags = [memory, decisions, patterns]
# Belongs in MEMORY, not CONFIG
```

### Correct -- checking metadata.category:

```python
skill_meta = read_frontmatter("src/skills/remember/SKILL.md")
# metadata.category = "workflow-automation"
# tags = [memory, decisions, patterns]
# -> Place in MEMORY (tags match), not CONFIG
```

### Validation Steps

1. For each skill in a category listing, read its `tags` array from SKILL.md
2. Verify at least one tag matches the category-to-tag mapping above
3. If zero tags match, the skill is miscategorized -- move it to the correct category
4. Skills matching multiple categories should appear in all matching categories

### Key Rules

- Tags from SKILL.md frontmatter are the source of truth for categorization
- A skill can appear in multiple categories if its tags span them
- Never place a skill in a category where none of its tags match
- When "Show all" is selected, group by `metadata.category` from each SKILL.md, not by the hardcoded mapping


### Validate listed skills exist in manifest before displaying to prevent showing stale or removed skills — HIGH


## Problem

The help skill can display skills that have been removed, renamed, or merged if it relies on hardcoded lists or cached data instead of reading from the live manifest. When a user tries to invoke a stale skill, they get a confusing "skill not found" error with no guidance on the replacement.

## Rule

Before rendering any skill listing, cross-reference every skill name against `manifests/ork.json` or scan `src/skills/*/SKILL.md` files. Never display a skill that does not exist in the current manifest.

### Incorrect -- rendering from hardcoded list:

```python
# Hardcoded category mapping (goes stale when skills change)
BUILD_SKILLS = ["implement", "brainstorm", "verify", "scaffold"]
#                                                      ^^^^^^^^
# "scaffold" was merged into "implement" in v7.2.0
# User sees it in /ork:help, tries /ork:scaffold, gets "skill not found"

for skill in BUILD_SKILLS:
    render_skill_entry(skill)
```

### Correct -- validate against live source:

```python
# Step 1: Scan for all user-invocable skills
found_skills = Grep(
    pattern="user-invocable:\\s*true",
    path="src/skills",
    output_mode="files_with_matches"
)

# Step 2: Extract names from matched SKILL.md files
live_skills = set()
for skill_file in found_skills:
    frontmatter = Read(file_path=skill_file, limit=15)
    name = parse_frontmatter_field(frontmatter, "name")
    live_skills.add(name)

# Step 3: Filter category mapping against live skills
BUILD_CATEGORY = ["implement", "brainstorm", "verify", "scaffold"]
valid_build = [s for s in BUILD_CATEGORY if s in live_skills]
# "scaffold" is excluded because it no longer exists in source
```

### Incorrect -- showing a count without verification:

```
OrchestKit: 106 skills available
# Count is from CLAUDE.md header, may not match actual manifest
```

### Correct -- deriving count from scan:

```
OrchestKit: {len(live_skills)} user-invocable skills available
# Count derived from actual Grep scan in STEP 0
```

### Key Rules

- Always run STEP 0 (dynamic skill discovery) before rendering any skill list
- Never hardcode skill names or counts -- derive from source files
- If a skill appears in category mapping but not in live scan, silently omit it
- If a category becomes empty after filtering, omit the entire category from display
- Log a warning (not shown to user) when a mapped skill is missing for maintainer awareness



---

## References (1)

### Cc Keyboard Shortcuts

# CC Keyboard Shortcuts

## Input

| Shortcut | Action | Notes |
|----------|--------|-------|
| `Shift+Down` | Multi-line input | Type across multiple lines before sending (CC 2.1.47+) |
| `Enter` | Send message | Submits the current input |
| `Up Arrow` | Previous message | Navigate input history |
| `Tab` | Autocomplete | Complete file paths, skill names |
| `Esc` | Cancel | Dismiss autocomplete or cancel current edit |

## Output Navigation

| Shortcut | Action | Notes |
|----------|--------|-------|
| `Ctrl+F` | Find in output | Search through all output in the session (CC 2.1.47+) |
| `Ctrl+C` | Cancel operation | Interrupt the current tool execution or generation |

## Session Control

| Shortcut | Action | Notes |
|----------|--------|-------|
| `/exit` | Exit session | Gracefully close the session (triggers Stop hooks) |
| `/clear` | Clear screen | Clear terminal output |
| `/compact` | Compact context | Compress conversation history to free context space |
| `Ctrl+C` (twice) | Force exit | Exit immediately without cleanup |

## CC 2.1.47 New Features

- **Find in output** (`Ctrl+F`): Search through all assistant output, tool results, and error messages in the current session. Works like browser find.
- **Multi-line input** (`Shift+Down`): Enter multi-line messages without triggering send. Useful for pasting code blocks, writing detailed prompts, or composing multi-paragraph instructions.
