# Which harnesses natively read a `.agents/rules/` directory **Status:** research / unverified first-hand (web search only, not confirmed against a live install) **Date:** 2026-07-02 **Trigger:** user has a personal `~/.agents/{skills,commands,rules}/` tree (flat `.md` files under `rules/`) and asked which of harnessed's target harnesses (`claude`, `omp`, `opencode`, `antigravity`, `codex`) would pick up `~/.agents/rules/` natively, independent of harnessed's own `.claude/rules/` recipe-fan mechanism (`schema.py` `rules:` field / T10). **Method:** WebSearch against each vendor's current docs (2026-07-02) — training-data knowledge is stale here (fast-moving space, six months past this assistant's cutoff), so this was verified live rather than answered from memory. Treat as a strong current signal, not gospel — recheck against `--help`/official docs before depending on it for a real decision. ## Result | Harness | Native `.agents/rules/` support? | What it actually reads | |---|---|---| | **antigravity (agy)** | **Yes — directly.** Docs describe "workspace rules" living at `.agents/rules/*.md` (e.g. `.agents/rules/code-style.md`) — flat markdown files, no wrapper directory needed. `agy inspect` shows exactly what got loaded. | `.agents/rules/`, `AGENTS.md`, other `.agents/` content | | **claude** (Claude Code) | No — has its own, separate convention: `.claude/rules/*.md` (project-level; a recent fix for symlinked-path loading confirms this is a live, maintained feature, not legacy). This is what harnessed's `rules:` recipe field (T10) already targets. | `.claude/rules/`, `CLAUDE.md` | | **codex** (OpenAI) | No — single-file hierarchy per directory: `AGENTS.override.md` → `AGENTS.md` → `TEAM_GUIDE.md` → `.agents.md`, plus a global `~/.codex/AGENTS.md`. `~/.codex/rules` exists but is for **execpolicy** (command allow/block/prompt policy), not markdown instruction content — easy to confuse with a "rules dir" but it's a different subsystem. | `AGENTS.md` hierarchy, capped at 32 KiB total | | **opencode** (sst) | Not by default, but configurable — `opencode.json`'s `instructions:` array accepts arbitrary glob paths (their own example globs `.cursor/rules/*.md`), so it could be pointed at `.agents/rules/*.md` explicitly. | `AGENTS.md` natively; anything else via explicit `instructions:` config | | **omp** (Oh My Pi) | No evidence found — has its own proprietary "TTSR" (time-traveling rules) mechanism plus `.omp/settings.yml` / `~/.omp/agent/config.yml`; nothing in current docs ties it to `.agents/rules`. | omp-native config only | ## The interesting part **`antigravity` is the one harness that matches the user's exact directory shape as-is** — flat `.md` files directly under `.agents/rules/`, no per-rule wrapper directory. Contrast with harnessed's own `.claude/rules/` fan-out (`synclinks.py`), which requires **one directory per rule** (`src.is_dir()` check) — a flat file like `~/.agents/rules/coding-principles.md` would need wrapping into `rules/coding-principles/coding-principles.md` to fan through that path. Getting picked up by `antigravity` natively sidesteps that wrapper requirement entirely, but only for that one harness. ## Open questions / not verified - **Workspace vs. home-dir scope for antigravity.** The docs call it "workspace rules," which usually means project-root `.agents/rules/`, not necessarily a *global* home-directory default the way `~/.claude/CLAUDE.md` is for Claude Code. Unconfirmed whether `agy` also checks `~/.agents/rules/` as a global fallback. Verify with `agy inspect` once a real `antigravity` stack is running (the agent + Dockerfile now exist on `feat/agent-antigravity`, see `catalog/agents/antigravity/`). - **No first-hand confirmation for any of these** — this is search-engine-verified against vendor docs, not tested against a live container. Re-verify before it's load-bearing for a real recipe decision. ## See also - `docs/research/home-folder-antigravity-requirements.md` — antigravity's history/session storage layout (a different question: state persistence, not instruction-loading). - `catalog/agents/antigravity/agent.yaml`, `catalog/base/Dockerfile.harnessed-antigravity` — the actual antigravity harness image (fixed 2026-07-02, `feat/agent-antigravity`). - `src/harnessed/synclinks.py` — harnessed's own `.claude/rules/` fan-out mechanism (directory-only entries), the alternative path if you want `claude`/`omp`/`opencode` to see your rules too (they all consume the same shared `.claude/` profile per `schema.py`'s harness comment block).