Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/marcus/sidecar/project-switchingnpx skills add marcus/sidecar --skill project-switchinggit clone --depth 1 https://github.com/marcus/sidecarWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00057 | $0.01556 |
| Opus 5 | $0.00028 | $0.00778 |
| Sonnet 5 | $0.00011 | $0.00311 |
| Haiku 4.5 | $0.00006 | $0.00156 |
Grade A, and why
project-switching scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 196 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Project Switching
Switch between git repositories without restarting sidecar. Press @ to open the project switcher modal.
Architecture Overview
The project switcher uses the app's declarative modal library (internal/modal/) for rendering and mouse handling.
Key Files
| File | Contents |
|---|---|
internal/app/model.go |
State, init, reset, filter, switch, theme preview |
internal/app/update.go |
Keyboard and mouse handlers |
internal/app/view.go |
Modal building and section rendering |
internal/modal/ |
Modal library (builder, sections, layout) |
internal/config/types.go |
ProjectConfig struct |
internal/config/loader.go |
Config loading with path validation |
Model State
// internal/app/model.go
showProjectSwitcher bool
projectSwitcherCursor int
projectSwitcherScroll int
projectSwitcherInput textinput.Model
projectSwitcherFiltered []config.ProjectConfig
projectSwitcherModal *modal.Modal // Cached modal instance
projectSwitcherModalWidth int // Width for cache invalidation
projectSwitcherMouseHandler *mouse.Handler
Project vs Worktree Switching
- Project Switching (
@): Switch between configured projects fromconfig.json(arbitrary repos) - Worktree Switching (
W): Switch between git worktrees within the current repository
Configuration
Projects are configured in ~/.config/sidecar/config.json:
{
"projects": {
"list": [
{"name": "sidecar", "path": "~/code/sidecar"},
{"name": "td", "path": "~/code/td", "theme": "dark"}
]
}
}
Paths support ~ expansion. Projects can have per-project themes.
Core Flow
Opening (@ key)
case "@":
m.showProjectSwitcher = !m.showProjectSwitcher
if m.showProjectSwitcher {
m.activeContext = "project-switcher"
m.initProjectSwitcher()
} else {
m.resetProjectSwitcher()
m.updateContext()
}
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 196 lines · 57 tokens per session scan A 8129a5b306da
project-switching is a skill published in the GitHub repository marcus/sidecar (1,049 stars, last pushed 2d ago), licensed MIT. It adds 57 tokens to every session and 1,556 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
intake
The planning front-door. Captures feature ideas and bugs as graded rows in the root INTAKE.md ledger. Use it when the user says "log an idea", "capture a bug", "add to the backlog", "note this down", "track this feature", or invokes /intake. Owns the requirements interview — fleshes out thin ideas, proactively…
msg
Root menu for msg skills, plus harness modes. --init is the one-time project bootstrap — use it when the user says "initialise project", "bootstrap repo", "set up the framework", "start a new project", or asks to set up project structure in an empty repo. Other modes: --init-staging (add a staging branch), --update…
backlog-management
Lorekeeper backlog management — ticket lifecycle, numbering, scripts, and conventions. Load this when filing tickets, moving ticket states, checking what's ready to work on, or onboarding to the project workflow.
plan-pm
Principal PM skill — the autonomous PRD writer. Consumes a graded, fleshed-out row from the INTAKE.md backlog (idea, goal, type, grade) and drafts the full PRD solo — feature/acceptance table, edge cases, error handling — saved to features/planned/prd-[n]-[feature-slug]/. The requirements interview lives in /intake…
lorekeeper-pm
PM workflow for Lorekeeper. Load when managing backlog, filing tickets, reviewing dev work, or planning features. For ticket lifecycle, numbering, and scripts, see backlog-management skill.
sprint-review
Sprint review workflow — triage proposals, validate ticket readiness, and batch-promote tickets to dev. Load this before running a backlog review session.