From inc-os
Save your work to the system. Review local changes, walk the user through any merge conflicts, then push to origin/main.
How this skill is triggered — by the user, by Claude, or both
Slash command
/inc-os:save-systemThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Review local changes against main, flag anything risky, then sync with origin/main and push.
Review local changes against main, flag anything risky, then sync with origin/main and push.
| Area | Path patterns | Why it's risky |
|---|---|---|
| Website (auto-deploys to production) | app/**, public/** | Pushes go live on Vercel on merge to main |
| Brand voice (foundation) | wiki/brand-voice/** | Every downstream draft reads from this |
| Offers (foundation) | wiki/offers/** | Every proposal and report reads from this |
| Audience (foundation) | wiki/audience/** | Every buyer-facing draft reads from this |
| Frameworks | wiki/frameworks/** | Core methodology patterns |
| Proposal templates | wiki/proposals/** | Templates feed every client proposal |
| Report templates | wiki/reports/** | Templates feed every client report |
| Consultants | wiki/consultants/** | Changes advisor panel feedback |
| Skills | .claude/skills/** | Core workflows |
| Shared settings | .claude/settings.json | Affects Claude Code behavior |
Client folders (clients/**) and docs (docs/**) are not risky — they churn constantly with working data.
Everything else is not risky and can be pushed without review.
When a risky file matches a foundation path (wiki/brand-voice/**, wiki/offers/**, wiki/audience/**), label it in the summary as (foundation).
Run in parallel:
git status --shortgit diff HEAD (unstaged + staged changes)git log --oneline -5 (recent commits for message style)git rev-list --count origin/main..HEAD (unpushed commits)If there are no changes (clean working tree AND no unpushed commits), tell the user there's nothing to push and stop.
The diff above includes every uncommitted change in the working tree, not just what this chat touched. Default to saving everything. Never ask the user to pick individual files.
Always show a summary of what's been worked on — describe the work, not the files. Group changes into short bullets like "what was being worked on", inferred from the diff (file purpose, commit-style verbs). Skip file paths in this summary.
Work pending save:
This chat:
• Added scope prompt to save-system skill
Earlier, unpushed:
• Tax return email tweaks
• Hogan 360 framework edits
• Stale build artifact
Rules:
Then ask (only if the split is known):
"Save everything, or only this chat's work?
- Everything (default)
- Just this chat"
Everything → proceed to Step 2 with all changes.
Just this chat → narrow the change set to files Claude edited this conversation. At Step 4 stage only those paths (git add <paths>), not git add -A. Earlier unpushed changes stay in the working tree. Mention this in Step 7's confirmation.
Use the risky-path table above. Split every changed file into two buckets:
Present a summary:
Changes to push:
SAFE (N files)
• clients/acme/sessions/2026-05-12.md — new session log
• docs/playbooks/intake-call.md — playbook tweak
RISKY (N files)
• wiki/audience/icp.md — (foundation)
• wiki/brand-voice/voice.md — (foundation)
• wiki/frameworks/hogan-360/scoring.md — modified framework
• .claude/skills/ingest-source/SKILL.md — changed ingest workflow
• app/page.tsx — website change, auto-deploys on merge
If there are no risky files, skip to Step 4.
If there are risky files, for each risky file:
Options:
git checkout -- <file> to undo that specific fileAfter resolving all risky files, re-run git status to confirm the final state.
If there are uncommitted changes:
git add <paths>), leave the rest alonegit log)Before pushing, check if origin/main has moved ahead:
git fetch origin main --quiet
BEHIND=$(git rev-list --count HEAD..origin/main)
If BEHIND = 0, proceed directly to Step 6.
If BEHIND > 0, origin is ahead — walk through the divergence interactively:
Show the user what's on origin that we don't have:
git log HEAD..origin/main --oneline
Offer to rebase:
"Origin/main has N commit(s) we don't have locally. I'll rebase your local commits on top of origin/main. Want to proceed?"
On confirmation, run:
git pull --rebase --autostash origin main
If rebase succeeds cleanly, proceed to Step 6.
If rebase hits conflicts, stop immediately. Show the conflict state:
git status
git diff --diff-filter=U
Then walk through each conflicted file one at a time:
git add <file> and move to the next conflictgit rebase --continue"This conflict in
<file>needs manual resolution. Open it in your editor, fix the conflict markers, then rungit add <file> && git rebase --continue. Let me know when you're done and I'll resume."
NEVER use git push --force or git push --force-with-lease. If the push would require a force, stop and explain why, then help the user understand what diverged.
git push origin main
If push is denied by a permission rule (e.g., "Direct push to main"):
"Push got denied by a permission rule. Auto mode is on, so I can't get an interactive approval. Switch off auto mode (shift+tab), then say 'retry' and I'll push again."
Pushed to main (N commits).
Changes:
• <grouped summary of what shipped>
git push origin main again after checking credentials.git rebase --abort to restore the pre-rebase state. Nothing is lost./inc-os:update-system for a pure sync.npx claudepluginhub austinmarchese/incubator-os-plugin --plugin inc-osCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.