Choosing Claude Code skills per repo is what harness-scope does: a Claude Code Mod that GitHub user shimo4228 published on October 3, 2026. You keep named profiles once in ~/.claude, a repo picks one with a one-line JSON file, and Claude then sees only the global skills, agents, instruction files and tools that profile allows. The repo’s own skills, agents and CLAUDE.md always stay. The author describes the setup in a write-up on DEV the same day.
Mods arrived in Claude Code 2.1.287, whose changelog reads: “Added Claude Mods: plugins may now modify deeper behavior”. The README calls harness-scope “a Claude Code Mod (a plugin’s hooks module)” and says it needs 2.1.287 or later.
On this page
The problem the author reports
shimo4228 writes articles in a dedicated repository but keeps a large global harness for code under ~/.claude. According to the README, in that writing repo the skill listing held 101 skills: the repo’s own 7 and 94 from the global setup, plugins, built-ins and claude.ai, tdd among them.
The author notes that project settings such as skillOverrides, enabledPlugins, claudeMdExcludes and permissions.deny can already turn things off per repo, and lists three gaps they leave: no allowlist, so a skill added to ~/.claude later shows up everywhere; plugin skills going on or off only with the whole plugin; and no shared sets, so each repo’s settings are copied by hand.
How the setup works
From the README, version 0.1.3.
Step 1. Install the Mod once, at user scope:
claude plugin marketplace add shimo4228/harness-scope
claude plugin install harness-scope@harness-scope
Step 2. Pick a profile. The bundled writing profile keeps only the repo’s own skills plus the Explore and general-purpose agents, and turns off LSP, NotebookEdit, EnterWorktree and ExitWorktree.
Step 3. In the repo, add .claude/harness-scope.json:
{ "profile": "writing" }
Changes apply from a new conversation or /clear, and /harness-scope shows what was turned off and which patterns matched nothing.
Your own profiles live at ~/.claude/harness-scope/profiles/<name>.json. Each category (skills, agents, instructions, tools) takes either allow or deny, with * and ? globs. The README’s example:
{
"skills": { "allow": ["writing-ecosystem", "prose-translation", "anthropic-skills:docx"] },
"agents": { "allow": ["Explore", "general-purpose"] },
"instructions": { "deny": ["~/.claude/rules/common/testing.md"] },
"tools": { "deny": ["LSP", "NotebookEdit", "mcp__claude_ai_Slack__*"] }
}
A repo file can only name a profile, not define one, so a cloned repo cannot use it to turn off your rules; a line on screen says when a repo picks a profile.
What the author measured
The README reports a run on October 3, 2026 with Claude Code 2.1.287 and claude -p in the author’s writing repo:
| Without harness-scope | With writing | |
|---|---|---|
| Skill listing | 101 skills, 26,551 characters | the repo’s own 7, 1,623 characters |
| Agent listing | 38 types, 18,988 characters | the repo’s own 7 plus Explore and general-purpose, 4,134 characters |
Calling a turned-off skill (tdd) | loads | refused, with the reason |
The author adds that the numbers depend on how many skills, plugins and MCP servers you have, and that turning off only a few skills barely shrinks the listing: in one test, turning off 3 skills took it from 26,551 to 26,534 characters.
Limits the author lists
- It controls what Claude is shown, not what Claude can read: Claude can still open a skill’s SKILL.md directly.
- Instruction files attached later in a conversation, such as rules with
paths:or CLAUDE.md files in subdirectories, are not turned off. - A tool turned off here is moved behind ToolSearch and refused when called; to remove it the native way, the README points to
permissions.deny. - Checked on Claude Code 2.1.287 only. In 1 of 9 test runs the Mod did not load, with no error shown, and the cause is not confirmed yet.
The output style half
In the DEV write-up, the author pairs the Mod with a project output style for how Claude talks in writing sessions, selected with "outputStyle" in .claude/settings.json. Anthropic’s output styles documentation describes custom styles in .claude/output-styles and the keep-coding-instructions frontmatter setting, which decides whether Claude Code’s software engineering instructions stay in the system prompt.





