AGENTS.md · git:20261020.5abca15 · 2026-10-20 · sha256 888d6a52d6c78340
AGENTS.md git:20261020.5abca15A
Immutable. This exact content never changes and is served at /api/v1/blob/888d6a52d6c78340.
# Agent conventions (Codex) - car-rental-skills Read before changing anything. Keep this file and `CLAUDE.md` aligned. ## Versioning - Single source of truth: `.claude-plugin/plugin.json`, `.claude-plugin/marketplace.json`, `.codex-plugin/plugin.json`, `.agents/plugins/marketplace.json`. Name, version, author, license, homepage and the bundle description stay identical across them. - `.codex-marketplace/car-rental-skills/` is generated. Never edit it by hand: change the root files, then run `python3 scripts/sync_codex_marketplace.py`. - Default bump is PATCH for every shippable commit. MINOR or MAJOR only when the owner asks. - After a bump: `git tag -a vX.Y.Z -m "..."`, push the tag, then `gh release create vX.Y.Z --title "vX.Y.Z" --notes "..." --latest` (the README badge reads the Releases API, not tags). ## Commits - Author must be Sergey: `git commit --author="Sergey Bulaev <s@bulaev.org>"`. - Run every check in "Validation" before pushing. ## Skill bundle invariants - **Exactly 8 skills.** The count is stated in the plugin manifests, README, root `SKILL.md`, this file and `CLAUDE.md`; change all of them together. - `description:` target <= 400 chars, hard <= 510, keyword-rich, a "Not for X (use Y)" sentinel when skills overlap. **No em dashes or en dashes** in any `description:`. - Skill names are public surface: a rename updates manifests, README table, root `SKILL.md` and every cross-reference. ## Shared references - `references/catalog-data.md`: the market data contract (tools, connector or client, published rates only, sample size and date). Skills cite it instead of repeating it. - `references/voice-rules.md`: the enumerated banned list for customer copy. - `references/legal-guardrails.md`: contract and insurance guardrails. - `references/untrusted-content.md`: data-is-not-instructions. Every skill that reads someone else's text, or calls `get_company`, `search_companies` or `search_vehicles`, carries a `## Untrusted content` section citing it; `scripts/check_untrusted_rule.py` enforces it through its `REQUIRED` set. ## Market data - `lib/carrentallist_client.py` is standard library only and talks to `https://mcp.carrentallist.com/mcp`. Keep `TOOLS` in sync with the server: `python3 scripts/check_tools.py --live`. - Never write a market price into a skill or reference as a fact. Examples use the "median $X over N cars, data as of <date>" shape. ## Validation ```bash python3 scripts/check_no_secrets.py python3 scripts/check_frontmatter.py python3 scripts/check_markdown_references.py python3 scripts/check_untrusted_rule.py python3 scripts/check_text_encoding.py python3 scripts/check_tools.py --live python3 scripts/sync_codex_marketplace.py grep -nE '^description:' SKILL.md skills/*/SKILL.md | grep -E '—|–' # must be empty ```