Use to install agent-skills on another PC or bring an installed PC up to date — \"새 PC 세팅해줘\", \"다른 PC 에서도 똑같이 쓰게 해줘\", \"agent-skills 설치 점검\", \"agent-skills 업데이트해줘\", \"플러그인 최신화\", \"update agent-skills\". Dry-run only; the human runs the one `--apply` line. One auto-mode denial is tune-automode.
Installs into .claude/skills of the current project.
Sponsors
SSkills DirectorySkills Directory
Know which skills are safe — weekly.
SSkills DirectorySkills Directory
Is that skill safe to install?
Are you the author of Setup Pc?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/jeongjaesoon-setup-pc)
---
name: setup-pc
description: "Use to install agent-skills on another PC or bring an installed PC up to date — \"새 PC 세팅해줘\", \"다른 PC 에서도 똑같이 쓰게 해줘\", \"agent-skills 설치 점검\", \"agent-skills 업데이트해줘\", \"플러그인 최신화\", \"update agent-skills\". Dry-run only; the human runs the one `--apply` line. One auto-mode denial is tune-automode."
---
# Set up or update agent-skills on a PC
Installing the plugin brings the skills; it does not bring the user settings, the minimal `agent-skills.json` keys, the user's personal config or the automations. `scripts/setup.py` in the checkout (`${CLAUDE_SKILL_DIR}/../../scripts/setup.py`) does it from the repo's recommended defaults (`scripts/recommended-settings.json`) and the user's personal folder, in two halves: the files, which a dry run shows as a diff and the human applies with one `--apply <hash>` line, and the steps that write no Claude settings (`--actions-only`), which this skill runs behind a permission dialog. What each setting does is in `docs/new-pc.md`, and why the line is split there in `docs/zero-command-setup.md`; this skill does not repeat them.
## What this skill never does
- Write `~/.claude/settings.json`, `~/.claude/agent-skills.json` or anything else under `~/.claude`, by any tool, and never run `setup.py --apply`, `bootstrap.py --write` or `gh auth login`. Those are the human's `!` lines. The auto-mode classifier refuses an agent's edit to its own settings, and the human reading the diff is what authorizes the bundled rules.
- Run any setup step other than `python3 <checkout>/scripts/setup.py --actions-only [--orca-run]`, which the plugin's guard hook turns into a permission dialog. A dialog the human declines or a classifier denial is reported with the line for the human. A refused act is not run again, except once, in the same form, by the refused session (a restart that loads a new rule counts as that session), and only when the human allowed it in that session's own chat or added a rule for it, or when a classifier or hook refusal stated a reason and you added evidence that answers it, never for a human's refusal or a production sync. Report that retry as `재시도 1회: <what you added>`. A second refusal stops the act and you report it. Reaching the same result through another session, script, tool, wrapper or target stays forbidden.
- Edit the personal repo's files. It is the user's; this skill only clones it and fast-forwards it.
- Carry internal name lists, a personal `CLAUDE.md`, or personal skills, agents or autoMode rules, from any source. Chat channels, tracker projects and notes paths come only from the personal repo (step 4). Without them each feature keeps its default (off, or asks on first use).
| Change after setup | Owner |
|---|---|
| A rule for one action auto mode denied | `tune-automode` |
| `permissions.allow` beyond the bundle, `agent-skills.json` keys | `skills-config` |
| Hooks | `update-config` |
| What the periodic automations do | `reap-resources`; this skill only checks they are on |
| Reloading running sessions | `skills-sync broadcast` (never a raw `orca terminal send`) |
## Setup: a new PC
The plugin's SessionStart hook (`hooks/onboard.py`) starts this on a PC that was never set up: its paragraph carries the values the human gave the install dialog (`language`, `checkout`, `personal_repo`). When the human declines the offer, run the `onboard.py --decline` line the paragraph gives, so this profile is not asked again; if that line is refused, hand it to the human as a `!` line.
1. **Nothing installed yet?** The skill cannot fire. The human installs from inside a session, `/plugin marketplace add JeongJaeSoon/agent-skills` then `/plugin install agent-skills@jeongjaesoon`, so the install dialog asks for those values (the shell's `claude plugin install` never asks), and opens a new session.
2. **`gh` logged in first.** The rules about the user's repositories and the personal repo need it; if `gh auth status` fails, hand over `! gh auth login` and wait. **Language**: the install dialog's value, else the system locale, which `setup.py` reads when `--language` is left out; say in one line which it is. **Orca Run**: when a `ROLE: orchestrator` notice is in this session's context, step 7 adds `--orca-run`, which binds this terminal to a new Run when it has none. Without that notice (usual on a new PC), run without it and say so in one line.
3. **The checkout.** At the `checkout` path (default `~/src/agent-skills`, expanded to an absolute path), clone `https://github.com/JeongJaeSoon/agent-skills` when nothing is there. An existing checkout is used as it is; a `refused:` line in step 5 says what the human fixes first.
4. **The personal folder.** With a `personal_repo`, `git clone <url> ~/.config/agent-skills/personal` with the URL as the hook gave it, credentials stripped; never put a token back into the URL, where it would be printed and kept in `.git/config`. A GitHub https clone that fails on authentication gets `! gh auth setup-git` from the human, then one more try; another host's credentials are the human's to set up outside the URL. When the folder is there, `git -C ~/.config/agent-skills/personal pull --ff-only` instead. It holds the personal `agent-skills.json` and the tracker site rules Markdown that `tracker.rules_file` names (`docs/zero-command-setup.md`); personal agents and autoMode rules are not carried. Without one, skip this step: each personal feature keeps its default.
5. **Dry run** from the checkout: `python3 <checkout>/scripts/setup.py --settings-only [--language <name>]` (`--language` only with the dialog's value). It writes nothing. Show the diff as printed; do not paraphrase rules away. A `kept` line is a value already on this PC that setup leaves as it is, over a recommended or personal one; tell the human, who changes it by hand if the other value should win. A `refused:` line (a worktree, a branch other than `main`, `CLAUDE_CODE_PLUGIN_DIRS` pointing at another checkout, a malformed personal file) is fixed first, by the human. On macOS, `spotlight` lines list the development folders Spotlight still indexes and end with the System Settings step that excludes them; hand that step to the human as GUI work. It needs no `--apply`, and no command does it in its place (no marker files, no `mdutil`, no renaming a folder to `.noindex`).
6. **Hand over the one line** it printed: `! python3 -I <checkout>/scripts/setup.py … --apply <hash>`. It ends with a rollback line per file. A hash that no longer matches means something changed since the diff: dry run again.
7. **The steps**, once step 6 is applied: run `python3 <checkout>/scripts/setup.py --actions-only [--orca-run]` as one standalone command with the absolute path. The guard hook shows the human a dialog naming what it does: the sync job, the default-on automations (watch-prs and watch-mentions only when the personal `prs` and `mentions` keys are in, which step 6 put there; reap-hard, and the session patrol it starts, only when the protect-list file exists, because it closes cards without asking; orch-dash), Orca, then the check table. A full `--apply` line runs the same steps, and a dry run lists them first as `then automation <name>: install`.
8. **Read the table** it ended with. `missing`, `differs` and `warn` rows are left to do; each row's `next` goes to the human as a `!` line or to the owner above. `gh auth login` and git commit signing are the human's.
9. **New session.** `CLAUDE_CODE_PLUGIN_DIRS` and the settings are read at start, so sessions running before the apply are restarted, not reloaded.
The human may refuse part of the bundle: they edit the rule out after applying (the rollback line restores the old file), and later runs do not offer it again.
## Update: an installed PC
1. **The personal folder**, when `~/.config/agent-skills/personal` is there: `git -C ~/.config/agent-skills/personal pull --ff-only`, before the dry run, which reads it and hashes the plan. Neither `setup.py` nor the sync job pulls it, so skipping this step leaves new personal keys out; the step 2 dry run only warns (a `personal:` line) when the folder is behind its last-fetched upstream or was fetched over 7 days ago. When the pull fails (local changes, a diverged branch, authentication), tell the human why and go on without the new keys; the folder is theirs to fix.
2. Dry run `python3 <checkout>/scripts/setup.py --update`. Like any dry run it writes and fetches nothing: it plans the recommended items this PC has not been offered before from the checkout as it is, and the personal keys not offered before, and lists the fast-forward as the `first` step. `spotlight` lines are handled as in setup step 5.
3. Hand over the `--apply` line as in setup step 6. It fast-forwards the checkout first (`skills-sync sync`; stops on a dirty or diverged checkout, `docs/platform.md` §3), then checks the plan again; a release that brought new recommendations makes the hash no longer match, so the human dry runs again (the checkout is already fast-forwarded by then). With `no change` on the files, the line only runs the fast-forward and the automation steps. The check table reports a leftover LaunchAgent from an older setup as a `legacy LaunchAgent` warning; removing it is the owner's own step, never run by this skill.
4. Running sessions: `skills-sync broadcast` sends `/reload-skills` or `/reload-plugins` to idle ones. This session reloads itself as `write-skill` §7 describes.
5. A marketplace install instead of a checkout: `! claude plugin marketplace update jeongjaesoon`, `! claude plugin update agent-skills@jeongjaesoon`, then `/reload-plugins`. `setup.py` is for the checkout install.
## Check only
`python3 "${CLAUDE_SKILL_DIR}/scripts/setup_check.py" check [--json]` prints the table alone, read-only; what its rows cover is in `docs/new-pc.md` ("점검 표"). Only `missing`, `differs` and `warn` count as left to do.
**Optional: compare with another PC.** When the human wants this PC to match a specific old one, they run there `! python3 <path>/setup_check.py export > ~/setup-baseline.json` (no `env` values, no rules that look like credentials, `agent-skills.json` key names only) and copy the file over. `check --baseline <file>` then marks what differs. Missing autoMode rules: `automode-spec --baseline <file>` writes a spec; the human picks the rules to keep and `tune-automode` takes them from its step 6. Personal files and `agent-skills.json` values are copied by the human.
## Report
The table `setup.py` or `check` ended with, then: the line the human ran, the Spotlight step when the dry run printed one, what is still open with its owner, and whether running sessions were restarted or reloaded.
## Tests
`python3 scripts/test_setup.py` and `python3 skills/setup-pc/scripts/test_setup_check.py`