[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EA3B3GD5EYF58RN34K79ZS":3,"skill-same:01M6EA3B3GD5EYF58RN34K79ZS":60},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":30,"linkOnly":31,"markdownContent":32,"markdownBody":33,"frontMatter":34,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":41,"repositoryHtmlUrl":42,"repositoryHomepageUrl":43,"ownerHtmlUrl":44,"ownerBlogUrl":6,"ownerDescription":45,"updatedAt":46,"install":47,"resources":59},"01M6EA3B3GD5EYF58RN34K79ZS","orient",null,"Generates a repo-specific orientation.md resource for the learning-opportunities skill. Only invoke via slash command (\u002Forient:orient). Do not trigger automatically.","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FDrCatHicks\u002Flearning-opportunities\u002Forient\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29],"Bash","learning","grep","repo","command","read","write","only","do","trigger","via","2026-11-10 10:12:30",false,"---\nname: orient\ndescription: Generates a repo-specific orientation.md resource for the learning-opportunities skill. Only invoke via slash command (\u002Forient:orient). Do not trigger automatically.\nargument-hint: \"[showboat]\"\ndisable-model-invocation: true\nallowed-tools: Read, Glob, Grep, Bash, Write\n---\n\n# Create Orientation\n\n## Purpose\n\nGenerate a repo-specific `orientation.md` file inside the `learning-opportunities` skill's `resources\u002F` directory. This file is used by that skill when invoked as `\u002Flearning-opportunities orientation` to run a structured learning exercise for someone new to the codebase.\n\n---\n\n## Step 1: Find where to write orientation.md\n\nAlways write to the **project level**, regardless of where the `learning-opportunities` skill is installed:\n\n```\n.claude\u002Fskills\u002Flearning-opportunities\u002Fresources\u002Forientation.md\n```\n\n(relative to the current working directory)\n\nIf the directory `.claude\u002Fskills\u002Flearning-opportunities\u002Fresources\u002F` does not exist, create it. If it already exists, leave it and any files inside it untouched — only write `orientation.md`.\n\nThis keeps orientation files co-located with the repo they describe — they can be committed to version control, shared with teammates, and never collide across projects.\n\n---\n\n## Argument check\n\nYou were invoked with arguments: `$ARGUMENTS`\n\nIf the argument is `showboat`, skip to the **Showboat Path** section below.\n\nOtherwise, continue with Steps 2–5 (the default path).\n\n---\n\n## Step 2: Detect the repo's primary language(s)\n\nCheck for these manifest\u002Fconfig files at the project root and note all that exist. A repo may use multiple languages.\n\n| Language   | Signal files                                              |\n|:-----------|:----------------------------------------------------------|\n| Python     | `pyproject.toml`, `setup.py`, `setup.cfg`, `Pipfile`, `requirements.txt` |\n| JavaScript | `package.json` (no `tsconfig.json`)                      |\n| TypeScript | `package.json` + `tsconfig.json`                         |\n| R          | `DESCRIPTION`, `NAMESPACE`, any `*.Rproj`                |\n| Ruby       | `Gemfile`, any `*.gemspec`                                |\n| Go         | `go.mod`                                                  |\n| Rust       | `Cargo.toml`                                              |\n| C\u002FC++      | `CMakeLists.txt`, `configure.ac`, root-level `Makefile`  |\n| Java\u002FKotlin| `pom.xml`, `build.gradle`, `build.gradle.kts`            |\n| C#         | any `*.csproj` or `*.sln`                                |\n\nRecord all detected languages. For each detected language, read its primary manifest file in full — it contains declared purpose, dependencies, entry points, and scripts\u002Fcommands that are essential for orientation.\n\n---\n\n## Step 3: Explore the repo\n\nUse the following sequence, drawn from research on expert program comprehension strategies. Experts read **strategically and selectively**, not exhaustively. The goal is a mental model of structure, not line-by-line understanding.\n\n### 3a. README and top-level docs\nRead `README.md`, `README.rst`, or `README` at the project root. Also check for a `docs\u002F` directory — read its index or table of contents if present. This gives the stated purpose and intended audience.\n\n*Source: Spinellis, \"Code Reading: The Open Source Perspective\" (2003) — start with the build system and README before reading any application code.*\n\n### 3b. Directory tree\nRun `find . -maxdepth 3 -not -path '*\u002F.git\u002F*' -not -path '*\u002Fnode_modules\u002F*' -not -path '*\u002F__pycache__\u002F*' -not -path '*\u002F.venv\u002F*'` to get the top-level structure. Read the directory tree as an architectural table of contents — naming conventions (`src\u002F`, `lib\u002F`, `tests\u002F`, `cmd\u002F`, `pkg\u002F`) reveal intent before any code is read.\n\n*Source: Spinellis (2003) — \"directory tree as table of contents.\"*\n\n### 3c. Entry points\nIdentify and read the main entry points based on detected language:\n\n- **Python**: `__main__.py`, `cli.py`, `main.py`, or the `[tool.poetry.scripts]` \u002F `[project.scripts]` section of `pyproject.toml`\n- **JavaScript\u002FTypeScript**: `main` field in `package.json`, `index.js`, `src\u002Findex.ts`\n- **Go**: files in `cmd\u002F*\u002Fmain.go` or root `main.go`\n- **Rust**: `src\u002Fmain.rs` or `src\u002Flib.rs`\n- **R**: `R\u002F` directory, the `DESCRIPTION` file's `Imports`\n- **Ruby**: files in `bin\u002F`, `lib\u002F\u003Cgem-name>.rb`\n- **C\u002FC++**: `main.c`, `main.cpp`, or the primary target in `CMakeLists.txt`\n\n*Source: Hermans, \"The Programmer's Brain\" (2021, Manning) — follow the entry point and call graph one level at a time.*\n\n### 3d. Test files\nRead 2–3 test files, prioritizing integration or end-to-end tests over unit tests. Tests are executable specifications — reading test names and assertions is one of the fastest ways to understand what a module is meant to do.\n\n*Source: Storey et al., \"How Software Developers Use Tools, Cognitive Strategies, and Representations to Navigate Code\" (IEEE TSE, 2006) — use the test suite as a specification.*\n\n### 3e. Core modules\nIdentify the 5–8 most important source files based on what you have learned. Read their top-level structure (class\u002Ffunction names, imports, docstrings) without necessarily reading every implementation in full.\n\n### 3f. Recent git history (if git is available)\nRun `git log --oneline -20` to see recent activity. Run `git log --format=\"%f\" | sort | uniq -c | sort -rn | head -10` to identify the most-edited files. High-churn files are usually the core of the system.\n\n*Source: Spolsky practitioner writing — \"find the biggest, most-edited file; read git history to understand why code is the way it is.\"*\n\n---\n\n## Step 4: Synthesize and write orientation.md\n\nWrite the file to the path identified in Step 1. Use this exact structure:\n\n```markdown\n# Repo Orientation: [repo name]\n\n> Generated by \u002Forient:orient. Re-run to update.\n\n## One-line purpose\n[Single sentence: what this repo does and why it exists. Written for someone with no prior context.]\n\n## Primary language(s)\n[List languages detected, with the dominant one first.]\n\n## Pipeline \u002F workflow stages\n[Ordered list of the main stages data or requests flow through. One line each. If the repo has no pipeline, describe the main modules and their relationships instead.]\n\n## Key files\n[6–10 entries in this format:]\n- `path\u002Fto\u002Ffile.py` — [what it does] | [why a new developer should read it]\n\n## Core concepts\n[3–5 domain or architectural concepts essential to working in this codebase. For each:]\n**[Concept name]**: [Plain-English definition. Where in the code it lives.]\n\n## Common gotchas\n[2–3 things that commonly trip up new developers. Be specific — reference actual file paths or function names.]\n\n## Suggested exercise sequence\n[EXACTLY 2 exercises. These are orientation exercises — their job is to build a high-level mental model of the repo, not to drill implementation details.\n\nOrientation exercises follow this pattern: direct the learner to read one specific, short artifact first, then ask them to synthesize or explain what they just read. Never ask them to predict something they couldn't know without reading — the goal is comprehension and synthesis, not prior knowledge.\n\nGood orientation exercises:\n- \"Open README.md and read the Features section. Then close it and explain to a non-developer what this tool produces and why someone would use it.\"\n- \"Open `models.py`. Find the dataclass that represents everything the pipeline produces for one audio file. What fields does it have, and what does that tell you about the pipeline's stages?\"\n- \"Open `config\u002Fdefault.yaml` and skim it. What are the two or three settings you'd most likely need to change for a new project, and why?\"\n\nBad orientation exercises (save these for later sessions):\n- \"Without opening any files, predict the pipeline stages\" — learner has no basis for this\n- Predicting specific function outputs, column names, or algorithmic behavior\n- Tracing through individual method implementations\n- Debugging specific logic (e.g. merge suffix behavior, metadata propagation)\n\nFor each exercise, specify: the exact file to open, what to read, and what synthesis question to answer after reading.]\n\n## Sources consulted\n[List the files and paths you actually read while generating this file.]\n```\n\nKeep each section concise. This is a teaching scaffold, not documentation. Prioritize clarity over completeness.\n\n---\n\n## Step 5: Confirm to the user\n\n> **Note for skill maintainers**: Academic and practitioner sources for the exploration methodology in Steps 3a–3f are documented in [resources\u002Forient-bibliography.md](resources\u002Forient-bibliography.md). Load that file only if you need to update or cite sources — it is not needed during normal skill execution.\n\nTell the user:\n- Where the file was written\n- How many key files and concepts were identified\n- How to use it: `\u002Flearning-opportunities orient`\n- That they can re-run `\u002Forient:orient` at any time to regenerate it as the codebase evolves\n\n---\n\n## Showboat Path\n\nThis path replaces Steps 2–5 when the argument is `showboat`. It produces `orientation.md` at the same location identified in Step 1, but uses the `showboat` CLI tool (via `uvx`) to build a detailed, linear code walkthrough.\n\n### Showboat Step 1: Check for uv\n\nRun `command -v uv` to verify that `uv` is installed.\n\nIf `uv` is not found, tell the user:\n\n> `uv` is required for showboat mode but was not found on your PATH.\n> Install it from: https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002Fgetting-started\u002Finstallation\u002F\n\nThen stop — do not proceed further.\n\n### Showboat Step 2: Read the repo and plan the document\n\nRead the repo to understand its structure, purpose, and key code paths. Then plan a linear walkthrough document with:\n\n- A title and table of contents\n- Commentary sections that explain the codebase narratively, in reading order\n- A Code Listings appendix containing the actual code snippets referenced by commentary\n- A suggested exercise sequence (same criteria as Step 4's exercise requirements — exactly 2 orientation exercises)\n\nPlan all section headings, code snippets, and sequential listing numbers **upfront before writing anything**. Each listing gets a sequential number (Listing 1, Listing 2, etc.) and a short description.\n\n### Showboat Step 3: Learn the showboat tool\n\nRun `uvx showboat --help` to learn the available commands and their syntax.\n\n### Showboat Step 4: Build orientation.md using showboat commands\n\nUse the showboat CLI to build the file. The output path is the same `orientation.md` from Step 1. Execute commands in this order:\n\n#### 4a. Initialize the document\n\n```\nuvx showboat init \u003Cpath-to-orientation.md> \"\u003CTitle>\"\n```\n\nThen add a table of contents via `uvx showboat note`.\n\n#### 4b. Write all commentary sections\n\nAdd each commentary section using `uvx showboat note`. Follow these rules for note content:\n\n- **No fenced code blocks** inside notes — use inline backtick code (`` `like_this` ``) instead\n- Reference code listings with inline links: `*([Listing N: description](#listing-N))*`\n- Write narratively — explain *why* the code is structured this way, not just *what* it does\n\n#### 4c. Write the Code Listings appendix\n\nFor each listing planned in Showboat Step 2:\n\n1. Add an anchor note: `uvx showboat note` with a heading like `### Listing N: description` and an HTML anchor `\u003Ca id=\"listing-N\">\u003C\u002Fa>`\n2. Add the code via `uvx showboat exec` to capture the actual file content (e.g., using `cat` or `sed` to extract the relevant lines)\n\n#### 4d. Append suggested exercise sequence\n\nAdd a final section via `uvx showboat note` with exactly 2 orientation exercises. These follow the same criteria as the default path's Step 4:\n\n- Direct the learner to read one specific, short artifact first\n- Then ask them to synthesize or explain what they just read\n- Never ask them to predict something they couldn't know without reading\n- Specify: the exact file to open, what to read, and what synthesis question to answer\n\n#### 4e. Verify the document\n\nRun:\n\n```\nuvx showboat verify \u003Cpath-to-orientation.md>\n```\n\nFix any issues reported before proceeding.\n\n### Showboat Step 5: Confirm to the user\n\nTell the user:\n\n- Where the file was written\n- That it was generated using showboat mode (a linear code walkthrough)\n- How to use it: `\u002Flearning-opportunities orient`\n- That they can re-run `\u002Forient showboat` at any time to regenerate it\n\n","# Create Orientation\n\n## Purpose\n\nGenerate a repo-specific `orientation.md` file inside the `learning-opportunities` skill's `resources\u002F` directory. This file is used by that skill when invoked as `\u002Flearning-opportunities orientation` to run a structured learning exercise for someone new to the codebase.\n\n---\n\n## Step 1: Find where to write orientation.md\n\nAlways write to the **project level**, regardless of where the `learning-opportunities` skill is installed:\n\n```\n.claude\u002Fskills\u002Flearning-opportunities\u002Fresources\u002Forientation.md\n```\n\n(relative to the current working directory)\n\nIf the directory `.claude\u002Fskills\u002Flearning-opportunities\u002Fresources\u002F` does not exist, create it. If it already exists, leave it and any files inside it untouched — only write `orientation.md`.\n\nThis keeps orientation files co-located with the repo they describe — they can be committed to version control, shared with teammates, and never collide across projects.\n\n---\n\n## Argument check\n\nYou were invoked with arguments: `$ARGUMENTS`\n\nIf the argument is `showboat`, skip to the **Showboat Path** section below.\n\nOtherwise, continue with Steps 2–5 (the default path).\n\n---\n\n## Step 2: Detect the repo's primary language(s)\n\nCheck for these manifest\u002Fconfig files at the project root and note all that exist. A repo may use multiple languages.\n\n| Language   | Signal files                                              |\n|:-----------|:----------------------------------------------------------|\n| Python     | `pyproject.toml`, `setup.py`, `setup.cfg`, `Pipfile`, `requirements.txt` |\n| JavaScript | `package.json` (no `tsconfig.json`)                      |\n| TypeScript | `package.json` + `tsconfig.json`                         |\n| R          | `DESCRIPTION`, `NAMESPACE`, any `*.Rproj`                |\n| Ruby       | `Gemfile`, any `*.gemspec`                                |\n| Go         | `go.mod`                                                  |\n| Rust       | `Cargo.toml`                                              |\n| C\u002FC++      | `CMakeLists.txt`, `configure.ac`, root-level `Makefile`  |\n| Java\u002FKotlin| `pom.xml`, `build.gradle`, `build.gradle.kts`            |\n| C#         | any `*.csproj` or `*.sln`                                |\n\nRecord all detected languages. For each detected language, read its primary manifest file in full — it contains declared purpose, dependencies, entry points, and scripts\u002Fcommands that are essential for orientation.\n\n---\n\n## Step 3: Explore the repo\n\nUse the following sequence, drawn from research on expert program comprehension strategies. Experts read **strategically and selectively**, not exhaustively. The goal is a mental model of structure, not line-by-line understanding.\n\n### 3a. README and top-level docs\nRead `README.md`, `README.rst`, or `README` at the project root. Also check for a `docs\u002F` directory — read its index or table of contents if present. This gives the stated purpose and intended audience.\n\n*Source: Spinellis, \"Code Reading: The Open Source Perspective\" (2003) — start with the build system and README before reading any application code.*\n\n### 3b. Directory tree\nRun `find . -maxdepth 3 -not -path '*\u002F.git\u002F*' -not -path '*\u002Fnode_modules\u002F*' -not -path '*\u002F__pycache__\u002F*' -not -path '*\u002F.venv\u002F*'` to get the top-level structure. Read the directory tree as an architectural table of contents — naming conventions (`src\u002F`, `lib\u002F`, `tests\u002F`, `cmd\u002F`, `pkg\u002F`) reveal intent before any code is read.\n\n*Source: Spinellis (2003) — \"directory tree as table of contents.\"*\n\n### 3c. Entry points\nIdentify and read the main entry points based on detected language:\n\n- **Python**: `__main__.py`, `cli.py`, `main.py`, or the `[tool.poetry.scripts]` \u002F `[project.scripts]` section of `pyproject.toml`\n- **JavaScript\u002FTypeScript**: `main` field in `package.json`, `index.js`, `src\u002Findex.ts`\n- **Go**: files in `cmd\u002F*\u002Fmain.go` or root `main.go`\n- **Rust**: `src\u002Fmain.rs` or `src\u002Flib.rs`\n- **R**: `R\u002F` directory, the `DESCRIPTION` file's `Imports`\n- **Ruby**: files in `bin\u002F`, `lib\u002F\u003Cgem-name>.rb`\n- **C\u002FC++**: `main.c`, `main.cpp`, or the primary target in `CMakeLists.txt`\n\n*Source: Hermans, \"The Programmer's Brain\" (2021, Manning) — follow the entry point and call graph one level at a time.*\n\n### 3d. Test files\nRead 2–3 test files, prioritizing integration or end-to-end tests over unit tests. Tests are executable specifications — reading test names and assertions is one of the fastest ways to understand what a module is meant to do.\n\n*Source: Storey et al., \"How Software Developers Use Tools, Cognitive Strategies, and Representations to Navigate Code\" (IEEE TSE, 2006) — use the test suite as a specification.*\n\n### 3e. Core modules\nIdentify the 5–8 most important source files based on what you have learned. Read their top-level structure (class\u002Ffunction names, imports, docstrings) without necessarily reading every implementation in full.\n\n### 3f. Recent git history (if git is available)\nRun `git log --oneline -20` to see recent activity. Run `git log --format=\"%f\" | sort | uniq -c | sort -rn | head -10` to identify the most-edited files. High-churn files are usually the core of the system.\n\n*Source: Spolsky practitioner writing — \"find the biggest, most-edited file; read git history to understand why code is the way it is.\"*\n\n---\n\n## Step 4: Synthesize and write orientation.md\n\nWrite the file to the path identified in Step 1. Use this exact structure:\n\n```markdown\n# Repo Orientation: [repo name]\n\n> Generated by \u002Forient:orient. Re-run to update.\n\n## One-line purpose\n[Single sentence: what this repo does and why it exists. Written for someone with no prior context.]\n\n## Primary language(s)\n[List languages detected, with the dominant one first.]\n\n## Pipeline \u002F workflow stages\n[Ordered list of the main stages data or requests flow through. One line each. If the repo has no pipeline, describe the main modules and their relationships instead.]\n\n## Key files\n[6–10 entries in this format:]\n- `path\u002Fto\u002Ffile.py` — [what it does] | [why a new developer should read it]\n\n## Core concepts\n[3–5 domain or architectural concepts essential to working in this codebase. For each:]\n**[Concept name]**: [Plain-English definition. Where in the code it lives.]\n\n## Common gotchas\n[2–3 things that commonly trip up new developers. Be specific — reference actual file paths or function names.]\n\n## Suggested exercise sequence\n[EXACTLY 2 exercises. These are orientation exercises — their job is to build a high-level mental model of the repo, not to drill implementation details.\n\nOrientation exercises follow this pattern: direct the learner to read one specific, short artifact first, then ask them to synthesize or explain what they just read. Never ask them to predict something they couldn't know without reading — the goal is comprehension and synthesis, not prior knowledge.\n\nGood orientation exercises:\n- \"Open README.md and read the Features section. Then close it and explain to a non-developer what this tool produces and why someone would use it.\"\n- \"Open `models.py`. Find the dataclass that represents everything the pipeline produces for one audio file. What fields does it have, and what does that tell you about the pipeline's stages?\"\n- \"Open `config\u002Fdefault.yaml` and skim it. What are the two or three settings you'd most likely need to change for a new project, and why?\"\n\nBad orientation exercises (save these for later sessions):\n- \"Without opening any files, predict the pipeline stages\" — learner has no basis for this\n- Predicting specific function outputs, column names, or algorithmic behavior\n- Tracing through individual method implementations\n- Debugging specific logic (e.g. merge suffix behavior, metadata propagation)\n\nFor each exercise, specify: the exact file to open, what to read, and what synthesis question to answer after reading.]\n\n## Sources consulted\n[List the files and paths you actually read while generating this file.]\n```\n\nKeep each section concise. This is a teaching scaffold, not documentation. Prioritize clarity over completeness.\n\n---\n\n## Step 5: Confirm to the user\n\n> **Note for skill maintainers**: Academic and practitioner sources for the exploration methodology in Steps 3a–3f are documented in [resources\u002Forient-bibliography.md](resources\u002Forient-bibliography.md). Load that file only if you need to update or cite sources — it is not needed during normal skill execution.\n\nTell the user:\n- Where the file was written\n- How many key files and concepts were identified\n- How to use it: `\u002Flearning-opportunities orient`\n- That they can re-run `\u002Forient:orient` at any time to regenerate it as the codebase evolves\n\n---\n\n## Showboat Path\n\nThis path replaces Steps 2–5 when the argument is `showboat`. It produces `orientation.md` at the same location identified in Step 1, but uses the `showboat` CLI tool (via `uvx`) to build a detailed, linear code walkthrough.\n\n### Showboat Step 1: Check for uv\n\nRun `command -v uv` to verify that `uv` is installed.\n\nIf `uv` is not found, tell the user:\n\n> `uv` is required for showboat mode but was not found on your PATH.\n> Install it from: https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002Fgetting-started\u002Finstallation\u002F\n\nThen stop — do not proceed further.\n\n### Showboat Step 2: Read the repo and plan the document\n\nRead the repo to understand its structure, purpose, and key code paths. Then plan a linear walkthrough document with:\n\n- A title and table of contents\n- Commentary sections that explain the codebase narratively, in reading order\n- A Code Listings appendix containing the actual code snippets referenced by commentary\n- A suggested exercise sequence (same criteria as Step 4's exercise requirements — exactly 2 orientation exercises)\n\nPlan all section headings, code snippets, and sequential listing numbers **upfront before writing anything**. Each listing gets a sequential number (Listing 1, Listing 2, etc.) and a short description.\n\n### Showboat Step 3: Learn the showboat tool\n\nRun `uvx showboat --help` to learn the available commands and their syntax.\n\n### Showboat Step 4: Build orientation.md using showboat commands\n\nUse the showboat CLI to build the file. The output path is the same `orientation.md` from Step 1. Execute commands in this order:\n\n#### 4a. Initialize the document\n\n```\nuvx showboat init \u003Cpath-to-orientation.md> \"\u003CTitle>\"\n```\n\nThen add a table of contents via `uvx showboat note`.\n\n#### 4b. Write all commentary sections\n\nAdd each commentary section using `uvx showboat note`. Follow these rules for note content:\n\n- **No fenced code blocks** inside notes — use inline backtick code (`` `like_this` ``) instead\n- Reference code listings with inline links: `*([Listing N: description](#listing-N))*`\n- Write narratively — explain *why* the code is structured this way, not just *what* it does\n\n#### 4c. Write the Code Listings appendix\n\nFor each listing planned in Showboat Step 2:\n\n1. Add an anchor note: `uvx showboat note` with a heading like `### Listing N: description` and an HTML anchor `\u003Ca id=\"listing-N\">\u003C\u002Fa>`\n2. Add the code via `uvx showboat exec` to capture the actual file content (e.g., using `cat` or `sed` to extract the relevant lines)\n\n#### 4d. Append suggested exercise sequence\n\nAdd a final section via `uvx showboat note` with exactly 2 orientation exercises. These follow the same criteria as the default path's Step 4:\n\n- Direct the learner to read one specific, short artifact first\n- Then ask them to synthesize or explain what they just read\n- Never ask them to predict something they couldn't know without reading\n- Specify: the exact file to open, what to read, and what synthesis question to answer\n\n#### 4e. Verify the document\n\nRun:\n\n```\nuvx showboat verify \u003Cpath-to-orientation.md>\n```\n\nFix any issues reported before proceeding.\n\n### Showboat Step 5: Confirm to the user\n\nTell the user:\n\n- Where the file was written\n- That it was generated using showboat mode (a linear code walkthrough)\n- How to use it: `\u002Flearning-opportunities orient`\n- That they can re-run `\u002Forient showboat` at any time to regenerate it\n\n",{"name":5,"description":7,"allowed-tools":35,"argument-hint":36,"disable-model-invocation":37},"Read, Glob, Grep, Bash, Write","[showboat]",true,"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FDrCatHicks\u002Flearning-opportunities\u002Forient",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":48,"prompt":58,"zipAvailable":37},[49,52,55],{"tool":50,"command":51},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill orient",{"tool":53,"command":54},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill orient",{"tool":56,"command":57},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill orient","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FDrCatHicks\u002Flearning-opportunities\u002Forient\u002FSKILL.md",[],[61,75,85,94,100,107],{"skillNo":62,"name":63,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":71,"publishedAt":30},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[66],{"categoryNo":67,"categoryName":68,"taxonomyType":69,"taxonomyTypeDesc":70},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[72,73,74],"model","model hierarchy","model hierarchy skill",{"skillNo":76,"name":77,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":81,"publishedAt":30},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[80],{"categoryNo":67,"categoryName":68,"taxonomyType":69,"taxonomyTypeDesc":70},[82,83,84],"MCP","zoom","zoom mcp",{"skillNo":86,"name":87,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":30},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[91,92,93,83],"sdk","zoom apps sdk","apps",{"skillNo":95,"name":96,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":30},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[96],{"skillNo":101,"name":102,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":106,"publishedAt":30},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[105],{"categoryNo":67,"categoryName":68,"taxonomyType":69,"taxonomyTypeDesc":70},[102],{"skillNo":108,"name":109,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":30},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[109]]