update
하나 이상의 skill 또는 tracked 저장소를 최신 버전으로 업데이트합니다.
skillshare update my-skill # 단일 skill 업데이트
skillshare update a b c # 여러 개를 한 번에 업데이트
skillshare update --group frontend # 그룹의 모든 skill 업데이트
skillshare update team-skills # tracked 저장소 업데이트
skillshare update --all # 전체 업데이트
skillshare update agents --all # 모든 tracked/updatable agent 업데이트
사용 시점
- tracked 저장소에 새 커밋이 있는 경우(
check로 발견) - 설치된 skill에 더 새로운 버전이 있는 경우
- 원본 source에서 skill을 다시 다운로드하고 싶은 경우
$ skillshare update pdf
✓ Update pdf · from github.com/anthropics/skills/skills/pdf · 1.9s
✓ Audit no findings
Next
skillshare sync link the changes into your targets
동작 방식
Tracked 저장소의 경우
일반 Skill의 경우
원격 source에서 설치한 skill은 해당 source에서 재설치됩니다. 로컬 경로에서 설치한 skill(skillshare install /path/to/skill)은 그 경로에서 다시 복사되므로 update가 그곳의 변경 사항을 반영합니다. 경로가 변경되었는지는 check가 알려 줍니다.
옵션
| Flag | 설명 |
|---|---|
--all, -a | 모든 tracked 저장소/skill을 업데이트하거나, update agents --all로 사용 시 모든 agent를 업데이트. 따라간 source 링크 뒤의 tracked repo는 여러분 자신의 checkout이므로 경고와 함께 건너뜁니다. 이름을 지정해 update하세요 |
--group, -G <name> | 그룹 내 업데이트 가능한 모든 skill을 업데이트하거나, agent 하위 디렉터리의 모든 agent를 업데이트 |
--force, -f | 로컬 변경 사항을 버리고 audit findings에도 불구하고 진행하며, 이미 upstream commit에 있는 원격 skill도 재설치 |
--dry-run, -n | 변경 없이 미리보기 |
--skip-audit | 보안 audit gate를 건너뜀 |
--audit-threshold <t>, --threshold <t>, -T <t> | update audit block threshold 재정의(`critical |
--diff | skill/저장소 업데이트 후 파일 수준 변경 요약 표시 |
--audit-verbose | batch mode에서 skill별 상세 audit findings 표시 |
--prune | 경고 대신 stale skill(upstream에서 삭제됨)을 제거 |
--project, -p | 현재 디렉터리의 project 수준 config 사용 |
--global, -g | global config 사용(~/.config/skillshare) |
--json | JSON으로 출력 |
--help, -h | 도움말 표시 |
update agents는 --all, --group, --force, --dry-run, --skip-audit, --audit-threshold / --threshold / -T, --json, 그리고 --project / --global을 지원합니다. --diff, --audit-verbose, --prune은 지원하지 않습니다.
JSON 출력
skillshare update --all --json
{
"updated": 3,
"skipped": 1,
"security_failed": 0,
"pruned": 0,
"dry_run": false,
"duration": "4.567s",
"items": [
{"name": "_team-skills", "type": "repo", "status": "updated"},
{"name": "my-skill", "type": "skill", "status": "updated"},
{"name": "another-skill", "type": "skill", "status": "updated"},
{"name": "local-only", "type": "skill", "status": "skipped"}
]
}
가능한 status 값: updated, skipped, failed, security_blocked. 항목이 실패하면 error 필드가 포함됩니다. 로컬 변경 때문에 건너뛴 원격 skill은 "error": "local changes since install"이 있는 skipped 항목입니다.
배치 업데이트에서 원격 skill이 이미 upstream commit에 있으면 그대로 두고 up_to_date 필드에 집계합니다. 개수가 0이면 이 필드는 생략됩니다.
tracked 저장소가 메타데이터에 선언되어 있지만 디스크에 없는 경우, 각각은 간결한 error(clone directory absent)와 함께 skipped repo 항목으로 보고되며, 집계된 missing_tracked_repos 요약에는 이름과 일회성 재수화(rehydration) 힌트가 포함됩니다:
{
"updated": 0,
"skipped": 1,
"items": [
{"name": "_team-skills", "type": "repo", "status": "skipped", "error": "clone directory absent"}
],
"missing_tracked_repos": {
"names": ["_team-skills"],
"hint": "Run 'skillshare install' to rehydrate tracked repositories"
}
}
누락된 tracked 저장소가 없으면 missing_tracked_repos 필드는 생략됩니다.
Agent JSON 출력
skillshare update agents --all --json
{
"agents": [
{"name": "reviewer", "status": "updated", "source": "github.com/user/agents/reviewer.md"},
{"name": "team/tutor", "status": "up_to_date", "source": "github.com/user/agents/team/tutor.md"}
],
"dry_run": false,
"duration": "1.234s"
}
가능한 agent status 값에는 updated, failed, skipped, up_to_date, update_available, dirty, drifted, local, error가 포함됩니다. error agent는 remote에 연결할 수 없거나 metadata를 읽을 수 없는 등의 이유로 확인하지 못한 agent입니다. 이 경우 명령은 agent를 최신 상태로 보고하지 않고 0이 아닌 종료 코드로 끝납니다.
Agent 업데이트
독립형 .md agent만 업데이트하려면 agents kind selector를 사용하세요:
skillshare update agents reviewer
skillshare update agents --group team
skillshare update agents --all -T high
skillshare update agents --all --json
Agent 업데이트는 skill과 동일한 audit gate를 따릅니다:
- tracked agent 저장소는
git pull을 실행한 후 업데이트된 저장소를 audit합니다 - metadata 기반의 단일 파일 agent는 source에서 재설치하고, staged된
.md를 audit하며, 성공한 경우에만 로컬 파일을 교체합니다
여러 개 업데이트
여러 skill을 한 번에 업데이트:
skillshare update skill-a skill-b skill-c
업데이트 가능한 skill(tracked 저장소 또는 metadata가 있는 skill)만 처리됩니다. 찾을 수 없는 skill은 경고만 표시되고 실패로 이어지지 않습니다. 다만 어떤 skill이든 보안 audit gate에 의해 차단되면 batch 명령은 0이 아닌 코드로 종료됩니다.
Glob 패턴
skill 이름은 batch 작업을 위해 glob 패턴(*, ?, [...])을 지원합니다:
skillshare update "core-*" # core-*와 일치하는 모든 skill 업데이트
skillshare update "_team-?" # 단일 문자 와일드카드
skillshare update "core-*" "util-*" # 여러 패턴
glob 패턴은 각 skill 또는 tracked 저장소의 basename(경로의 마지막 구성 요소)과 일치합니다. 예를 들어 "react-*"는 basename이 react-hooks이기 때문에 frontend/react-hooks와 일치합니다.
glob 매칭은 대소문자를 구분하지 않습니다: "Core-*"는 core-auth, CORE-DB 등과 일치합니다.
셸이 현재 디렉터리의 파일 이름으로 *를 확장하지 않도록 glob 패턴("core-*")은 항상 따옴표로 감싸세요.
그룹 업데이트
그룹 디렉터리 내의 업데이트 가능한 모든 skill을 업데이트:
skillshare update --group frontend # frontend/의 전체 업데이트
skillshare update -G frontend -G backend # 여러 그룹
skillshare update x -G backend # 이름과 그룹 혼합
그룹 내의 local skill(metadata나 .git이 없는)은 알림 없이 건너뜁니다.
그룹 디렉터리와 일치하는(저장소나 skill이 아닌) positional argument는 자동으로 확장됩니다:
skillshare update frontend # --group frontend와 동일
# ℹ 'frontend'는 그룹입니다 — 업데이트 가능한 skill 3개로 확장
--all은 skill 이름이나 --group과 함께 사용할 수 없습니다.
전체 업데이트
한 번에 전체 업데이트:
skillshare update --all
이는 다음을 업데이트합니다:
- 모든 tracked 저장소(git pull)
- source metadata가 있는 모든 skill(upstream이 바뀌었을 때 재설치)
update --all과 update --group은 원격 skill을 저장소별로 묶어 저장소마다 한 번만 clone합니다. upstream에서 폴더가 바뀌지 않은 skill은 그대로 두고 up to date로 집계합니다. 단, 폴더에 symlink가 있는 skill은 예외입니다. 폴더가 바뀌지 않아도 파일이 바뀔 수 있으므로 upstream commit이 바뀔 때마다 다시 설치합니다. 프로젝트 모드(-p)에서 여러 skill을 이름으로 지정해도 같습니다. 모든 skill을 다시 설치하려면 --force를 사용하세요. skill이 하나뿐이거나 글로벌 모드에서 이름으로 지정하면 항상 다시 설치합니다. 설치 후 파일을 변경한 skill은 어떤 경우에도 --force를 추가하기 전까지 건너뜁니다(충돌 처리 참고). 저장소를 가져오지 못하면 해당 skill은 skipped로 집계되고, 저장소와 오류를 알려 주는 경고가 표시됩니다. URL에 포함된 인증 정보는 제거됩니다.
skillshare는 하나의 git checkout을 한 번에 한 프로세스만 업데이트합니다. 같은 tracked 저장소나 git으로 설치한 skill을 다른 update나 대시보드가 이미 업데이트하고 있으면 끝날 때까지 기다립니다. 1분이 지나도 끝나지 않으면 another skillshare process is still updating <path>와 함께 중단합니다.
출력 예시
$ skillshare update --all
✓ Audit 3 skills, no findings
✓ Updated 4, 12 up to date, 1 skipped · 6.2s
Next
skillshare sync link the changes into your targets
누락된 Tracked 저장소
.metadata.json이 tracked 저장소(tracked: true)를 선언했지만 클론 디렉터리가 디스크에 없는 경우 — 클론 디렉터리가 관리되는 .gitignore 블록에 있기 때문에 새 머신에서 흔히 발생합니다 — update --all은 더 이상 이를 조용히 건너뛰지 않습니다. 누락된 각 저장소를 보고하고 재수화 방법을 안내합니다:
! 1 tracked repo declared in metadata but missing on disk
! _team-skills clone directory absent
Run 'skillshare install' to rehydrate tracked repositories
이는 global mode와 project(-p) mode 모두에 적용됩니다. metadata로부터 클론을 다시 생성하려면 인수 없이 install을 실행하세요(Rehydrating After a Fresh Clone 참고).
Stale Skill 정리 (--prune)
upstream 저장소가 skill의 이름을 바꾸거나 제거하면, update는 이를 stale로 감지하고 경고합니다:
Deleted upstream
! frontend/old-skill stale — no longer in the upstream repository
Run with --prune to remove them
stale skill을 자동으로 제거하려면(영구 삭제가 아니라 trash로 이동) --prune을 추가하세요:
skillshare update --all --prune
check도 stale skill을 보고합니다:
skillshare check --all
# ⚠ stale skill 1개(upstream에서 삭제됨) — 제거하려면 'skillshare update --all --prune' 실행
tracked 저장소(_repo)는 --prune의 영향을 받지 않습니다. tracked 저장소가 내부적으로 skill을 제거하면, sync는 PruneOrphanLinks를 통해 orphan symlink를 자동으로 정리합니다.
보안 Audit Gate
Tracked 업데이트를 게시하기 전에 update는 격리된 후보 checkout을 감사합니다. 승인 전에는 기존 checkout과 target 링크가 이전 콘텐츠를 계속 제공합니다:
- **Tracked 저장소(
git pull)**는 비공개 checkout에서 pull과 감사를 실행하고 활성 threshold(audit.block_threshold, 기본값CRITICAL)로 승인한 정확한 commit을 게시합니다. upstream에서 다시 pull하지 않습니다 - **일반 skill(재설치 경로)**은 동일한 threshold 정책을 사용합니다
- 모든 업데이트 유형에서 검토를 위해 risk label/score가 표시됩니다
→ risk: LOW (12/100)
대화형 Mode (TTY, tracked 저장소)
findings가 활성 threshold 이상에서 감지되면 결정하라는 프롬프트가 표시됩니다:
[HIGH] Source repository link detected — may be used for supply-chain redirects (SKILL.md:5)
Security findings at or above active threshold detected.
? Apply anyway? Yes No
- Yes — findings에도 불구하고 업데이트를 수락
- No(기본값) — 후보를 폐기하고 기존 checkout을 유지
비대화형 Mode (CI/CD)
비대화형 환경에서는 차단 대상 findings가 후보를 거부하고 명령은 0이 아닌 코드로 종료됩니다. 스캔 오류도 기존 checkout과 metadata를 변경하지 않으며 --force로 무시할 수 없습니다. 게시는 여러 파일의 원자적 전환이 아닙니다.
# source를 신뢰하는 경우 audit gate를 우회
skillshare update --all --skip-audit
--skip-audit는 보안 스캔을 완전히 비활성화합니다. source를 신뢰하거나 외부 audit 프로세스가 있는 경우에만 사용하세요.
수락된 Findings
--force로 gate를 재정의하거나(또는 프롬프트에서 y로 응답하면), 수락한 findings는 .metadata.json의 audit_accepted 아래에 기록됩니다. 이후 동일한 skill의 업데이트는 정확히 동일한 findings에서 더 이상 차단되지 않으므로, update --all을 실행할 때마다 --force를 반복할 필요가 없습니다. 대시보드 Updates 탭의 Force Retry도 같은 방식으로 기록하며, 어느 쪽에서 수락한 findings든 양쪽 모두에서 적용됩니다.
1 previously accepted finding skipped
finding은 줄 번호가 아니라 rule, 파일, 일치한 텍스트로 매칭되므로 관련 없는 내용이 바뀌어도 수락된 상태로 유지됩니다. 새로운 finding이나 동일한 rule이 다른 텍스트와 일치하는 경우에는 다시 차단됩니다. 이는 공격 문자열을 예시로 정당하게 인용하는 skill(보안 스캐너, red-team 문서)에 적합하면서도, 이후 버전에서 새로운 payload는 계속 탐지합니다.
--audit-threshold, --threshold, 또는 -T로 명령별로 threshold를 재정의할 수 있습니다:
skillshare update _team-skills --threshold high
skillshare update --all -T h
파일 변경 요약 (--diff)
각 업데이트 후 파일 수준 변경 요약을 보려면 --diff를 사용하세요:
skillshare update team-skills --diff
skillshare update --all --diff
tracked 저장소의 경우, diff는 git diff를 사용하며 줄 수준 통계를 포함합니다:
Files changed
~ SKILL.md (+12 -3)
+ scripts/deploy.sh (+45 -0)
- old-helper.sh (+0 -22)
~ utils/format.md (+5 -2)
일반 skill(원격 source에서 설치된 경우)의 경우, diff는 재설치 전후의 파일 해시를 비교합니다:
Files changed
~ SKILL.md
+ new-helper.sh
마커: + 추가됨, - 삭제됨, ~ 수정됨. 최대 20개 파일까지 표시하며, 추가 파일은 "... and N more file(s)"로 요약됩니다.
충돌 처리
tracked 저장소에 커밋되지 않은 변경 사항이 있는 경우:
# 옵션 1: 먼저 변경 사항을 commit
cd ~/.config/skillshare/skills/_team-skills
git add . && git commit -m "My changes"
skillshare update _team-skills
# 옵션 2: 버리고 강제 업데이트
skillshare update _team-skills --force
skillshare가 repo의 git status를 읽을 수 없으면 해당 repo의 업데이트는 failed to check git status로 실패합니다. --force를 사용하면 이 확인을 건너뜁니다.
저장소에서 설치한 skill도 같은 방식으로 보호됩니다. 파일이 설치 시 기록된 파일과 더 이상 일치하지 않으면 update는 해당 skill을 건너뛰고 local changes since install을 보고하며, skillshare check는 이를 modified로 나열하고, skillshare check <name> --diff는 변경한 내용을 보여줍니다. 변경 사항을 보존하려면 다른 곳에 복사해 둔 뒤 버리세요.
skillshare update my-skill --force
대시보드의 Updates 탭에서는 해당 skill이 Modified locally로 표시되고, 변경 사항을 skill 페이지에서 열어 보는 View changes 버튼이 나타납니다. 업데이트하기 전에 Force overwrite local edits를 선택하거나, 건너뛴 행의 Force Retry를 사용하세요. skill 자체 페이지에서 업데이트하면 변경 사항을 보여 주고 버리기 전에 확인을 요청합니다. update <name> --dry-run은 이 skill을 건너뛸 대상으로 보고합니다. upstream에서도 삭제된 modified skill은 --prune을 사용해도 --force를 추가하기 전까지 유지됩니다.
업데이트 후
모든 target에 변경 사항을 배포하려면 skillshare sync를 실행하세요:
skillshare update --all --diff # 파일 수준 변경 요약과 함께 업데이트
skillshare sync
Project Mode
프로젝트에서 skill과 tracked 저장소 업데이트:
skillshare update pdf -p # 단일 skill 업데이트(재설치)
skillshare update a b c -p # 여러 skill 업데이트
skillshare update --group frontend -p # 그룹의 전체 업데이트
skillshare update team-skills -p # tracked 저장소 업데이트(git pull)
skillshare update --all -p # 전체 업데이트
skillshare update --all -p --dry-run # 미리보기
skillshare update --all -p --diff # 파일 변경 요약과 함께 업데이트
skillshare update --all -p --skip-audit # 보안 audit gate 건너뛰기
동작 방식
| Type | Method | 감지 방법 |
|---|---|---|
Tracked repo(_repo) | git pull | _로 시작하고 .git/ 디렉터리가 있는 폴더 |
| Remote skill(metadata 포함) | upstream이 바뀌었을 때 source에서 재설치 | .metadata.json에 등록됨 |
| 로컬 경로 설치 | 기록된 경로에서 다시 복사 | .metadata.json에 type: local로 등록됨 |
| Local skill | 건너뜀 | .metadata.json에 등록되지 않음 |
_ 접두사는 경로의 마지막 구간에서도 선택 사항입니다 — skillshare update team-skills -p는 _team-skills를 자동으로 감지하고, skillshare update devops/team-skills -p는 --into devops로 설치한 devops/_team-skills를 찾습니다.
Lockfile
update -p는 고정된 커밋을 앞으로 이동시키는 방법입니다. 새 커밋으로 이동한 각 skill 또는 tracked repo는 .skillshare/skills.lock.json의 항목이 다시 쓰이며, 변경되지 않은 skill은 고정을 그대로 유지합니다. 팀원이 다음 skillshare install -p에서 동일한 커밋을 받을 수 있도록 lockfile을 커밋하세요. Lockfile을 참고하세요.
충돌 처리
커밋되지 않은 변경 사항이 있는 tracked 저장소는 기본적으로 차단됩니다:
# 옵션 1: 먼저 변경 사항 commit
cd .skillshare/skills/_team-skills
git add . && git commit -m "My changes"
skillshare update team-skills -p
# 옵션 2: 버리고 강제 업데이트
skillshare update team-skills -p --force
skillshare가 repo의 git status를 읽을 수 없으면 해당 repo의 업데이트는 failed to check git status로 실패합니다. --force를 사용하면 이 확인을 건너뜁니다.
일반적인 워크플로
skillshare update --all -p
skillshare sync
git add .skillshare/ && git commit -m "Update remote skills"
참고
- install — skill 설치
- upgrade — CLI 및 built-in skill 업그레이드
- sync — target으로 sync
- Project Skills — Project mode 개념