Borrowing it
Nothing to install: this file belongs to jahala/umbel. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/jahala/umbel/master/CLAUDE.mdgit clone --depth 1 https://github.com/jahala/umbelWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/instructions/jahala/umbel/claude-md)<a href="https://agentmods.dev/instructions/jahala/umbel/claude-md"><img src="https://agentmods.dev/badge/instructions/jahala/umbel/claude-md/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/instructions/jahala/umbel/claude-md"><img src="https://agentmods.dev/badge/instructions/jahala/umbel/claude-md.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.06514 | $0.06514 |
| Opus 5.5 | $0.02606 | $0.02606 |
| Sonnet 5.5 | $0.01303 | $0.01303 |
| Haiku 4.5 | $0.00651 | $0.00651 |
Grade B, and why
umbel CLAUDE.md scanned grade B with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Reads agent configuration directoriesmediumAgent snooping
.claude/, .codex/, .gemini/ hold keys, settings and other credentials a mod has no legitimate need for.
For Gemini, the provider writes `<cwd>/.gemini/settings.json` into the worker's `cwd` (absolute path recorded in `meta.providerFiles` so `kill` cleans up). Codex instead uses a shared, umbel-managed `$CODEX_HOME` (`$UMBE How it starts
The opening of the file, as written. The whole thing — 166 lines — stays where its author put it; the contents beside it link to each section on GitHub.
umbel — Project Guidelines for Claude Code
What this is
umbel remote-controls the interactive claude TUI (and similar agent CLIs) over tmux. One TypeScript binary, three faces:
umbel -p [PROMPT] --provider {claude,codex,gemini}— drop-in forclaude -p/codex -p/gemini -p, but routed through the interactive TUI (subscription-billed). Default provider:claude.umbel spawn|send|wait|status|kill(also via MCP) — supervisor verbs for agent-as-supervisor orchestration.spawn --providerpicks the worker; the provider is recorded inmeta.jsonso subsequent verbs auto-route.umbel run workflow.yaml— declarative pipelines with per-workerprovider:.
Read docs/architecture-v3.md before writing code. It's the canonical multi-CLI design.
Positioning & design filter (full thesis: docs/positioning.md). umbel runs one unit of agent work reliably and returns a result the caller can branch on; orchestration belongs to the caller, not umbel. Apply this filter to every change: invest in the noun (the worker), not the verb (the orchestration) — a new capability must be a per-worker primitive on CLI and MCP, composable by the caller, not new workflow syntax; if it can't be that, it probably doesn't belong here. Guardrails must be enforced + external + looped (check → reject + feedback + retry → halt), never advisory. Anchor identity to the neutral worker contract, not the substrate (tmux/subscription) — per-provider adapters absorb the churn; the contract stays stable. Keep the YAML face thin.
Non-negotiable principles
- S.U.P.E.R. — Side effects at the edge, Uncoupled logic, Pure & total functions, Explicit data flow, Replaceable by value. Lower layers know nothing about upper layers.
- Test first. No fix or feature without a failing test that demonstrates the need. Fake binaries (
test/fixtures/fake-{claude,codex,gemini}.sh) drive e2e — never burn real subscription budget in CI. Real-binary smoke tests live intest/smoke/{claude,codex,gemini}/and are gated onUMBEL_SMOKE=1. - No daemon. tmux is the daemon. Filesystem is the state store. Every
umbelinvocation is short-lived. Workers never live on the default tmux socket.adapters/tmux.tsderives a private socket from the state root (UMBEL_TMUX_SOCKEToverrides) and every invocation carries-L. The default socket is shared with the user's own sessions and every other agent, so anything reaping that server — a straytmux kill-server, a user tidying up, another agent's cleanup — takes the whole fleet with it, and does it silently: a vanished session leaves no pane and no log, indistinguishable from a worker that died on its own. That exact bug cost three agents four runs to find. Never add a baretmuxcall; go through the adapter or it lands on the default socket and undoes this. A worker's environment never travels on a command line (umbel#93,docs/worker-env-93.md).new-session -e K=Vput every value on tmux's argv, wherepsshowed it for the server's whole life, and a provider key leaked that way. spawn loads the environment into a tmux buffer from stdin;hooks/launch.shreads it, deletes it, clears what the pane inherited and runs the worker. Every tmux client runs with a minimal environment (tmuxClientEnv), because the server keeps its first client's environment and hands it to every pane. A worker inherits only the allowlist incore/worker-env.tsplus the configuration its provider names ininheritEnv; anything else is passed with--env, a secret by name (--env NAME,{fromEnv}). Never add an argv path for env values, and never widen the allowlist with a name that can hold a secret. A provider names its configuration variables one by one, never a whole vendor prefix:CLAUDE_*also holds the markers a host Claude Code session sets for its children, and an inheritedCLAUDE_CODE_CHILD_SESSIONturned transcript saving off in every claude worker, so no answer could be read. - Files as IPC, JSONL as truth. Hook events are file touches;
chokidaris the event bus. Agent output is read from the provider's transcript file (location captured per-session from the Stop/AfterAgent hook payload), NEVER fromcapture-pane(which is for watching, not parsing). - Throw typed errors, catch at face boundary. No
Result<T,E>library. DiscriminatedErrorsubclasses insrc/core/errors.ts, caught and mapped to exit codes / MCP responses at the faces layer. - Single zod schema per concept. Argv parser, MCP tool schema, and YAML validation all share the same zod definitions. No three-times-defined types.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 3d ago Changed · +27 tokens per session dff5fbf52422
- 6d ago Changed · +2 lines · +624 tokens per session e84288f7a17e
- 8d ago Changed · +18 lines · +1,227 tokens per session b052cc20a7a4
- 1mo ago Changed · +9 lines · +526 tokens per session 1a3f4bc718e8
- 1mo ago Changed · +8 lines · +936 tokens per session 87284dc91b1d
- 1mo ago Changed · +5 tokens per session bca003cda0e5
- 2mo ago First seen · 129 lines · 3,169 tokens per session scan B 391faf4eba47
umbel CLAUDE.md is an instructions file published in the GitHub repository jahala/umbel (3 stars, last pushed 3d ago), licensed MIT. It adds 6,514 tokens to every session, about $0.0261 per session on Opus 5.5. A static security scan graded it B with 1 finding (reads agent configuration directories). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other instructions, from other repositories
vscode buildNext.instructions.md
Working notes and architecture documentation for the new esbuild-based build system in build/next. Use when making changes to the new build pipeline (transpile/bundle commands, NLS plugin, source-map handling, resource copying, or self-hosting watch tasks).
next.js AGENTS.md
AGENTS.md instructions for vercel/next.js, covering next.js development guide, codebase structure, monorepo overview, core package: packages/next and other important packages.
vscode oss-third-party-notices.instructions.md
Instructions for microsoft/vscode, covering vs code oss third-party-notices pipeline, architecture, pipeline flow in ci, cache eligibility and rollout and applying the notice (cutover).
langchain AGENTS.md
AGENTS.md instructions for langchain-ai/langchain, covering global development guidelines for the langchain monorepo, corridor security analysis, project architecture and context, monorepo structure and development tools & commands.
vscode copilot-instructions.md
Copilot instructions for microsoft/vscode, covering vs code copilot instructions, project overview, root folders, core architecture (src/ folder) and built-in extensions (extensions/ folder).
deno copilot-instructions.md
Copilot instructions for denoland/deno, covering deno development guide for github copilot, network access, high level overview, key directories and key files to understand first.