KilimcininKorOglu/claude-code-mods/tree/main/plugins/mod-doctor
mod-doctor
마켓플레이스 복제본이 이미 최신 버전을 제공하는 설치된 플러그인의 이름을 지정하고 간격을 줄이기 위해 claude 플러그인 업데이트 명령을 인쇄하는 Claude Code 모드입니다.
이 mod 소개
모드닥터
claude plugin marketplace update를 실행하면 복제본이 새 버전을 가져오고 설치된 플러그인은 각 one에 대해 claude plugin update를 실행할 때까지 원래 위치에 유지됩니다. 두 번째 단계는 잊어버리기 쉽습니다. 이 모드는 로컬 클론이 이미 최신 버전을 제공하는 모든 마켓플레이스에 설치된 각 플러그인의 이름을 지정하므로 플러그인이 아닌 마켓플레이스에 대해 실행한 업데이트가 눈에 띄지 않게 유지됩니다.
기능
-
각 세션 시작, 각 메인 루프 턴 종료 및 대화형 세션의 모든 60 에서 모드는 호스트가 디스크에 보관하는 내용을 읽습니다.
~/.claude/plugins/installed_plugins.json(CLAUDE_CONFIG_DIR가 설정된 경우 대신$CLAUDE_CONFIG_DIR/plugins/, 호스트가 읽음) 범위별로 각<plugin>@<marketplace>의 설치된 버전 이름을 지정합니다. 즉, 사용자 설치 및 이름이 지정된 프로젝트에 대한 프로젝트 설치입니다. 다른 프로젝트의 프로젝트 설치는 읽혀지지 않으며 강제로 설치되는 update available sidebar 0.4.1 → 0.5.0 turkish-native 1.0.0 → 1.2.0 claude plugin update sidebar@kilimcininkoroglu-mods turkish-native@turkish-native Q의 이전 버전이 비교됩니다.- 각 마켓플레이스의 고유한
.claude-plugin/marketplace.json는 해당 플러그인이 내부에 어디에 있는지 알려줍니다(one 마켓플레이스는 플러그인을plugins/아래에 유지하고 다른 하나는 루트에 one 플러그인입니다). - 해당 플러그인의
.claude-plugin/plugin.json, 복제본이 제공하는 버전입니다.
-
각 부품의 수에 따라 설치된 것과 제공되는 것을 비교하므로
0.10.0는0.9.0보다 최신 것으로 간주됩니다. Two 버전은 숫자가 동일한 것으로 간주되므로 비교할 수 없으므로 다른 모양의 버전은 업데이트를 요청하지 않습니다. -
사이드바가 열려 있는 동안 뒤에 있는 플러그인은 세션 동안 유지되는 one
update available섹션입니다.update available sidebar 0.4.1 → 0.5.0 turkish-native 1.0.0 → 1.2.0 claude plugin update sidebar@kilimcininkoroglu-mods turkish-native@turkish-native각 행에서 설치된 버전은 희미하고 제공되는 버전은 점프로 색상이 지정됩니다. 새로운 주요 버전은 빨간색, 새로운 부 버전은 노란색, 새로운 패치는 녹색입니다. 8번째 행 이후의 행은 one 희미한 선으로 계산되며, 그 아래의 희미한 업데이트 명령은 첫 번째 eight 행의 플러그인 이름을 지정합니다. 사이드바를 닫거나 해당 모드를 설치하지 않은 경우 동일한 결과가 one 성적표 라인입니다.
-
설치된 모든 플러그인이 복제 버전인 동안에는 아무것도 그려지지 않으며, 해당 섹션이 사실이 되는 즉시 삭제됩니다.
-
각 턴이 끝날 때의 측정값과 60의 one는 세션 시작이 할 수 없는 것을 포착합니다. 즉, 이 세션이 열려 있는 동안 다른 창에서 업데이트한 플러그인 또는 마켓플레이스와 이 모드가 처음 측정되었을 때 자체 플러그인이 아직 창을 열지 않은 사이드바입니다. 60 측정값은 이 세션이 유휴 상태인 동안에도 이를 포착합니다. 결과는 성적표에 한 번 도달합니다. 동일한 결과에 대한 이후의 측정은 아무 의미가 없습니다.
-
/mod-doctor는 현장에서 다시 측정하고 설정, 범위, 보유 플러그인 수 및 뒤에 있는 플러그인 수를 인쇄합니다./mod-doctor marketplace <name>는 범위를 one 마켓플레이스로 좁히고,marketplace all는 범위를 다시 넓힙니다.클론은 마지막claude plugin marketplace update만큼 새로운 것이므로 이 모드는 "GitHub에 최신 버전이 있습니까?"가 아니라 "마켓플레이스를 업데이트했습니다. 플러그인을 업데이트했습니까?"라고 대답합니다.
명령
/mod-doctor the setting, the scope, and every plugin that is behind
/mod-doctor on | off on by default
/mod-doctor marketplace my-mods that marketplace alone
/mod-doctor marketplace all every marketplace the host cloned; the default, stored across sessions
설치
claude plugin marketplace add KilimcininKorOglu/claude-code-mods
claude plugin install mod-doctor@kilimcininkoroglu-mods
함수 후크는 조기 액세스입니다. Claude Code 2.1.288 이상에서는 기본적으로 로드하므로 스위치를 켤 것이 없습니다.
설치 후
- Claude Code를 다시 시작하십시오.
- 플러그인별 행에 대해 사이드바 모드를 설치합니다. 그것이 없으면 모드는 대신 one 성적표 줄을 작성합니다.
도달할 수 있는 것
Claude Code 2.1.284에서 claude plugin validate로 검증됨:
❯ ./register.ts hooks: session.start, command.run{command=mod-doctor}, turn.complete
❯ ./register.ts calls: $.clock.every, $.command.register, $.env.get, $.fs.read (via readText), $.sidebar.clear (via clearShown), $.sidebar.set (via toPerson), $.store.get (via readScope, readSettings), $.store.set (via setEnabled, setScope), $.ui.log (via toPerson)
❯ ./register.ts env writes: nothing
❯ ./register.ts env reads: CLAUDE_CONFIG_DIR, HOME
L1에 도달하면 파일을 읽습니다.
1. Reads: CLAUDE_CONFIG_DIR, HOME, the host's install record, each marketplace clone's manifest, and one plugin.json per installed plugin. No project file, no prompt, no transcript.
2. Runs: nothing; the update command is text for the person to run
3. Sends: nothing to the model and nothing to the network; the rows are for the person only
4. Persists: in $.store, the on/off setting and the scope
5. Hostile input: every file is read as data, the versions are compared as numbers, and a file of another shape is skipped without a finding
한도
- 클론은 업스트림 저장소가 아닌 측정값입니다.
claude plugin marketplace update <marketplace>를 먼저 실행하세요. 그렇지 않으면 모드에서 새로운 내용이 보고되지 않습니다. - 커밋 샤(공식 one)로 플러그인 버전을 관리하는 마켓플레이스는 아무 것도 보고하지 않습니다. two 샤는 숫자로 비교할 수 없기 때문입니다.
- git 하위 디렉터리에 복제 버전이 없기 때문에 마켓플레이스가 다른 저장소에서 가져오는 플러그인은 건너뜁니다.
- 실행 중인 세션이 새 코드를 로드했는지 여부는 알려주지 않습니다. 세션 중
claude plugin update는/reload-plugins또는 다시 시작될 때까지 이전 코드를 로드된 상태로 둡니다. - 업데이트된 내용이 없습니다. 모드는 명령의 이름을 지정합니다. 그것을 실행하는 것은 당신 것입니다.
개발
make install # eslint, typescript-eslint, typescript
make lint # complexity limit 10, the build fails above it
make typecheck # needs .claude/types/ from /plugin-types
make validate
make test # claude plugin test
설치
먼저 작성자의 README에서 marketplace와 플러그인 이름을 확인하세요. 저장소 구조에 따라 명령어가 달라질 수 있습니다.
claude plugin marketplace add KilimcininKorOglu/claude-code-mods claude plugin install mod-doctor
원문 / README
mod-doctor
You run claude plugin marketplace update, the clone gets the new versions, and the installed plugins stay where they were until you also run claude plugin update for each one. That second step is easy to forget. This mod names each installed plugin, of every marketplace, whose local clone already offers a newer version, so an update you ran for the marketplace and not for the plugin does not stay unnoticed.
What it does
-
At each session start, at the end of each main-loop turn, and every 60 s in an interactive session, the mod reads what the host keeps on disk:
~/.claude/plugins/installed_plugins.json($CLAUDE_CONFIG_DIR/plugins/instead whenCLAUDE_CONFIG_DIRis set, as the host reads it), which names the version installed of each<plugin>@<marketplace>per scope: the user install, and a project install for the project it names. A project install of another project is not read, and of two installs in force the older version is compared;- each marketplace's own
.claude-plugin/marketplace.jsonin its clone, which says where that plugin sits inside it (one marketplace keeps its plugins underplugins/, another is one plugin at its root); - that plugin's
.claude-plugin/plugin.json, the version the clone offers.
-
It compares installed against offered by the numbers of each part, so
0.10.0counts as newer than0.9.0. Two versions it cannot compare as numbers count as equal, so a version of another shape never asks for an update. -
While the sidebar is open, the plugins that are behind are one
update availablesection that stays for the session:update available sidebar 0.4.1 → 0.5.0 turkish-native 1.0.0 → 1.2.0 claude plugin update sidebar@kilimcininkoroglu-mods turkish-native@turkish-nativeIn each row the installed version is faint and the offered version is coloured by the jump: a new major version red, a new minor version yellow, a new patch green. The rows past the eighth are counted in one faint line, and the faint update command under them names the plugins of the first eight rows. With the sidebar closed, or without that mod installed, the same finding is one transcript line.
-
Nothing is drawn while every installed plugin is at its clone's version, and the section is taken down as soon as that is true.
-
The measure at each turn's end and the 60 s one catch what the session start cannot: a plugin or a marketplace you updated in another window while this session was open, and a sidebar whose own plugin had not opened its pane yet when this mod first measured. The 60 s measure also catches them while this session is idle. The finding reaches the transcript once; a later measure of the same finding says nothing.
-
/mod-doctormeasures again on the spot and prints the setting, the scope, how many plugins it holds and which are behind./mod-doctor marketplace <name>narrows it to one marketplace, andmarketplace allwidens it back.
The clone is only as new as the last claude plugin marketplace update, so this mod answers "I updated the marketplace, did I update the plugins?", not "is there a newer version on GitHub?".
Command
/mod-doctor the setting, the scope, and every plugin that is behind
/mod-doctor on | off on by default
/mod-doctor marketplace my-mods that marketplace alone
/mod-doctor marketplace all every marketplace the host cloned; the default, stored across sessions
Install
claude plugin marketplace add KilimcininKorOglu/claude-code-mods
claude plugin install mod-doctor@kilimcininkoroglu-mods
Function hooks are early access. Claude Code 2.1.288 and later load them by default, so there is nothing to switch on.
After installing
- Restart Claude Code.
- Install the sidebar mod for the per-plugin rows. Without it the mod writes one transcript line instead.
What it can reach
Validated with claude plugin validate on Claude Code 2.1.284:
❯ ./register.ts hooks: session.start, command.run{command=mod-doctor}, turn.complete
❯ ./register.ts calls: $.clock.every, $.command.register, $.env.get, $.fs.read (via readText), $.sidebar.clear (via clearShown), $.sidebar.set (via toPerson), $.store.get (via readScope, readSettings), $.store.set (via setEnabled, setScope), $.ui.log (via toPerson)
❯ ./register.ts env writes: nothing
❯ ./register.ts env reads: CLAUDE_CONFIG_DIR, HOME
Reach L1, it reads files.
1. Reads: CLAUDE_CONFIG_DIR, HOME, the host's install record, each marketplace clone's manifest, and one plugin.json per installed plugin. No project file, no prompt, no transcript.
2. Runs: nothing; the update command is text for the person to run
3. Sends: nothing to the model and nothing to the network; the rows are for the person only
4. Persists: in $.store, the on/off setting and the scope
5. Hostile input: every file is read as data, the versions are compared as numbers, and a file of another shape is skipped without a finding
Limits
- The clone is the measure, not the upstream repository. Run
claude plugin marketplace update <marketplace>first, or the mod reports nothing new. - A marketplace that versions its plugins by commit sha (the official one does) reports nothing, because two shas are not comparable as numbers.
- A plugin the marketplace pulls from another repository as a git subdirectory has no version in the clone, so it is skipped.
- It does not say whether the running session loaded the new code. A
claude plugin updateduring a session leaves the old code loaded until/reload-pluginsor a restart. - Nothing is updated for you. The mod names the command; running it is yours.
Development
make install # eslint, typescript-eslint, typescript
make lint # complexity limit 10, the build fails above it
make typecheck # needs .claude/types/ from /plugin-types
make validate
make test # claude plugin test
