Orient logo

Orient

CommunityPopular
DrCatHicks
orient

Generates a repo-specific orientation.md resource for the learning-opportunities skill. Invoke directly when the user asks for repo orientation; do not trigger automatically.

Overview

PublisherDrCatHicks
Repositorylearning-opportunities
Skill nameorient
Stars
2.4K
Forks
91
Bundled files
1
LicenseCC-BY-4.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 1 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by DrCatHicks on GitHub. Read the source before you install it.

Installation

Install the Orient AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/DrCatHicks/learning-opportunities.git /tmp/learning-opportunities
mkdir -p .claude/skills
cp -r /tmp/learning-opportunities/orient/skills/orient .claude/skills/orient
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Orient in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Orient on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Orient is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Create Orientation

Purpose

Generate a repo-specific orientation.md file inside the learning-opportunities skill's resources/ directory. This file is used by that skill when invoked with the orient argument to run a structured learning exercise for someone new to the codebase.


Step 1: Find where to write orientation.md

Always write to the project level, regardless of where the learning-opportunities skill is installed.

When running in Codex, write to:

.codex/skills/learning-opportunities/resources/orientation.md

When running in Claude Code, write to:

.claude/skills/learning-opportunities/resources/orientation.md

Both paths are relative to the current working directory.

If the target directory does not exist, create it. If it already exists, leave it and any files inside it untouched — only write orientation.md.

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


Argument check

You were invoked with arguments: $ARGUMENTS

If the argument is showboat, skip to the Showboat Path section below.

Otherwise, continue with Steps 2–5 (the default path).


Step 2: Detect the repo's primary language(s)

Check for these manifest/config files at the project root and note all that exist. A repo may use multiple languages.

LanguageSignal files
Pythonpyproject.toml, setup.py, setup.cfg, Pipfile, requirements.txt
JavaScriptpackage.json (no tsconfig.json)
TypeScriptpackage.json + tsconfig.json
RDESCRIPTION, NAMESPACE, any *.Rproj
RubyGemfile, any *.gemspec
Gogo.mod
RustCargo.toml
C/C++CMakeLists.txt, configure.ac, root-level Makefile
Java/Kotlinpom.xml, build.gradle, build.gradle.kts
C#any *.csproj or *.sln

Record all detected languages. For each detected language, read its primary manifest file in full — it contains declared purpose, dependencies, entry points, and scripts/commands that are essential for orientation.


Step 3: Explore the repo

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

3a. README and top-level docs

Read README.md, README.rst, or README at the project root. Also check for a docs/ directory — read its index or table of contents if present. This gives the stated purpose and intended audience.

Source: Spinellis, "Code Reading: The Open Source Perspective" (2003) — start with the build system and README before reading any application code.

3b. Directory tree

Run find . -maxdepth 3 -not -path '*/.git/*' -not -path '*/node_modules/*' -not -path '*/__pycache__/*' -not -path '*/.venv/*' to get the top-level structure. Read the directory tree as an architectural table of contents — naming conventions (src/, lib/, tests/, cmd/, pkg/) reveal intent before any code is read.

Source: Spinellis (2003) — "directory tree as table of contents."

3c. Entry points

Identify and read the main entry points based on detected language:

  • Python: __main__.py, cli.py, main.py, or the [tool.poetry.scripts] / [project.scripts] section of pyproject.toml
  • JavaScript/TypeScript: main field in package.json, index.js, src/index.ts
  • Go: files in cmd/*/main.go or root main.go
  • Rust: src/main.rs or src/lib.rs
  • R: R/ directory, the DESCRIPTION file's Imports
  • Ruby: files in bin/, lib/<gem-name>.rb
  • C/C++: main.c, main.cpp, or the primary target in CMakeLists.txt

Source: Hermans, "The Programmer's Brain" (2021, Manning) — follow the entry point and call graph one level at a time.

3d. Test files

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

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.

3e. Core modules

Identify the 5–8 most important source files based on what you have learned. Read their top-level structure (class/function names, imports, docstrings) without necessarily reading every implementation in full.

3f. Recent git history (if git is available)

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

Source: Spolsky practitioner writing — "find the biggest, most-edited file; read git history to understand why code is the way it is."


Step 4: Synthesize and write orientation.md

Write the file to the path identified in Step 1. Use this exact structure:

markdown
# Repo Orientation: [repo name]

> Generated by orient. Re-run to update.

## One-line purpose
[Single sentence: what this repo does and why it exists. Written for someone with no prior context.]

## Primary language(s)
[List languages detected, with the dominant one first.]

## Pipeline / workflow stages
[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.]

## Key files
[6–10 entries in this format:]
- `path/to/file.py` — [what it does] | [why a new developer should read it]

## Core concepts
[3–5 domain or architectural concepts essential to working in this codebase. For each:]
**[Concept name]**: [Plain-English definition. Where in the code it lives.]

## Common gotchas
[2–3 things that commonly trip up new developers. Be specific — reference actual file paths or function names.]

## Suggested exercise sequence
[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.

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

Good orientation exercises:
- "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."
- "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?"
- "Open `config/default.yaml` and skim it. What are the two or three settings you'd most likely need to change for a new project, and why?"

Bad orientation exercises (save these for later sessions):
- "Without opening any files, predict the pipeline stages" — learner has no basis for this
- Predicting specific function outputs, column names, or algorithmic behavior
- Tracing through individual method implementations
- Debugging specific logic (e.g. merge suffix behavior, metadata propagation)

For each exercise, specify: the exact file to open, what to read, and what synthesis question to answer after reading.]

## Sources consulted
[List the files and paths you actually read while generating this file.]

Keep each section concise. This is a teaching scaffold, not documentation. Prioritize clarity over completeness.


Step 5: Confirm to the user

Note for skill maintainers: Academic and practitioner sources for the exploration methodology in Steps 3a–3f are documented in resources/orient-bibliography.md. Load that file only if you need to update or cite sources — it is not needed during normal skill execution.

Tell the user:

  • Where the file was written
  • How many key files and concepts were identified
  • How to use it: invoke learning-opportunities with the orient argument
  • That they can re-run orient at any time to regenerate it as the codebase evolves

Showboat Path

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

Showboat Step 1: Check for uv

Run command -v uv to verify that uv is installed.

If uv is not found, tell the user:

uv is required for showboat mode but was not found on your PATH. Install it from: https://docs.astral.sh/uv/getting-started/installation/

Then stop — do not proceed further.

Showboat Step 2: Read the repo and plan the document

Read the repo to understand its structure, purpose, and key code paths. Then plan a linear walkthrough document with:

  • A title and table of contents
  • Commentary sections that explain the codebase narratively, in reading order
  • A Code Listings appendix containing the actual code snippets referenced by commentary
  • A suggested exercise sequence (same criteria as Step 4's exercise requirements — exactly 2 orientation exercises)

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

Showboat Step 3: Learn the showboat tool

Run uvx showboat --help to learn the available commands and their syntax.

Showboat Step 4: Build orientation.md using showboat commands

Use the showboat CLI to build the file. The output path is the same orientation.md from Step 1. Execute commands in this order:

4a. Initialize the document
uvx showboat init <path-to-orientation.md> "<Title>"

Then add a table of contents via uvx showboat note.

4b. Write all commentary sections

Add each commentary section using uvx showboat note. Follow these rules for note content:

  • No fenced code blocks inside notes — use inline backtick code (`like_this`) instead
  • Reference code listings with inline links: *([Listing N: description](#listing-N))*
  • Write narratively — explain why the code is structured this way, not just what it does
4c. Write the Code Listings appendix

For each listing planned in Showboat Step 2:

  1. Add an anchor note: uvx showboat note with a heading like ### Listing N: description and an HTML anchor <a id="listing-N"></a>
  2. Add the code via uvx showboat exec to capture the actual file content (e.g., using cat or sed to extract the relevant lines)
4d. Append suggested exercise sequence

Add a final section via uvx showboat note with exactly 2 orientation exercises. These follow the same criteria as the default path's Step 4:

  • 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
  • Specify: the exact file to open, what to read, and what synthesis question to answer
4e. Verify the document

Run:

uvx showboat verify <path-to-orientation.md>

Fix any issues reported before proceeding.

Showboat Step 5: Confirm to the user

Tell the user:

  • Where the file was written
  • That it was generated using showboat mode (a linear code walkthrough)
  • How to use it: /learning-opportunities orient
  • That they can re-run /orient showboat at any time to regenerate it

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Orient AI skill do?

Generates a repo-specific orientation.md resource for the learning-opportunities skill. Invoke directly when the user asks for repo orientation; do not trigger automatically.

Why use Orient on TypingMind?

Because you install it once and use it with any model. Orient is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Orient in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/DrCatHicks/learning-opportunities/tree/main/orient/skills/orient. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Orient?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Orient?

As many as you like. As long as a model supports skills, you can use Orient with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Orient AI skill free?

Yes. It is published on GitHub by DrCatHicks under the CC-BY-4.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇