sabela AGENTS.md

Guidance for designing the tools exposed by Sabela’s client and product catalogue. It treats the model’s context as limited and favors a small set of reusable operations over many task-specific tools.

In plain words
What is it for?
Use it when adding or changing agent tools, deciding whether to extend an existing operation, and reviewing tool usage or response size.
Why use it?
It helps keep the agent’s tool list and returned data compact, consistent, and easier for models to use.

Instructions file for CodexOpenCode

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add instructions/datahaskell/sabela/agents-md
Clone the repo
git clone --depth 1 https://github.com/DataHaskell/sabela

Made for: Codex, OpenCode.

Per session 1,028 This file is loaded in full into every session.
When invoked 1,028 The same file — it is already loaded in full.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce invoked
Fable 5 $0.01028 $0.01028
Opus 5 $0.00514 $0.00514
Sonnet 5 $0.00206 $0.00206
Haiku 4.5 $0.00103 $0.00103

Measured 2d ago against content hash cfd538c92e20, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

sabela AGENTS.md scanned grade A with 0 findings 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 2d 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.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

AGENTS.md · 83 lines

How it starts

The opening of the file, as written. The whole thing — 83 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Agent tool surface

Guidance for anyone shaping the tools an agent sees. It applies to the siza client's tool list, the product chat catalogue, and the JSON those tools return. Repo-wide coding rules live in CLAUDE.md.

The principle

Parsimony, of the surface and of the returned message. Both spend the same budget: the model's context is the scarcest resource in the loop, and every tool name, parameter and returned field is drawn from it before any work happens.

The lens is the one in what category theory teaches us about dataframes: find the core abstraction, express operations as compositions over it, and resist the urge to add a new primitive for every new use. A surface with a few composable operations beats a surface with one operation per task, for the same reason a small algebra beats a catalogue of special cases.

Rules

  • Fold, do not accrete. Before adding a tool, ask which existing tool should grow a parameter instead. A new name costs every future caller the reading of it.

  • Audit call counts, but read them against the corpus.

    grep -ho '^- `[a-z_]*`' docs/discover/live/*_verbose.md | sort | uniq -c | sort -rn
    

    Zero calls is evidence ONLY when the recorded episodes exercise the capability. A corpus of write-one-cell tasks cannot condemn read_cell, execute_cell or delete_cell: driving a real notebook needs all three, and their absence measures the tasks, not the tools. Before folding a tool away, name the episode that needed it and did something worse instead.

  • A tool the harness itself uses is load-bearing at zero model calls. Deletion and re-execution complete the write algebra (insert, replace, delete, run); the recovery paths depend on them whether or not a model ever types the name.

  • A separate lookup is a lookup that will not happen. If answering one question reliably requires a second call, carry the answer on the first result. A search hit now carries a haddock synopsis, because a type alone does not say which of describeColumns, summarize and mean answers "summary statistics". The full documentation stays available on demand: carrying the synopsis and offering the detail are complements, not alternatives.

  • Check a tool is on the surface before concluding it is unwanted. describe_function recorded zero calls across every episode because the siza catalogue never offered it, not because any model declined it.

  • The return value is part of the surface. Return what the caller needs in order to decide, not everything that is known. A field nobody acts on is a field that displaced one they would have.

  • Measure the spend. Context cost per call is a design fact. Prefer a bounded synopsis to a full document, a ranked few to an exhaustive list, and say what was omitted rather than silently truncating.

  • Manage the context, not just the message. A tool surface is only half the budget; the conversation carrying it is the other half, and it grows without anyone deciding to grow it. Seeding each prompt with the whole prior transcript took a three-part task from 3K characters before its first prompt to 250K before its third, and the work done per prompt fell away with it (live_test52-54).

Read the full file on GitHub · 83 lines

Changes

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.

  1. 2d ago First seen · 83 lines · 1,028 tokens per session scan A cfd538c92e20

Subscribe to this mod's changes

sabela AGENTS.md is an instructions file published in the GitHub repository DataHaskell/sabela (114 stars, last pushed 9d ago), licensed MIT. It adds 1,028 tokens to every session, about $0.0051 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other instructions, from other repositories

codex AGENTS.md

AGENTS.md instructions for openai/codex, covering rust/codex-rs, the codex-core crate, code review rules, crate api surface and model visible context.

openai/codex · 5,182 tokens

buildNext

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).

microsoft/vscode · 6,785 tokens

next.js AGENTS.md

Instructions for vercel/next.js, covering next.js development guide, codebase structure, monorepo overview, core package: packages/next and other important packages.

vercel/next.js · 7,296 tokens

vscode oss-third-party-notices.instructions.md

Instructions for microsoft/vscode, covering vs code oss third-party-notices pipeline, architecture, pipeline flow in ci, applying the notice (cutover) and fallback chain (never fail the build).

microsoft/vscode · 5,001 tokens

spec-kit AGENTS.md

Instructions for github/spec-kit, covering agents.md, about spec kit and specify, quickstart — add a new integration in 5 steps, integration architecture and integrationmanifest — file tracking.

github/spec-kit · 7,040 tokens

langchain 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.

langchain-ai/langchain · 4,345 tokens