Skip to content

fix(server): discover project skills for Claude - #9210

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
anirudhsama:fix/claude-project-skills
Sep 2, 2026
Merged

maria-rcks merged 1 commit into
pingdotgg:mainfrom
anirudhsama:fix/claude-project-skills

fix(server): discover project skills for Claude

8a868fc
Select commit
Loading
Failed to load commit list.
MacroscopeApp / Macroscope - Effect Service Conventions succeeded Sep 2, 2026 in 1m 14s

All clear

All clear

Details

Note

Your check run agent prompt is: .macroscope/check-run-agents/effect-service-conventions.md
More information about how Check Run Agents work can be found in our Help Center.


🔍 Agent activity — 8 tool calls

💭 The diff only touches ClaudeDriver.ts but references discoverClaudeSkills from ClaudeSkills.ts, which isn't shown—I need to check whether that file already exists or if the diff was truncated.

1. browse_code — apps/server/src/provider/Drivers/ClaudeSkills*

2. git_tools — 70cd258..8a868fc

💭 ClaudeSkills.ts must already exist at the merge base since it's not in the diff stat, so ClaudeDriver.ts is the only file actually changed. I'm now checking how fileSystem and path services are being provided in that scope, since explicitly providing service instances rather than pulling from the environment seems like a key concern.

3. browse_code — apps/server/src/provider/Drivers/ClaudeDriver.ts

4. browse_code — apps/server/src/provider/Drivers/ClaudeSkills.ts

💭 I'm noticing that readSkillOverrides actually needs HostProcessPlatform internally, but its declared type only lists FileSystem and Path as requirements—so even though ClaudeDriver only provides those two, the type checker won't flag the missing dependency since it's pre-existing code outside this diff. Focusing on the actual change in ClaudeDriver.ts, the new lines follow the same established pattern already used elsewhere in the file: acquiring services from the environment with yield* and then re-providing them into a nested effect to strip requirements from the returned type. This seems like a legitimate technique for erasing R in cases like snapshotForCwd, though I want to double check it doesn't conflict with the convention against hiding dependencies in closures over singleton services. I also notice the cwd parameter shadows the outer destructured cwd from ServerConfig, which is a shadowing concern but not really an Effect service convention violation, so probably out of scope for this review. I'm also considering whether ProviderInstance's type actually includes a snapshotForCwd member, since if it doesn't, using satisfies with an object literal carrying an extra property could raise excess-property-check issues worth flagging separately. Now I want to check whether HostProcessPlatform is a service requiring provision, since if ClaudeDriver fails to provide it that could produce a runtime defect — though since the diff shows only ClaudeDriver.ts changed and ClaudeSkills.ts already exists on main, that part should be fine. I'm going to check the ProviderInstance definition for the snapshotForCwd field and look at how HostProcessPlatform is defined.

5. git_tools — snapshotForCwd

6. git_tools — HostProcessPlatform

💭 I notice a discrepancy: the grep result shows ClaudeDriver.ts line 177 with a workspaceCwd parameter, but the head file I viewed has that logic at line 216 using cwd instead. The line numbers and variable names don't match, which suggests git_grep might be searching a different revision than the one I'm reviewing. Maybe the default branch has since moved ahead with a renamed variable, or the grep tool defaults to a different ref than the explicit commit SHA I've been checking. Let me re-run grep against the exact commit to clear this up.

7. git_tools — snapshotForCwd

8. browse_code — apps/server/src/provider/Drivers/CodexDriver.ts

💭 The Claude code follows the same established patterns as Codex and OpenCode, including how services get provisioned via closures. I'm checking whether the Claude version needs HostProcessPlatform for skill discovery, but since it's a Context.Reference with a default, no extra provisioning is required, and I'm now looking at whether there's any error-channel mismatch in Claude's implementation. Everything checks out against the existing Effect service conventions. There's an instruction conflict: the task says to output exactly "All clear" when there are no findings, but I also need to follow the JSON schema format. I'll resolve this by putting "All clear" into the summary/title fields while marking the state as success, since there are no violations found.


Agent Credits: 45 credits

Token usage: 10 uncached input · 117,250 cache-read input · 43,355 cache-write input · 3,745 output
Agent Credits may also include non-token charges from external tools such as web research.