project

Installation
SKILL.md

project-manager

Track and manage external repos: Learn (study) | Incubate (develop)

Golden Rule

ghq owns the clone → ψ/ owns the symlink

Never copy. Always symlink. One source of truth.

When to Use

Invoke this skill when:

  • User shares a GitHub URL and wants to study/clone it
  • User mentions wanting to learn from a codebase
  • User wants to start developing on an external repo
  • Need to find where a previously cloned project lives

Actions

learn [url|slug]

Clone repo for study (read-only reference).

# 1. Clone via ghq
ghq get -u https://github.com/owner/repo

# 2. Create org/repo symlink structure
GHQ_ROOT=$(ghq root)
mkdir -p ψ/learn/owner
ln -sf "$GHQ_ROOT/github.com/owner/repo" ψ/learn/owner/repo

Output: "✓ Linked [repo] to ψ/learn/owner/repo"

incubate — REDIRECTS TO /incubate

/project incubate is now /incubate. If the user says /project incubate [args], run /incubate [args] instead. Do NOT execute incubate logic here — invoke the standalone /incubate skill with the same arguments.

find [query]

Search for project across all locations:

# Search ghq repos
ghq list | grep -i "query"

# Search learn/incubate symlinks (org/repo structure)
find ψ/learn ψ/incubate -type l 2>/dev/null | grep -i "query"

Output: List matches with their ghq paths

list

Show all tracked projects with rich metadata (#227):

echo "📦 Projects"
echo ""

# Collect all tracked repos (learn + incubate symlinks)
REPOS=()
for link in $(find ψ/learn ψ/incubate -name "origin" -type l 2>/dev/null | sort); do
  dir=$(dirname "$link")
  owner=$(basename "$(dirname "$dir")")
  repo=$(basename "$dir")
  type="learn"
  echo "$link" | grep -q "incubate" && type="incubate"
  REPOS+=("$owner/$repo:$type")
done

if [ ${#REPOS[@]} -eq 0 ]; then
  echo "  No tracked projects. Use /learn or /incubate to add."
else
  printf "  %-35s %-6s %-8s %-8s %s\n" "Repo" "Stars" "License" "Type" "Description"
  printf "  %-35s %-6s %-8s %-8s %s\n" "───────────────────────────────────" "──────" "────────" "────────" "──────────────────────"

  for entry in "${REPOS[@]}"; do
    slug="${entry%%:*}"
    type="${entry##*:}"
    # Fetch metadata from GitHub (cached per session)
    meta=$(gh api "repos/$slug" --jq '"\(.stargazers_count)\t\(.license.spdx_id // "none")\t\(.description // "-" | .[0:40])"' 2>/dev/null || echo "?\tnone\t-")
    stars=$(echo "$meta" | cut -f1)
    license=$(echo "$meta" | cut -f2)
    desc=$(echo "$meta" | cut -f3)
    printf "  %-35s %-6s %-8s %-8s %s\n" "$slug" "⭐$stars" "$license" "$type" "$desc"
  done
fi

echo ""
echo "  Total: ${#REPOS[@]} tracked repos"

Directory Structure

ψ/
├── learn/owner/repo     → ~/Code/github.com/owner/repo  (symlink)
└── incubate/owner/repo  → ~/Code/github.com/owner/repo  (symlink)

~/Code/               ← ghq root (source of truth)
└── github.com/owner/repo/  (actual clone)

Health Check

When listing, verify symlinks are valid:

# Check for broken symlinks
find ψ/learn ψ/incubate -type l ! -exec test -e {} \; -print 2>/dev/null

If broken: ghq get -u [url] to restore source.

Examples

# User shares URL to study
User: "I want to learn from https://github.com/SawyerHood/dev-browser"
→ ghq get -u https://github.com/SawyerHood/dev-browser
→ mkdir -p ψ/learn/SawyerHood
→ ln -sf ~/Code/github.com/SawyerHood/dev-browser ψ/learn/SawyerHood/dev-browser

# User wants to develop → redirect to /incubate
User: "I want to work on claude-mem"
→ /incubate https://github.com/thedotmack/claude-mem

# User says "/project incubate" → redirect to /incubate
User: "/project incubate https://github.com/Soul-Brews-Studio/arra-oracle-v3 --contribute"
→ /incubate https://github.com/Soul-Brews-Studio/arra-oracle-v3 --contribute

Anti-Patterns

❌ Wrong ✅ Right
git clone directly to ψ/ ghq get then symlink
Flat: ψ/learn/repo-name Org structure: ψ/learn/owner/repo
Copy files Symlink always
Manual clone outside ghq Everything through ghq

Quick Reference

# Add to learn
ghq get -u URL && mkdir -p ψ/learn/owner && ln -sf "$(ghq root)/github.com/owner/repo" ψ/learn/owner/repo

# Incubate (use standalone /incubate skill)
/incubate URL [--flash | --contribute | --status | --offload]

# Update source
ghq get -u URL

# Find repo
ghq list | grep name
Related skills

More from soul-brews-studio/arra-oracle-skills

Installs
20
GitHub Stars
49
First Seen
Mar 26, 2026