Last updated: 2026-03-15 Automatically updated by fleet agents when workspace config changes.
GitHub Copilot CLI workspace for @castrojo — maintainer of Project Bluefin and Universal Blue contributor.
Manages 51+ projects across 4 GitHub namespaces from one directory, with a self-improving skills library and swarm-first execution.
~/src is simultaneously:
- A directory holding 50+ project git repos
- A private git repo (
castrojo/copilot-config) tracking only workspace config - A Copilot workspace with automatic context, skills, and rules
Key insight: all project repos are gitignored. Only the config layer is tracked.
gh auth status # GitHub CLI authenticated with SSH
ssh -T git@github.com # SSH key working
just --version # just build runner
copilot --version # GitHub Copilot CLIgit clone git@github.com:castrojo/copilot-config.git ~/src
cd ~/src && just setup
source ~/.bashrcjust setup:
- Symlinks
~/.copilot/copilot-instructions.md→~/src/dotcopilot/copilot-instructions.md - Symlinks
~/.gemini/GEMINI.md→~/src/dotgemini/GEMINI.md - Symlinks
~/.gitconfig→~/src/dot/gitconfig - Sets
COPILOT_CUSTOM_INSTRUCTIONS_DIRS="$HOME/src/instructions"in~/.bashrc - Runs
just link-projects(per-project instruction symlinks — see below) - Updates
dotcopilot/config.jsontrusted_folders for this machine's$HOME
~/src/
├── AGENTS.md ← source of truth for ALL AI clients
├── GEMINI.md ← "read AGENTS.md" (Gemini CLI)
├── CLAUDE.md ← "read AGENTS.md" (Claude Code)
├── AGENTS-onboarding.md ← this file
├── Justfile ← setup / sync / pull / status / link-projects
├── projects.json ← catalog of all 51 projects
│
├── instructions/ ← COPILOT_CUSTOM_INSTRUCTIONS_DIRS target
│ └── _workspace.instructions.md ← skill loading decision tree (always loads, ~20 lines)
│
├── skills/ ← personal skills library (skills.sh format)
│ ├── workflow/ ← commit discipline, PR rules, review habits
│ ├── oci-images/ ← cross-cutting OCI/container image patterns
│ ├── github/ ← gh CLI patterns and preferences
│ ├── linux-desktop/ ← Fedora/atomic/Flatpak/bootc patterns
│ ├── cncf-community/ ← CNCF governance and community norms
│ ├── bluefin-build/ ← build + validation + PR workflow (scripts/)
│ ├── bluefin-packages/ ← brew/flatpak/RPM/COPR management (scripts/)
│ ├── bluefin-iso/ ← ISO pipeline + LTS safety guard (scripts/)
│ ├── bluefin-release/ ← streams, changelogs, release cadence (scripts/)
│ ├── bluefin-renovate/ ← automated dependency update workflow
│ ├── bluefin-docs/ ← documentation and website management
│ ├── bluefin-variants/ ← image × tag × flavor matrix reference
│ ├── bluefin-ci/ ← CI/CD troubleshooting (scripts/)
│ ├── bluefin-security/ ← COPR isolation, cosign, secureboot
│ └── bluefin-lts/ ← LTS variant (critical ISO safety warnings)
│
├── .github/
│ ├── copilot-instructions.md ← "read AGENTS.md" pointer
│ └── instructions/ ← per-project instruction files (13 projects)
│ ├── bluefin.instructions.md
│ ├── aurora.instructions.md
│ └── ... (one per active project)
│
├── dotgemini/ ← tracked ~/.gemini/ config
│ └── GEMINI.md ← global Gemini rules → symlinked from ~/.gemini/
│
├── dotcopilot/ ← tracked ~/.copilot/ config
│ ├── copilot-instructions.md ← global Copilot rules → symlinked from ~/.copilot/
│ ├── config.json ← trusted_folders, allowed URLs, preferences
│ └── mcp-config.json ← MCP server config (linux-mcp-server)
│
└── dot/
└── gitconfig ← ~/.gitconfig → symlinked by just setup
Context loaded is scoped to exactly what you need:
| Where you are | What loads | ~Size |
|---|---|---|
~/src/ |
AGENTS.md + workspace guide | ~120 lines |
~/src/bluefin/ |
workspace guide + bluefin instructions | ~105 lines |
~/src/tab/ |
workspace guide + tab instructions | ~54 lines |
| Anywhere | Skills (on-demand via /skills only) |
0 until loaded |
How per-project instructions load:
just link-projects creates PROJECT/.github/copilot-instructions.md → symlink to the
instruction file in ~/src/.github/instructions/. This is excluded via
.git/info/exclude in each project repo — never committed, never pushed upstream.
Recreated by just link-projects on any new machine.
Without this architecture: 577 lines would load for every session regardless of project.
All clients point to AGENTS.md as the single source of truth:
| Client | Global config | Workspace file |
|---|---|---|
| GitHub Copilot CLI | ~/.copilot/copilot-instructions.md → symlink |
AGENTS.md |
| Gemini CLI | ~/.gemini/GEMINI.md → symlink |
GEMINI.md → AGENTS.md |
| Claude Code | (add ~/.claude/CLAUDE.md symlink manually) |
CLAUDE.md → AGENTS.md |
| Any AGENTS.md reader | — | AGENTS.md |
Default mode: dispatch fleet agents in parallel, keep the main session free.
- Independent subtasks → multiple
/fleetagents simultaneously - Skill captures →
/fleet(always, never inline) - Main session = user interaction + tasks requiring approval only
Can this be parallelized? → /fleet (multiple agents)
Can it be fully delegated? → /fleet (single agent, background)
Requires user approval? → do inline, delegate follow-on work
After every session, fleet agents capture what was learned:
/fleetagent dispatched (main session uninterrupted)- Agent writes to skill or instruction file
- Runs
just sync→ commits and pushes tocastrojo/copilot-config - Available on all machines next session
Two stores, strictly separated:
- Project-specific →
~/src/.github/instructions/PROJECT.instructions.md - Cross-cutting personal →
~/src/skills/SKILL/SKILL.md
origin = castrojo fork ← push here
upstream = project org ← PRs land here
- Work on feature branches, commit freely
- Push to
origin - Open Firefox for the upstream PR comparison:
bash ~/src/skills/bluefin-build/scripts/open-pr.sh - You write the description and submit
gh pr create and /delegate are never used. This is in every client's config.
just setup # new machine: symlinks, ~/.bashrc, config.json, link-projects
just link-projects # (re)create per-project .github/copilot-instructions.md symlinks
just sync # commit + push to castrojo/copilot-config
just pull # pull latest
just status # show changed tracked filesBluefin LTS ISOs are currently broken and disabled.
- Never run
promote-iso.ymlwithvariant: ltsorvariant: all promote-iso.shenforces this with a hard abort- Load
/skills bluefin-ltsbefore any LTS work for full safety context
- Clone into
~/src/YOUR-PROJECT - Add upstream:
git remote add upstream git@github.com:ORG/REPO.git - Add entry to
~/src/projects.json - Create
~/src/.github/instructions/YOUR-PROJECT.instructions.md - Add a
linkline to thelink-projectsrecipe inJustfile - Run
just link-projects && just sync