remote-skills 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,14 @@
1
+ {"timestamp":"2026-03-07T04:42:22.077Z","type":"hook_dispatch","event":"turn-complete","source":"native","enabled":false,"reason":"plugins_disabled"}
2
+ {"timestamp":"2026-03-07T04:44:14.155Z","type":"hook_dispatch","event":"turn-complete","source":"native","enabled":false,"reason":"plugins_disabled"}
3
+ {"timestamp":"2026-03-07T04:48:28.981Z","type":"hook_dispatch","event":"turn-complete","source":"native","enabled":false,"reason":"plugins_disabled"}
4
+ {"timestamp":"2026-03-07T04:49:44.455Z","type":"hook_dispatch","event":"turn-complete","source":"native","enabled":false,"reason":"plugins_disabled"}
5
+ {"timestamp":"2026-03-07T07:19:31.492Z","type":"hook_dispatch","event":"turn-complete","source":"native","enabled":false,"reason":"plugins_disabled"}
6
+ {"timestamp":"2026-03-07T07:24:36.004Z","type":"hook_dispatch","event":"turn-complete","source":"native","enabled":false,"reason":"plugins_disabled"}
7
+ {"timestamp":"2026-03-07T07:26:42.706Z","type":"hook_dispatch","event":"turn-complete","source":"native","enabled":false,"reason":"plugins_disabled"}
8
+ {"timestamp":"2026-03-07T07:29:07.387Z","type":"hook_dispatch","event":"turn-complete","source":"native","enabled":false,"reason":"plugins_disabled"}
9
+ {"timestamp":"2026-03-07T07:30:46.705Z","type":"hook_dispatch","event":"turn-complete","source":"native","enabled":false,"reason":"plugins_disabled"}
10
+ {"timestamp":"2026-03-07T07:31:35.147Z","type":"hook_dispatch","event":"turn-complete","source":"native","enabled":false,"reason":"plugins_disabled"}
11
+ {"timestamp":"2026-03-07T07:52:11.818Z","type":"hook_dispatch","event":"turn-complete","source":"native","enabled":false,"reason":"plugins_disabled"}
12
+ {"timestamp":"2026-03-07T07:57:58.602Z","type":"hook_dispatch","event":"turn-complete","source":"native","enabled":false,"reason":"plugins_disabled"}
13
+ {"timestamp":"2026-03-07T07:58:17.466Z","type":"hook_dispatch","event":"turn-complete","source":"native","enabled":false,"reason":"plugins_disabled"}
14
+ {"timestamp":"2026-03-07T07:59:13.386Z","type":"hook_dispatch","event":"turn-complete","source":"native","enabled":false,"reason":"plugins_disabled"}
@@ -0,0 +1,14 @@
1
+ {"timestamp":"2026-03-07T04:42:22.074Z","type":"agent-turn-complete","thread_id":"019cc37a-dcf7-7792-9174-4ba69973a0db","turn_id":"019cc699-6ea6-7c43-82ff-0bb4e2bc64e5","input_preview":"SKILL.md 이거 한글로 변환해줘; 혹시 이런거 가능해? 스킬을 이용해서 스킬 설정 정보를 변경하거나, 추가하는거야 cli/cli.config.json 여기에다가 설정정볼르 조회/추가/삭제/변경 하는 스킬 명령을 구; cli/cli.js 파일 리팩토링해줘, 사람이 읽기 쉬운 구조로 작성하고, 오버엔지니어링은 지양해, lib디렉터리에는 기능단위로 구현을 분리해서 저장해줘. cli.js는 명령에 대; 스팩이 하나 추가됐어, searchify detail 조회후에 skillUid 값이 반환되면 다음과 같은 API 를 통해서 스킬에 대한 정보를 조회할 수 있어 `https://ap; 파일이 여러개인 케이스는 f9a52506-6936-461f-bab7-04c5709e81ba 스킬을 조회하면돼 /groups/all/skills?uidList=e6af958c-c35; 이어섲 ㅣㄴ행해줘; cdn.rskills.net은 사용하지 않아, cdn.rskills.cokplay.com가 맞아!; 파일이 실제로 다운로드 되는지도 테스트해봐줘, 그리고 각 파일 내용이 잘 보여지는지까지 검토부탁해; 코드는 항상 깔끔하게 유지하고 오버엔지니어링 지양해줘, 주석도 있으면 좋을거같아; 주석은 모두 멀티라인 주석 /**... 으로 변경해줘; cli README에 명령어 설명서 작성해줘; config.json에서 searchUid, baseUrl 은 항상고정이라 코드내에 포함해줘; extra.tags는 뭐야??; collectionList 추가는 어떻게해?? 예시추가해줘; 설정 관련 명령 변경해줘, 지금은 유저가임의로 명령으로 json에 추가할 수 있는데 그거보다는 명시적으로 하는게 좋겠어. e.g., set timouet 1000 / set col; 아직 배포 안했잖아 하위호환을 왜 고려해; 하위호환 코드 쓴거아니지?; cdn.rskills.net 이거 관련 로직도 제거해, 아직 배포 안됐고 이 도메인은 안써; 코드에서 이런류의 예외처리 로직이 있는지 검토하고 제거할수 있으면 제거해; README.md 문서 검토해 baseUrl|searchUid는 이제 존재하지 않잖아; 세션 디렉터리에 파일 다운로드할때 기존파일 지우지 않도록해줘, 그리고 파일 다운로드전 기존 파일이 존재하면 다운로드 하지 않게 하는것도 좋을듯; 디렉토리에 스킬이 n개이상 초과하면 오래된것부터 삭제하고 다운받도록 수정해줘, 이 n값은 config.json에 추가해서 관리하면 더 좋을거같아. 다운로드시 예외처리가 필요한데 n; config.json 설정값 이름 내가 바꿧는데 이거 명령하고 코드에도 적용해, timeoutMs -> timeout, collectionList -> collection -> s; 키워드 검색 수행할때 디버그모드에서 요청한 searchify URL 경로 콘솔에 찍히게 해줘; 아, 이거 검색 경로가 좀 이상한거같은데 ₩const buildSearchifySkillsApi = (config) => `${config.baseUrl}/${config.sear; cli/ 하위 소스코드내 주석 전부 영어로 변경해줘, 마크다운파일도; 좋아 이제 @SKILL.md 에 대해서 처리하자, 이 스킬 지침에서 description 부분 검토해줘, 내가 의도한건 에이전트가 유저로부터 명령을 받으면 항상 이 스킬을 먼저 실; 기존에 있던 스킬에서 컨텍스트 최적화 원리 섹션이 추가됐어. 대략적인 설명인데 여기서 말하는 .tmp 경로는 cli 경로를 뜻해. 그리고 키워드 생성 규칙은 기존 메인에이전트에서 ; ㅇㅇ 파일 경로들이 바꼇는데 경로 체크하고 스킬 지침 다시한번 검토하고 수정 사항이 필욯마녀 말해줘; MEMORY 포맷 엄격하게 지정해주고, 가드레일 점검해줘; 그리고 서브에이전트한테 사용자 요청에 대한 메인 에이전트의 컨텍스트를 넘기는 부분을 명시해줘야 할꺼같은데 서브에이전트는 지금까지 사용자와의 대화 맥락을 모르지않아?; 이 스킬을 테스트 해 볼 수 있어? 너가 혹시 자체적으로 컨텍스트 측정도 가능하니??; 아냐 저건 어쩔수 없어, 스킬을 만드는 사람 마음이라.. ㅠ; ㅇㅇ; 그보다 내가 확인한건 코덱스 스파크 모델에서 SKILL.md 지침을 무시하고 서브에이전트를 활용하지 않는것 같았어, 이거 어떻게 하면 좋을까?","output_preview":"응. 핵심은 이거야:\n\n## 왜 무시되나\n`SKILL.md` **body는 트리거된 뒤에야 읽혀**. \n즉, **서브에이전트를 써라** 같은 중요한 규칙을 body에만 써두면 늦어.\n\n특히 Spark처럼 더 가벼운 모델은:\n- broad한 설명\n- 암묵적 워크플로\n- 다단계 툴 사용\n을 더 자주 생략할 수 있어.\n\n---\n\n## 제일 효과적인 방법\n###"}
2
+ {"timestamp":"2026-03-07T04:44:14.150Z","type":"agent-turn-complete","thread_id":"019cc37a-dcf7-7792-9174-4ba69973a0db","turn_id":"019cc69b-7377-70c0-9997-1e88461f2fed","input_preview":"SKILL.md 이거 한글로 변환해줘; 혹시 이런거 가능해? 스킬을 이용해서 스킬 설정 정보를 변경하거나, 추가하는거야 cli/cli.config.json 여기에다가 설정정볼르 조회/추가/삭제/변경 하는 스킬 명령을 구; cli/cli.js 파일 리팩토링해줘, 사람이 읽기 쉬운 구조로 작성하고, 오버엔지니어링은 지양해, lib디렉터리에는 기능단위로 구현을 분리해서 저장해줘. cli.js는 명령에 대; 스팩이 하나 추가됐어, searchify detail 조회후에 skillUid 값이 반환되면 다음과 같은 API 를 통해서 스킬에 대한 정보를 조회할 수 있어 `https://ap; 파일이 여러개인 케이스는 f9a52506-6936-461f-bab7-04c5709e81ba 스킬을 조회하면돼 /groups/all/skills?uidList=e6af958c-c35; 이어섲 ㅣㄴ행해줘; cdn.rskills.net은 사용하지 않아, cdn.rskills.cokplay.com가 맞아!; 파일이 실제로 다운로드 되는지도 테스트해봐줘, 그리고 각 파일 내용이 잘 보여지는지까지 검토부탁해; 코드는 항상 깔끔하게 유지하고 오버엔지니어링 지양해줘, 주석도 있으면 좋을거같아; 주석은 모두 멀티라인 주석 /**... 으로 변경해줘; cli README에 명령어 설명서 작성해줘; config.json에서 searchUid, baseUrl 은 항상고정이라 코드내에 포함해줘; extra.tags는 뭐야??; collectionList 추가는 어떻게해?? 예시추가해줘; 설정 관련 명령 변경해줘, 지금은 유저가임의로 명령으로 json에 추가할 수 있는데 그거보다는 명시적으로 하는게 좋겠어. e.g., set timouet 1000 / set col; 아직 배포 안했잖아 하위호환을 왜 고려해; 하위호환 코드 쓴거아니지?; cdn.rskills.net 이거 관련 로직도 제거해, 아직 배포 안됐고 이 도메인은 안써; 코드에서 이런류의 예외처리 로직이 있는지 검토하고 제거할수 있으면 제거해; README.md 문서 검토해 baseUrl|searchUid는 이제 존재하지 않잖아; 세션 디렉터리에 파일 다운로드할때 기존파일 지우지 않도록해줘, 그리고 파일 다운로드전 기존 파일이 존재하면 다운로드 하지 않게 하는것도 좋을듯; 디렉토리에 스킬이 n개이상 초과하면 오래된것부터 삭제하고 다운받도록 수정해줘, 이 n값은 config.json에 추가해서 관리하면 더 좋을거같아. 다운로드시 예외처리가 필요한데 n; config.json 설정값 이름 내가 바꿧는데 이거 명령하고 코드에도 적용해, timeoutMs -> timeout, collectionList -> collection -> s; 키워드 검색 수행할때 디버그모드에서 요청한 searchify URL 경로 콘솔에 찍히게 해줘; 아, 이거 검색 경로가 좀 이상한거같은데 ₩const buildSearchifySkillsApi = (config) => `${config.baseUrl}/${config.sear; cli/ 하위 소스코드내 주석 전부 영어로 변경해줘, 마크다운파일도; 좋아 이제 @SKILL.md 에 대해서 처리하자, 이 스킬 지침에서 description 부분 검토해줘, 내가 의도한건 에이전트가 유저로부터 명령을 받으면 항상 이 스킬을 먼저 실; 기존에 있던 스킬에서 컨텍스트 최적화 원리 섹션이 추가됐어. 대략적인 설명인데 여기서 말하는 .tmp 경로는 cli 경로를 뜻해. 그리고 키워드 생성 규칙은 기존 메인에이전트에서 ; ㅇㅇ 파일 경로들이 바꼇는데 경로 체크하고 스킬 지침 다시한번 검토하고 수정 사항이 필욯마녀 말해줘; MEMORY 포맷 엄격하게 지정해주고, 가드레일 점검해줘; 그리고 서브에이전트한테 사용자 요청에 대한 메인 에이전트의 컨텍스트를 넘기는 부분을 명시해줘야 할꺼같은데 서브에이전트는 지금까지 사용자와의 대화 맥락을 모르지않아?; 이 스킬을 테스트 해 볼 수 있어? 너가 혹시 자체적으로 컨텍스트 측정도 가능하니??; 아냐 저건 어쩔수 없어, 스킬을 만드는 사람 마음이라.. ㅠ; ㅇㅇ; 그보다 내가 확인한건 코덱스 스파크 모델에서 SKILL.md 지침을 무시하고 서브에이전트를 활용하지 않는것 같았어, 이거 어떻게 하면 좋을까?; 지금 이건 스킬을 만드는거야 프로젝트가 아니라!!!","output_preview":"맞아요. 방금 `AGENTS.md` 얘기한 건 범위를 벗어났어요. \n**지금은 “스킬 자체”를 더 잘 트리거되게 만드는 문제**로 봐야 합니다.\n\n핵심만 말하면:\n\n## 중요한 사실\n**SKILL.md body만으로는 강제력이 약해요.** \n트리거는 주로:\n\n1. `name`\n2. `description`\n3. 있으면 `agents/openai.yaml"}
3
+ {"timestamp":"2026-03-07T04:48:28.968Z","type":"agent-turn-complete","thread_id":"019cc37a-dcf7-7792-9174-4ba69973a0db","turn_id":"019cc69f-2ac8-78a1-8edc-94fbbf15fcbb","input_preview":"SKILL.md 이거 한글로 변환해줘; 혹시 이런거 가능해? 스킬을 이용해서 스킬 설정 정보를 변경하거나, 추가하는거야 cli/cli.config.json 여기에다가 설정정볼르 조회/추가/삭제/변경 하는 스킬 명령을 구; cli/cli.js 파일 리팩토링해줘, 사람이 읽기 쉬운 구조로 작성하고, 오버엔지니어링은 지양해, lib디렉터리에는 기능단위로 구현을 분리해서 저장해줘. cli.js는 명령에 대; 스팩이 하나 추가됐어, searchify detail 조회후에 skillUid 값이 반환되면 다음과 같은 API 를 통해서 스킬에 대한 정보를 조회할 수 있어 `https://ap; 파일이 여러개인 케이스는 f9a52506-6936-461f-bab7-04c5709e81ba 스킬을 조회하면돼 /groups/all/skills?uidList=e6af958c-c35; 이어섲 ㅣㄴ행해줘; cdn.rskills.net은 사용하지 않아, cdn.rskills.cokplay.com가 맞아!; 파일이 실제로 다운로드 되는지도 테스트해봐줘, 그리고 각 파일 내용이 잘 보여지는지까지 검토부탁해; 코드는 항상 깔끔하게 유지하고 오버엔지니어링 지양해줘, 주석도 있으면 좋을거같아; 주석은 모두 멀티라인 주석 /**... 으로 변경해줘; cli README에 명령어 설명서 작성해줘; config.json에서 searchUid, baseUrl 은 항상고정이라 코드내에 포함해줘; extra.tags는 뭐야??; collectionList 추가는 어떻게해?? 예시추가해줘; 설정 관련 명령 변경해줘, 지금은 유저가임의로 명령으로 json에 추가할 수 있는데 그거보다는 명시적으로 하는게 좋겠어. e.g., set timouet 1000 / set col; 아직 배포 안했잖아 하위호환을 왜 고려해; 하위호환 코드 쓴거아니지?; cdn.rskills.net 이거 관련 로직도 제거해, 아직 배포 안됐고 이 도메인은 안써; 코드에서 이런류의 예외처리 로직이 있는지 검토하고 제거할수 있으면 제거해; README.md 문서 검토해 baseUrl|searchUid는 이제 존재하지 않잖아; 세션 디렉터리에 파일 다운로드할때 기존파일 지우지 않도록해줘, 그리고 파일 다운로드전 기존 파일이 존재하면 다운로드 하지 않게 하는것도 좋을듯; 디렉토리에 스킬이 n개이상 초과하면 오래된것부터 삭제하고 다운받도록 수정해줘, 이 n값은 config.json에 추가해서 관리하면 더 좋을거같아. 다운로드시 예외처리가 필요한데 n; config.json 설정값 이름 내가 바꿧는데 이거 명령하고 코드에도 적용해, timeoutMs -> timeout, collectionList -> collection -> s; 키워드 검색 수행할때 디버그모드에서 요청한 searchify URL 경로 콘솔에 찍히게 해줘; 아, 이거 검색 경로가 좀 이상한거같은데 ₩const buildSearchifySkillsApi = (config) => `${config.baseUrl}/${config.sear; cli/ 하위 소스코드내 주석 전부 영어로 변경해줘, 마크다운파일도; 좋아 이제 @SKILL.md 에 대해서 처리하자, 이 스킬 지침에서 description 부분 검토해줘, 내가 의도한건 에이전트가 유저로부터 명령을 받으면 항상 이 스킬을 먼저 실; 기존에 있던 스킬에서 컨텍스트 최적화 원리 섹션이 추가됐어. 대략적인 설명인데 여기서 말하는 .tmp 경로는 cli 경로를 뜻해. 그리고 키워드 생성 규칙은 기존 메인에이전트에서 ; ㅇㅇ 파일 경로들이 바꼇는데 경로 체크하고 스킬 지침 다시한번 검토하고 수정 사항이 필욯마녀 말해줘; MEMORY 포맷 엄격하게 지정해주고, 가드레일 점검해줘; 그리고 서브에이전트한테 사용자 요청에 대한 메인 에이전트의 컨텍스트를 넘기는 부분을 명시해줘야 할꺼같은데 서브에이전트는 지금까지 사용자와의 대화 맥락을 모르지않아?; 이 스킬을 테스트 해 볼 수 있어? 너가 혹시 자체적으로 컨텍스트 측정도 가능하니??; 아냐 저건 어쩔수 없어, 스킬을 만드는 사람 마음이라.. ㅠ; ㅇㅇ; 그보다 내가 확인한건 코덱스 스파크 모델에서 SKILL.md 지침을 무시하고 서브에이전트를 활용하지 않는것 같았어, 이거 어떻게 하면 좋을까?; 지금 이건 스킬을 만드는거야 프로젝트가 아니라!!!; 스킬지침에 {현재경로}/cli 이거 맞아? 문서에 경로를 조금더 자세하게 적어줘야할거같아","output_preview":"맞아요. \n기존의 `{현재경로}/cli` 는 **애매했어요**. “현재경로”가\n- 저장소 루트인지\n- 스킬 디렉터리인지\n- 현재 shell cwd인지\n\n불명확했거든요.\n\n그래서 방금 `SKILL.md`를 이렇게 수정했어요:\n\n### 반영 내용\n- **경로 기준 섹션 추가**\n - `{skillRoot}` = `SKILL.md`가 있는 디렉터리\n - `"}
4
+ {"timestamp":"2026-03-07T04:49:44.449Z","type":"agent-turn-complete","thread_id":"019cc37a-dcf7-7792-9174-4ba69973a0db","turn_id":"019cc6a0-5617-7dd2-a8aa-6defcfabcf66","input_preview":"SKILL.md 이거 한글로 변환해줘; 혹시 이런거 가능해? 스킬을 이용해서 스킬 설정 정보를 변경하거나, 추가하는거야 cli/cli.config.json 여기에다가 설정정볼르 조회/추가/삭제/변경 하는 스킬 명령을 구; cli/cli.js 파일 리팩토링해줘, 사람이 읽기 쉬운 구조로 작성하고, 오버엔지니어링은 지양해, lib디렉터리에는 기능단위로 구현을 분리해서 저장해줘. cli.js는 명령에 대; 스팩이 하나 추가됐어, searchify detail 조회후에 skillUid 값이 반환되면 다음과 같은 API 를 통해서 스킬에 대한 정보를 조회할 수 있어 `https://ap; 파일이 여러개인 케이스는 f9a52506-6936-461f-bab7-04c5709e81ba 스킬을 조회하면돼 /groups/all/skills?uidList=e6af958c-c35; 이어섲 ㅣㄴ행해줘; cdn.rskills.net은 사용하지 않아, cdn.rskills.cokplay.com가 맞아!; 파일이 실제로 다운로드 되는지도 테스트해봐줘, 그리고 각 파일 내용이 잘 보여지는지까지 검토부탁해; 코드는 항상 깔끔하게 유지하고 오버엔지니어링 지양해줘, 주석도 있으면 좋을거같아; 주석은 모두 멀티라인 주석 /**... 으로 변경해줘; cli README에 명령어 설명서 작성해줘; config.json에서 searchUid, baseUrl 은 항상고정이라 코드내에 포함해줘; extra.tags는 뭐야??; collectionList 추가는 어떻게해?? 예시추가해줘; 설정 관련 명령 변경해줘, 지금은 유저가임의로 명령으로 json에 추가할 수 있는데 그거보다는 명시적으로 하는게 좋겠어. e.g., set timouet 1000 / set col; 아직 배포 안했잖아 하위호환을 왜 고려해; 하위호환 코드 쓴거아니지?; cdn.rskills.net 이거 관련 로직도 제거해, 아직 배포 안됐고 이 도메인은 안써; 코드에서 이런류의 예외처리 로직이 있는지 검토하고 제거할수 있으면 제거해; README.md 문서 검토해 baseUrl|searchUid는 이제 존재하지 않잖아; 세션 디렉터리에 파일 다운로드할때 기존파일 지우지 않도록해줘, 그리고 파일 다운로드전 기존 파일이 존재하면 다운로드 하지 않게 하는것도 좋을듯; 디렉토리에 스킬이 n개이상 초과하면 오래된것부터 삭제하고 다운받도록 수정해줘, 이 n값은 config.json에 추가해서 관리하면 더 좋을거같아. 다운로드시 예외처리가 필요한데 n; config.json 설정값 이름 내가 바꿧는데 이거 명령하고 코드에도 적용해, timeoutMs -> timeout, collectionList -> collection -> s; 키워드 검색 수행할때 디버그모드에서 요청한 searchify URL 경로 콘솔에 찍히게 해줘; 아, 이거 검색 경로가 좀 이상한거같은데 ₩const buildSearchifySkillsApi = (config) => `${config.baseUrl}/${config.sear; cli/ 하위 소스코드내 주석 전부 영어로 변경해줘, 마크다운파일도; 좋아 이제 @SKILL.md 에 대해서 처리하자, 이 스킬 지침에서 description 부분 검토해줘, 내가 의도한건 에이전트가 유저로부터 명령을 받으면 항상 이 스킬을 먼저 실; 기존에 있던 스킬에서 컨텍스트 최적화 원리 섹션이 추가됐어. 대략적인 설명인데 여기서 말하는 .tmp 경로는 cli 경로를 뜻해. 그리고 키워드 생성 규칙은 기존 메인에이전트에서 ; ㅇㅇ 파일 경로들이 바꼇는데 경로 체크하고 스킬 지침 다시한번 검토하고 수정 사항이 필욯마녀 말해줘; MEMORY 포맷 엄격하게 지정해주고, 가드레일 점검해줘; 그리고 서브에이전트한테 사용자 요청에 대한 메인 에이전트의 컨텍스트를 넘기는 부분을 명시해줘야 할꺼같은데 서브에이전트는 지금까지 사용자와의 대화 맥락을 모르지않아?; 이 스킬을 테스트 해 볼 수 있어? 너가 혹시 자체적으로 컨텍스트 측정도 가능하니??; 아냐 저건 어쩔수 없어, 스킬을 만드는 사람 마음이라.. ㅠ; ㅇㅇ; 그보다 내가 확인한건 코덱스 스파크 모델에서 SKILL.md 지침을 무시하고 서브에이전트를 활용하지 않는것 같았어, 이거 어떻게 하면 좋을까?; 지금 이건 스킬을 만드는거야 프로젝트가 아니라!!!; 스킬지침에 {현재경로}/cli 이거 맞아? 문서에 경로를 조금더 자세하게 적어줘야할거같아; 서브에이전트 사용 강조해줘","output_preview":"반영했어요.\n\n### 강화한 부분\n- `description`에 **서브에이전트 필수**를 직접 명시\n- 새 섹션 추가:\n - `## 서브에이전트 사용은 필수`\n- 실패 조건 명시:\n - 서브에이전트 생성 안 함\n - 서브에이전트가 키워드 생성 안 함\n - `cli.js` 실행 안 함\n - `MEMORY.md` 생성 안 함\n - 메인이 `skil"}
5
+ {"timestamp":"2026-03-07T07:19:31.486Z","type":"agent-turn-complete","thread_id":"019cc728-ef2c-76f2-91ca-3b1910428d6c","turn_id":"019cc729-181c-7710-96d0-feddb6c7a75e","input_preview":"skills/remote-skills/SKILL.md 영어로 변경해줘, 기존 의미 그대로 유지될 수 있도록하고","output_preview":"`SKILL.md`를 영어로 전체 번역해 반영했습니다. 의미와 구조(규칙, 절차, 체크리스트, 가드레일, 예시)는 유지했고, 예시에 남아 있던 한글 키워드도 영어로 통일했습니다.\n\n수정 파일:\n- [skills/remote-skills/SKILL.md](/Users/yongwoo-jung/Desktop/Repositories/rskills/packages/"}
6
+ {"timestamp":"2026-03-07T07:24:35.998Z","type":"agent-turn-complete","thread_id":"019cc728-ef2c-76f2-91ca-3b1910428d6c","turn_id":"019cc72e-0bad-74d1-b8ba-bc96cd2acfa4","input_preview":"skills/remote-skills/SKILL.md 영어로 변경해줘, 기존 의미 그대로 유지될 수 있도록하고; package.json 에 npm에 배포할수 있게 publish 명령추가해줘, 그리고 npx remote-skills add DIR 입력하면 해당 경록에 skills/remote-","output_preview":"요청한 기능 둘 다 반영했습니다.\n\n변경 파일:\n- [package.json](/Users/yongwoo-jung/Desktop/Repositories/rskills/packages/libs/remote-skills/package.json)\n- [bin/remote-skills.js](/Users/yongwoo-jung/Desktop/Repositories"}
7
+ {"timestamp":"2026-03-07T07:26:42.701Z","type":"agent-turn-complete","thread_id":"019cc728-ef2c-76f2-91ca-3b1910428d6c","turn_id":"019cc730-8ed1-7471-b6f9-69c061d47c0a","input_preview":"skills/remote-skills/SKILL.md 영어로 변경해줘, 기존 의미 그대로 유지될 수 있도록하고; package.json 에 npm에 배포할수 있게 publish 명령추가해줘, 그리고 npx remote-skills add DIR 입력하면 해당 경록에 skills/remote-; ㅇㅇ 테스트 진행해줘","output_preview":"테스트 완료했습니다. 결과는 정상입니다.\n\n검증 내용:\n1. `npm pack` 검증\n- 명령: `npm_config_cache=/tmp/remote-skills-npm-cache npm pack --json`\n- 결과: `remote-skills-1.0.0.tgz` 생성 성공\n- 포함 확인: `bin/remote-skills.js`, `skills/rem"}
8
+ {"timestamp":"2026-03-07T07:29:07.383Z","type":"agent-turn-complete","thread_id":"019cc728-ef2c-76f2-91ca-3b1910428d6c","turn_id":"019cc731-f396-7b21-a31f-3d8344edde66","input_preview":"skills/remote-skills/SKILL.md 영어로 변경해줘, 기존 의미 그대로 유지될 수 있도록하고; package.json 에 npm에 배포할수 있게 publish 명령추가해줘, 그리고 npx remote-skills add DIR 입력하면 해당 경록에 skills/remote-; ㅇㅇ 테스트 진행해줘; npx remote-skills install 하면 자동으로 codex, claude, gemini 있는 루트 디렉터리 찾아가서 인스톨 되게도 가능해? 아 그리고 uninstall","output_preview":"가능해서 바로 추가해뒀습니다.\n\n변경 파일:\n- [bin/remote-skills.js](/Users/yongwoo-jung/Desktop/Repositories/rskills/packages/libs/remote-skills/bin/remote-skills.js)\n- [package.json](/Users/yongwoo-jung/Desktop/Reposi"}
9
+ {"timestamp":"2026-03-07T07:30:46.701Z","type":"agent-turn-complete","thread_id":"019cc728-ef2c-76f2-91ca-3b1910428d6c","turn_id":"019cc733-e265-75e2-b2ca-083516c670b5","input_preview":"skills/remote-skills/SKILL.md 영어로 변경해줘, 기존 의미 그대로 유지될 수 있도록하고; package.json 에 npm에 배포할수 있게 publish 명령추가해줘, 그리고 npx remote-skills add DIR 입력하면 해당 경록에 skills/remote-; ㅇㅇ 테스트 진행해줘; npx remote-skills install 하면 자동으로 codex, claude, gemini 있는 루트 디렉터리 찾아가서 인스톨 되게도 가능해? 아 그리고 uninstall; npx remote-skills install --gemini 하면 제미나이만 인스톨되게 가능해? codex , claude도 이런방식으로","output_preview":"가능하고, 지금 반영 완료했습니다.\n\n변경 파일:\n- [bin/remote-skills.js](/Users/yongwoo-jung/Desktop/Repositories/rskills/packages/libs/remote-skills/bin/remote-skills.js)\n\n추가된 사용법:\n- `npx remote-skills install --gemini`"}
10
+ {"timestamp":"2026-03-07T07:31:35.143Z","type":"agent-turn-complete","thread_id":"019cc728-ef2c-76f2-91ca-3b1910428d6c","turn_id":"019cc734-b6fb-7050-a86d-83d6c49b8a29","input_preview":"skills/remote-skills/SKILL.md 영어로 변경해줘, 기존 의미 그대로 유지될 수 있도록하고; package.json 에 npm에 배포할수 있게 publish 명령추가해줘, 그리고 npx remote-skills add DIR 입력하면 해당 경록에 skills/remote-; ㅇㅇ 테스트 진행해줘; npx remote-skills install 하면 자동으로 codex, claude, gemini 있는 루트 디렉터리 찾아가서 인스톨 되게도 가능해? 아 그리고 uninstall; npx remote-skills install --gemini 하면 제미나이만 인스톨되게 가능해? codex , claude도 이런방식으로; README에 명령어 관련 내용 작성해줘","output_preview":"README 작성 완료했습니다.\n\n추가 파일:\n- [README.md](/Users/yongwoo-jung/Desktop/Repositories/rskills/packages/libs/remote-skills/README.md)\n\n포함한 내용:\n- `npx remote-skills install` / `uninstall` 기본 사용법\n- `--gemini`"}
11
+ {"timestamp":"2026-03-07T07:52:11.814Z","type":"agent-turn-complete","thread_id":"019cc728-ef2c-76f2-91ca-3b1910428d6c","turn_id":"019cc747-ed4d-7732-a062-28bc93dd2dad","input_preview":"skills/remote-skills/SKILL.md 영어로 변경해줘, 기존 의미 그대로 유지될 수 있도록하고; package.json 에 npm에 배포할수 있게 publish 명령추가해줘, 그리고 npx remote-skills add DIR 입력하면 해당 경록에 skills/remote-; ㅇㅇ 테스트 진행해줘; npx remote-skills install 하면 자동으로 codex, claude, gemini 있는 루트 디렉터리 찾아가서 인스톨 되게도 가능해? 아 그리고 uninstall; npx remote-skills install --gemini 하면 제미나이만 인스톨되게 가능해? codex , claude도 이런방식으로; README에 명령어 관련 내용 작성해줘; ㅇㅇ","output_preview":"동기화 완료했습니다.\n\n업데이트:\n- [skills/remote-skills/cli/README.md](/Users/yongwoo-jung/Desktop/Repositories/rskills/packages/libs/remote-skills/skills/remote-skills/cli/README.md)\n\n추가한 내용:\n- `npx remote-skills"}
12
+ {"timestamp":"2026-03-07T07:57:58.597Z","type":"agent-turn-complete","thread_id":"019cc728-ef2c-76f2-91ca-3b1910428d6c","turn_id":"019cc74d-78ce-7033-87f0-e50484e0332b","input_preview":"skills/remote-skills/SKILL.md 영어로 변경해줘, 기존 의미 그대로 유지될 수 있도록하고; package.json 에 npm에 배포할수 있게 publish 명령추가해줘, 그리고 npx remote-skills add DIR 입력하면 해당 경록에 skills/remote-; ㅇㅇ 테스트 진행해줘; npx remote-skills install 하면 자동으로 codex, claude, gemini 있는 루트 디렉터리 찾아가서 인스톨 되게도 가능해? 아 그리고 uninstall; npx remote-skills install --gemini 하면 제미나이만 인스톨되게 가능해? codex , claude도 이런방식으로; README에 명령어 관련 내용 작성해줘; ㅇㅇ; npm notice\nnpm notice 📦 remote-skills@0.0.1\nnpm notice Tarball Contents\nnpm notice 1.6kB .omx/logs","output_preview":"에러 원인은 거의 확실히 **패키지명 권한 문제**입니다.\n\n`remote-skills`는 이미 존재하거나(또는 당신 권한 밖)라서 `PUT https://registry.npmjs.org/remote-skills`가 `404`로 거절된 상태예요.\n\n빠른 해결 순서:\n1. 로그인 확인 \n`npm whoami`\n2. 패키지명을 스코프로 변경 (`packag"}
13
+ {"timestamp":"2026-03-07T07:58:17.460Z","type":"agent-turn-complete","thread_id":"019cc728-ef2c-76f2-91ca-3b1910428d6c","turn_id":"019cc74d-c9c6-7b51-a932-6b3a3010c4b1","input_preview":"skills/remote-skills/SKILL.md 영어로 변경해줘, 기존 의미 그대로 유지될 수 있도록하고; package.json 에 npm에 배포할수 있게 publish 명령추가해줘, 그리고 npx remote-skills add DIR 입력하면 해당 경록에 skills/remote-; ㅇㅇ 테스트 진행해줘; npx remote-skills install 하면 자동으로 codex, claude, gemini 있는 루트 디렉터리 찾아가서 인스톨 되게도 가능해? 아 그리고 uninstall; npx remote-skills install --gemini 하면 제미나이만 인스톨되게 가능해? codex , claude도 이런방식으로; README에 명령어 관련 내용 작성해줘; ㅇㅇ; npm notice\nnpm notice 📦 remote-skills@0.0.1\nnpm notice Tarball Contents\nnpm notice 1.6kB .omx/logs; yongwoo-jung@yongwoo-jung-MacBookAir remote-skills % npm whoami\nnpm error code E401\nnpm error 401 Un","output_preview":"지금 상태는 **로그인 자체가 안 된 상태(E401)** 입니다. \n먼저 인증부터 해결해야 배포됩니다.\n\n바로 실행:\n```bash\nnpm logout\nnpm login\nnpm whoami\n```\n\n`npm whoami`가 성공하면 그다음 배포:\n```bash\nnpm publish --access public\n```\n\n추가 확인(가끔 레지스트리 문제):\n"}
14
+ {"timestamp":"2026-03-07T07:59:13.382Z","type":"agent-turn-complete","thread_id":"019cc728-ef2c-76f2-91ca-3b1910428d6c","turn_id":"019cc74e-a82d-7302-90cc-e4977aa6260e","input_preview":"skills/remote-skills/SKILL.md 영어로 변경해줘, 기존 의미 그대로 유지될 수 있도록하고; package.json 에 npm에 배포할수 있게 publish 명령추가해줘, 그리고 npx remote-skills add DIR 입력하면 해당 경록에 skills/remote-; ㅇㅇ 테스트 진행해줘; npx remote-skills install 하면 자동으로 codex, claude, gemini 있는 루트 디렉터리 찾아가서 인스톨 되게도 가능해? 아 그리고 uninstall; npx remote-skills install --gemini 하면 제미나이만 인스톨되게 가능해? codex , claude도 이런방식으로; README에 명령어 관련 내용 작성해줘; ㅇㅇ; npm notice\nnpm notice 📦 remote-skills@0.0.1\nnpm notice Tarball Contents\nnpm notice 1.6kB .omx/logs; yongwoo-jung@yongwoo-jung-MacBookAir remote-skills % npm whoami\nnpm error code E401\nnpm error 401 Un; npm notice 130B skills/remote-skills/cli/cli.config.json\nnpm notice 2.5kB skills/remote-skills/cli/c","output_preview":"좋습니다. 지금은 정상 플로우입니다.\n\n다음만 하면 됩니다:\n1. `ENTER` 눌러 브라우저 열기\n2. npm 로그인/승인 완료\n3. 터미널로 돌아오면 publish가 자동 재개/완료\n\n만약 브라우저 자동 오픈이 안 되면, 표시된 URL을 직접 열어서 승인하면 됩니다.\n\n배포 끝난 뒤 확인:\n```bash\nnpm view remote-skills vers"}
@@ -0,0 +1,8 @@
1
+ {
2
+ "total_turns": 14,
3
+ "session_turns": 14,
4
+ "last_activity": "2026-03-07T07:59:13.383Z",
5
+ "session_input_tokens": 0,
6
+ "session_output_tokens": 0,
7
+ "session_total_tokens": 0
8
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "last_turn_at": "2026-03-07T07:59:13.383Z",
3
+ "turn_count": 14,
4
+ "last_agent_output": "좋습니다. 지금은 정상 플로우입니다.\n\n다음만 하면 됩니다:\n1. `ENTER` 눌러 브라우저 열기\n2. npm 로그인/승인 완료\n3. 터미널로 돌아오면 publish가 자동 재개"
5
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "pid": 11515,
3
+ "started_at": "2026-03-07T04:27:54.658Z",
4
+ "cwd": "/Users/yongwoo-jung/Desktop/Repositories/rskills/packages/libs/remote-skills",
5
+ "notify_script": "/Users/yongwoo-jung/.nvm/versions/node/v22.21.1/lib/node_modules/oh-my-codex/scripts/notify-hook.js",
6
+ "poll_ms": 700,
7
+ "tracked_files": 4,
8
+ "seen_turns": 1
9
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "recent_turns": {
3
+ "019cc37a-dcf7-7792-9174-4ba69973a0db|019cc699-6ea6-7c43-82ff-0bb4e2bc64e5|agent-turn-complete": 1772858542073,
4
+ "019cc37a-dcf7-7792-9174-4ba69973a0db|019cc69b-7377-70c0-9997-1e88461f2fed|agent-turn-complete": 1772858654149,
5
+ "019cc37a-dcf7-7792-9174-4ba69973a0db|019cc69f-2ac8-78a1-8edc-94fbbf15fcbb|agent-turn-complete": 1772858908965,
6
+ "019cc37a-dcf7-7792-9174-4ba69973a0db|019cc6a0-5617-7dd2-a8aa-6defcfabcf66|agent-turn-complete": 1772858984447,
7
+ "019cc728-ef2c-76f2-91ca-3b1910428d6c|019cc729-181c-7710-96d0-feddb6c7a75e|agent-turn-complete": 1772867971483,
8
+ "019cc728-ef2c-76f2-91ca-3b1910428d6c|019cc72e-0bad-74d1-b8ba-bc96cd2acfa4|agent-turn-complete": 1772868275997,
9
+ "019cc728-ef2c-76f2-91ca-3b1910428d6c|019cc730-8ed1-7471-b6f9-69c061d47c0a|agent-turn-complete": 1772868402700,
10
+ "019cc728-ef2c-76f2-91ca-3b1910428d6c|019cc731-f396-7b21-a31f-3d8344edde66|agent-turn-complete": 1772868547381,
11
+ "019cc728-ef2c-76f2-91ca-3b1910428d6c|019cc733-e265-75e2-b2ca-083516c670b5|agent-turn-complete": 1772868646699,
12
+ "019cc728-ef2c-76f2-91ca-3b1910428d6c|019cc734-b6fb-7050-a86d-83d6c49b8a29|agent-turn-complete": 1772868695141,
13
+ "019cc728-ef2c-76f2-91ca-3b1910428d6c|019cc747-ed4d-7732-a062-28bc93dd2dad|agent-turn-complete": 1772869931813,
14
+ "019cc728-ef2c-76f2-91ca-3b1910428d6c|019cc74d-78ce-7033-87f0-e50484e0332b|agent-turn-complete": 1772870278596,
15
+ "019cc728-ef2c-76f2-91ca-3b1910428d6c|019cc74d-c9c6-7b51-a932-6b3a3010c4b1|agent-turn-complete": 1772870297459,
16
+ "019cc728-ef2c-76f2-91ca-3b1910428d6c|019cc74e-a82d-7302-90cc-e4977aa6260e|agent-turn-complete": 1772870353380
17
+ },
18
+ "last_event_at": "2026-03-07T07:59:13.381Z"
19
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "last_nudged_by_team": {},
3
+ "last_idle_nudged_by_team": {}
4
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "total_injections": 0,
3
+ "pane_counts": {},
4
+ "session_counts": {},
5
+ "recent_keys": {},
6
+ "last_injection_ts": 0,
7
+ "last_reason": "disabled",
8
+ "last_event_at": "2026-03-07T07:59:13.384Z"
9
+ }
package/README.md ADDED
@@ -0,0 +1,64 @@
1
+ # Remote-skills
2
+
3
+ `remote-skills` is an npm CLI package for:
4
+
5
+ - installing the `skills/remote-skills` skill into agent directories
6
+ - uninstalling the installed skill
7
+ - running remote skill queries
8
+
9
+ ## Commands
10
+
11
+ ### Install
12
+
13
+ Install to all detected agent directories (`codex`, `claude`, `gemini`):
14
+
15
+ ```bash
16
+ npx remote-skills install
17
+ ```
18
+
19
+ Install only selected targets:
20
+
21
+ ```bash
22
+ npx remote-skills install --gemini
23
+ npx remote-skills install --codex
24
+ npx remote-skills install --claude
25
+ npx remote-skills install --codex --claude
26
+ ```
27
+
28
+ ### Uninstall
29
+
30
+ Remove from all detected agent directories:
31
+
32
+ ```bash
33
+ npx remote-skills uninstall
34
+ ```
35
+
36
+ Remove only selected targets:
37
+
38
+ ```bash
39
+ npx remote-skills uninstall --gemini
40
+ npx remote-skills uninstall --codex --claude
41
+ ```
42
+
43
+ ### Add to a Specific Directory
44
+
45
+ Copy `skills/remote-skills` into a specific directory:
46
+
47
+ ```bash
48
+ npx remote-skills add <DIR>
49
+ ```
50
+
51
+ Result path:
52
+
53
+ ```text
54
+ <DIR>/skills/remote-skills
55
+ ```
56
+
57
+ ## How Install Root Detection Works
58
+
59
+ - The CLI walks upward from the current working directory.
60
+ - It picks the first parent directory containing at least one of:
61
+ - `.codex` or `codex`
62
+ - `.claude` or `claude`
63
+ - `.gemini` or `gemini`
64
+ - If nothing is found, it tries your home directory.
@@ -0,0 +1,223 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+
4
+ const fs = require("fs");
5
+ const path = require("path");
6
+
7
+ const cliModule = require("../skills/remote-skills/cli/cli.js");
8
+ const AGENT_DIR_CANDIDATES = {
9
+ codex: [".codex", "codex"],
10
+ claude: [".claude", "claude"],
11
+ gemini: [".gemini", "gemini"],
12
+ };
13
+
14
+ const usage = () => {
15
+ console.log(`Usage:
16
+ remote-skills add <DIR>
17
+ remote-skills install [--codex] [--claude] [--gemini]
18
+ remote-skills uninstall [--codex] [--claude] [--gemini]
19
+ remote-skills <query>... [-s|--session <sessionId>] [--debug]
20
+
21
+ Examples:
22
+ remote-skills add /path/to/project
23
+ remote-skills install
24
+ remote-skills install --gemini
25
+ remote-skills install --codex --claude
26
+ remote-skills uninstall --gemini
27
+ remote-skills react architecture -s cache`);
28
+ };
29
+
30
+ const hasDir = (dirPath) =>
31
+ fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();
32
+
33
+ const resolveAgentDirs = (rootDir) => {
34
+ const resolved = {};
35
+
36
+ for (const [agent, candidates] of Object.entries(AGENT_DIR_CANDIDATES)) {
37
+ const found = candidates
38
+ .map((name) => path.join(rootDir, name))
39
+ .find((candidatePath) => hasDir(candidatePath));
40
+ if (found) {
41
+ resolved[agent] = found;
42
+ }
43
+ }
44
+
45
+ return resolved;
46
+ };
47
+
48
+ const findInstallRoot = () => {
49
+ let current = process.cwd();
50
+ const homeDir = process.env.HOME ? path.resolve(process.env.HOME) : null;
51
+
52
+ while (true) {
53
+ const agentDirs = resolveAgentDirs(current);
54
+ if (Object.keys(agentDirs).length > 0) {
55
+ return { rootDir: current, agentDirs };
56
+ }
57
+
58
+ const parent = path.dirname(current);
59
+ if (parent === current) {
60
+ break;
61
+ }
62
+ current = parent;
63
+ }
64
+
65
+ if (homeDir) {
66
+ const homeAgentDirs = resolveAgentDirs(homeDir);
67
+ if (Object.keys(homeAgentDirs).length > 0) {
68
+ return { rootDir: homeDir, agentDirs: homeAgentDirs };
69
+ }
70
+ }
71
+
72
+ throw new Error(
73
+ "Could not find an install root containing codex/claude/gemini directories."
74
+ );
75
+ };
76
+
77
+ const copySkillDirectory = (targetDirInput) => {
78
+ const targetDir = path.resolve(process.cwd(), targetDirInput);
79
+ const sourceDir = path.resolve(__dirname, "../skills/remote-skills");
80
+ const targetSkillsDir = path.join(targetDir, "skills");
81
+ const destinationDir = path.join(targetSkillsDir, "remote-skills");
82
+
83
+ if (!fs.existsSync(targetDir)) {
84
+ throw new Error(`Target directory does not exist: ${targetDir}`);
85
+ }
86
+
87
+ if (!fs.statSync(targetDir).isDirectory()) {
88
+ throw new Error(`Target path is not a directory: ${targetDir}`);
89
+ }
90
+
91
+ if (fs.existsSync(destinationDir)) {
92
+ throw new Error(`Destination already exists: ${destinationDir}`);
93
+ }
94
+
95
+ fs.mkdirSync(targetSkillsDir, { recursive: true });
96
+ fs.cpSync(sourceDir, destinationDir, { recursive: true });
97
+
98
+ console.log(`Copied to ${destinationDir}`);
99
+ };
100
+
101
+ const parseTargetAgents = (args) => {
102
+ const selected = new Set();
103
+
104
+ for (const arg of args) {
105
+ if (arg === "--codex") {
106
+ selected.add("codex");
107
+ continue;
108
+ }
109
+ if (arg === "--claude") {
110
+ selected.add("claude");
111
+ continue;
112
+ }
113
+ if (arg === "--gemini") {
114
+ selected.add("gemini");
115
+ continue;
116
+ }
117
+ throw new Error(`Unknown option: ${arg}`);
118
+ }
119
+
120
+ return selected.size > 0
121
+ ? Array.from(selected)
122
+ : ["codex", "claude", "gemini"];
123
+ };
124
+
125
+ const filterAgentDirs = (agentDirs, targets) => {
126
+ const filtered = {};
127
+ for (const target of targets) {
128
+ if (agentDirs[target]) {
129
+ filtered[target] = agentDirs[target];
130
+ }
131
+ }
132
+ return filtered;
133
+ };
134
+
135
+ const installToAgents = (targets) => {
136
+ const sourceDir = path.resolve(__dirname, "../skills/remote-skills");
137
+ const { rootDir, agentDirs } = findInstallRoot();
138
+ const targetAgentDirs = filterAgentDirs(agentDirs, targets);
139
+ const installedPaths = [];
140
+
141
+ if (Object.keys(targetAgentDirs).length === 0) {
142
+ console.log(`No matching agent directories found under root=${rootDir}`);
143
+ return;
144
+ }
145
+
146
+ for (const [agent, agentRoot] of Object.entries(targetAgentDirs)) {
147
+ const destinationDir = path.join(agentRoot, "skills", "remote-skills");
148
+ if (fs.existsSync(destinationDir)) {
149
+ console.log(`[skip] ${agent}: already exists at ${destinationDir}`);
150
+ continue;
151
+ }
152
+
153
+ fs.mkdirSync(path.dirname(destinationDir), { recursive: true });
154
+ fs.cpSync(sourceDir, destinationDir, { recursive: true });
155
+ installedPaths.push(destinationDir);
156
+ console.log(`[installed] ${agent}: ${destinationDir}`);
157
+ }
158
+
159
+ if (installedPaths.length === 0) {
160
+ console.log(`No new installations were made. root=${rootDir}`);
161
+ }
162
+ };
163
+
164
+ const uninstallFromAgents = (targets) => {
165
+ const { rootDir, agentDirs } = findInstallRoot();
166
+ const targetAgentDirs = filterAgentDirs(agentDirs, targets);
167
+ const removedPaths = [];
168
+
169
+ if (Object.keys(targetAgentDirs).length === 0) {
170
+ console.log(`No matching agent directories found under root=${rootDir}`);
171
+ return;
172
+ }
173
+
174
+ for (const [agent, agentRoot] of Object.entries(targetAgentDirs)) {
175
+ const destinationDir = path.join(agentRoot, "skills", "remote-skills");
176
+ if (!fs.existsSync(destinationDir)) {
177
+ console.log(`[skip] ${agent}: not installed`);
178
+ continue;
179
+ }
180
+
181
+ fs.rmSync(destinationDir, { recursive: true, force: true });
182
+ removedPaths.push(destinationDir);
183
+ console.log(`[removed] ${agent}: ${destinationDir}`);
184
+ }
185
+
186
+ if (removedPaths.length === 0) {
187
+ console.log(`Nothing was removed. root=${rootDir}`);
188
+ }
189
+ };
190
+
191
+ const main = async () => {
192
+ const args = process.argv.slice(2);
193
+
194
+ if (args.length === 0 || args[0] === "--help" || args[0] === "-h") {
195
+ usage();
196
+ return;
197
+ }
198
+
199
+ if (args[0] === "add") {
200
+ if (!args[1]) {
201
+ throw new Error("Missing target directory. Usage: remote-skills add <DIR>");
202
+ }
203
+ copySkillDirectory(args[1]);
204
+ return;
205
+ }
206
+
207
+ if (args[0] === "install") {
208
+ installToAgents(parseTargetAgents(args.slice(1)));
209
+ return;
210
+ }
211
+
212
+ if (args[0] === "uninstall") {
213
+ uninstallFromAgents(parseTargetAgents(args.slice(1)));
214
+ return;
215
+ }
216
+
217
+ await cliModule.main(args);
218
+ };
219
+
220
+ main().catch((error) => {
221
+ console.error(error.message);
222
+ process.exit(1);
223
+ });
package/package.json ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "remote-skills",
3
+ "version": "0.0.1",
4
+ "description": "",
5
+ "main": "skills/remote-skills/cli/cli.js",
6
+ "bin": {
7
+ "remote-skills": "bin/remote-skills.js"
8
+ },
9
+ "scripts": {
10
+ "publish": "npm publish --access public"
11
+ },
12
+ "keywords": [],
13
+ "author": "",
14
+ "license": "ISC",
15
+ "packageManager": "pnpm@10.28.0"
16
+ }
@@ -0,0 +1 @@
1
+ {"timestamp":"2026-03-07T04:37:03.279Z","type":"hook_dispatch","event":"turn-complete","source":"native","enabled":false,"reason":"plugins_disabled"}
@@ -0,0 +1 @@
1
+ {"timestamp":"2026-03-07T04:37:03.239Z","type":"agent-turn-complete","thread_id":"019cc695-5ee3-7f42-97c5-43145ba55e66","turn_id":"019cc695-5eed-7320-8786-50f109d6724a","input_preview":"/prompts:executor\n당신은 remote-skills 워크플로를 수행하는 서브에이전트다.\n\n반드시 먼저 읽고 따를 파일:\n- /Users/yongwoo-jung/Desk","output_preview":"1. 생성한 키워드(카테고리별) \n- 영어 단일 토큰: `react`, `component`, `architecture`, `state` \n- 한국어 단일 토큰: `리액트`, `컴포넌트`, `아키텍처`, `상태`, `분리` \n- 영어 결합: `React component architecture` \n- 한국어 결합: `React 상태`, `상태 분리`"}
@@ -0,0 +1,8 @@
1
+ {
2
+ "total_turns": 1,
3
+ "session_turns": 1,
4
+ "last_activity": "2026-03-07T04:37:03.249Z",
5
+ "session_input_tokens": 0,
6
+ "session_output_tokens": 0,
7
+ "session_total_tokens": 0
8
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "last_turn_at": "2026-03-07T04:37:03.257Z",
3
+ "turn_count": 1,
4
+ "last_agent_output": "1. 생성한 키워드(카테고리별) \n- 영어 단일 토큰: `react`, `component`, `architecture`, `state` \n- 한국어 단일 토큰: `리액트`, "
5
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "recent_turns": {
3
+ "019cc695-5ee3-7f42-97c5-43145ba55e66|019cc695-5eed-7320-8786-50f109d6724a|agent-turn-complete": 1772858223229
4
+ },
5
+ "last_event_at": "2026-03-07T04:37:03.231Z"
6
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "last_nudged_by_team": {},
3
+ "last_idle_nudged_by_team": {}
4
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "total_injections": 0,
3
+ "pane_counts": {},
4
+ "session_counts": {},
5
+ "recent_keys": {},
6
+ "last_injection_ts": 0,
7
+ "last_reason": "disabled",
8
+ "last_event_at": "2026-03-07T04:37:03.264Z"
9
+ }