Skip to main content
A repository that already carries Claude Code’s conventional files — CLAUDE.md, .claude/skills/, .claude/agents/, .claude/rules/, .claude/scratchpad/ — loads them with claudeProject(): the result spreads into createAgent(), so the same directory drives both harnesses. Nothing is copied or renamed; Lousho reads the files where they already are.
What maps to what:

Sub-agents

.claude/agents/reviewer.md:
The frontmatter name and description are required (Claude Code’s own contract); the body becomes the sub-agent’s instructions. model selects the sub-agent’s model; without it the sub-agent runs on the provider / model passed to claudeProject() — a file with neither is an error naming it. A tools frontmatter list is recorded on the manifest but not enforced: Lousho sub-agents share the lead’s tool registry (narrow them with permission rules instead). Unlike agent directories, claudeProject() reads markdown as data and runs nothing: no file in .claude/ is imported or executed. Loading a project you don’t trust is therefore safe — the tool surface stays whatever you pass to createAgent().

Scratchpad

.claude/scratchpad/ gets a scratchpad tool: the agent writes, appends, reads and lists *.md notes in that directory (names are a-z0-9-_, so paths can’t escape it). It is the durable “working notes” surface — for secrets or structured facts prefer memory slots; for task-shaped notes, hooks can pause on scratchpad writes like any tool.

Options

manifest reports what was found: instructionFiles, rules, skills, subagents, scratchpad, ignored.

What’s deliberately not loaded

.claude/commands/*.md are slash-command prompts for an interactive harness — the Lousho shape for “named repeatable workflows” is flows. .claude/settings*.json are Claude Code harness settings (they don’t describe an agent), and .claude/mcp.json declares MCP servers — pass those to createAgent({ mcpServers }) yourself (MCP); parsing a third-party config format is deliberately out of scope. For the other direction — projectInstructions: true on createAgent() — finds and appends the nearest AGENTS.md/CLAUDE.md up the tree, without touching .claude/. See the option in Configuration.