project
npx skills add https://github.com/soul-brews-studio/oracle-skills-cli --skill project
Agent 安装分布
Skill 文档
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 [url|slug] [–offload|–contribute|–flash]
Clone repo for active development with optional workflow flags.
# Same flow, different target
ghq get -u https://github.com/owner/repo
GHQ_ROOT=$(ghq root)
mkdir -p Ï/incubate/owner
ln -sf "$GHQ_ROOT/github.com/owner/repo" Ï/incubate/owner/repo
Output: “â Linked [repo] to Ï/incubate/owner/repo”
Workflow Flags
| Flag | Scope | Duration | Cleanup |
|---|---|---|---|
| (none) | Long-term dev | Weeks/months | Manual |
--offload |
Manual trigger | â | Remove symlink (keep ghq) |
--contribute |
Multi-feature | Days/weeks | Offload when all done (keep ghq for PR feedback) |
--flash |
Single fix | Minutes | Issue â PR â offload â purge (one shot) |
–offload
Remove symlink after work is done (manual trigger):
unlink Ï/incubate/owner/repo
rmdir Ï/incubate/owner 2>/dev/null
# ghq clone preserved for future use
–contribute
For multi-feature contributions over days/weeks. Offload when ALL features are done:
# 1. Work on multiple features/fixes over time
git -C Ï/incubate/owner/repo checkout -b feat/feature-1
# ... work, commit, push, PR ...
git -C Ï/incubate/owner/repo checkout -b feat/feature-2
# ... work, commit, push, PR ...
# 2. When all done, offload (ghq kept for PR feedback)
unlink Ï/incubate/owner/repo
Use case: Extended contribution period. Keep ghq for addressing PR reviews.
–flash
Complete contribution cycle with full cleanup:
/project incubate URL --flash
â
1. gh issue create â #N (document intent)
â
2. ghq get â symlink to Ï/incubate/
â
3. git checkout -b issue-N-description
â
4. Make changes, commit
â
5. git push â gh pr create --body "Closes #N"
â
6. cd back to main repo
â
7. Auto-offload + purge ghq clone
â
"â Issue #N â PR #M â Offloaded & Purged"
Use case: Quick external contributions without leaving traces.
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:
echo "ð Learn"
find Ï/learn -type l 2>/dev/null | while read link; do
target=$(readlink "$link")
echo " ${link#Ï/learn/} â $target"
done
echo "ð± Incubate"
find Ï/incubate -type l 2>/dev/null | while read link; do
target=$(readlink "$link")
echo " ${link#Ï/incubate/} â $target"
done
echo "ð External (ghq)"
ghq list | grep -v "laris-co/Nat-s-Agents" | head -10
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 long-term
User: "I want to work on claude-mem"
â /project incubate https://github.com/thedotmack/claude-mem
â Symlink created, work until done
# User wants to contribute (keep ghq for follow-up)
User: "Fix a bug in oracle-v2"
â /project incubate https://github.com/Soul-Brews-Studio/oracle-v2 --contribute
â [edit, commit, push]
â Auto-offload, ghq kept for PR feedback
# User wants quick flash contribution (full cleanup)
User: "Quick README fix on oracle-skills-cli"
â /project incubate https://github.com/Soul-Brews-Studio/oracle-skills-cli --flash
â Issue #17 created
â Branch: issue-17-fix-readme
â [edit, commit, push]
â PR #18 created (Closes #17)
â Auto-offload + purge
â "â Issue #17 â PR #18 â Offloaded & Purged"
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
# Add to incubate
ghq get -u URL && mkdir -p Ï/incubate/owner && ln -sf "$(ghq root)/github.com/owner/repo" Ï/incubate/owner/repo
# Offload (remove symlink only)
unlink Ï/incubate/owner/repo && rmdir Ï/incubate/owner 2>/dev/null
# Offload + purge (remove symlink AND ghq clone)
unlink Ï/incubate/owner/repo && rm -rf "$(ghq root)/github.com/owner/repo"
# Update source
ghq get -u URL
# Find repo
ghq list | grep name
Workflow Intensity Scale
incubate â Long-term dev (manual cleanup)
â
--contribute â Push â offload (keep ghq)
â
--flash â Issue â Branch â PR â offload â purge (complete cycle)