Working Agreements
The always-on engineering contract. When the harness wrapper is installed
(Claude Code plugin or opencode plugin), this file is injected at the start of
every session (startup, /clear, and compaction); on a bare ~/.agents/skills
install, load it with the skill tool or read it directly from disk. It stays
small on purpose: the details live in stack-specific skills that load on
demand.
This contract states the default rules for the repo(s) it governs. A project
layer (project-level skill or AGENTS.md) may tighten them; if a rule
conflicts with an explicit user instruction, the user instruction wins.
Language
- Code in English with descriptive names:
getUserById, not getUsrById.
- Make code descriptive and readable on its own: names carry intent, so a
comment is the last resort, added only when the code cannot explain the
why on its own.
- JSDoc always in English, regardless of the surrounding prose; it is
API surface, not local note-taking.
- Inline comments in Spanish and only to explain why, never restate
the what the code already says.
- README and docs in English.
Security
- Never commit
.env files; keep secrets out of git via .gitignore and
provide .env.example as the template.
- Never operate on a database that is not the repo's local/Docker one. Dev or
staging credentials visible in
.env or config are read-only information:
running migrations or writing to those environments is off limits, even when
reachable.
- Never log: tokens, keys, passwords, decrypted config, or sensitive request
bodies.
- Joi validation schemas are the source of truth for env vars, validation, and
defaults; validate environment config at startup.
- Sensitive config may be encrypted at rest with AES-256-GCM (
CRYPT_KEY as a
base64 32-byte key). Never log decrypted values.
Architecture
- The default assumption is a microservices architecture with explicit
service boundaries; avoid unnecessary coupling. A project may override this
layer.
- Prefer the smallest simple solution that satisfies the requirement. Reviews
should push toward simplicity, not ceremony.
Package manager
- Determine the package manager from the project lockfile, never from
README or Dockerfiles.
- In a pnpm project never introduce
yarn.lock or package-lock.json.
Timestamps and logging
- All timestamps are UTC.
- Logs are written in English and never contain tokens, secrets, API keys,
passwords, or decrypted configuration.
Agent workflow
- Check
package.json and the lockfile before assuming tooling is available.
- Run the project's lint command before committing.
- Verify tests according to the project's fork-specific test configuration.
- Run local build, lint, and unit tests as part of finishing an implementation;
do not ask for permission first, just report the result.
- Keep shared values (enums, seeds, config) synchronized across their sources.
- At each natural commit point (a checkpoint reached or the requirement
finished), pause and present the proposed commit message (following
commit-conventions) with a summary of the changes; the user approves the
message before anything is staged or committed. OpenCode and Claude Code
expose this flow as /commit and /push commands; Zed as the commit
skill.
- Never
git commit, git push, or stage changes without that explicit
approval; report the finished work and its state first.
- Synchronizing to external services (Postman sync, deploys, tickets) requires
an explicit ask each time.
- Never self-arm autonomous background loops/wakeups; only run them when the
user explicitly invokes the loop command.
- Never include
Co-Authored-By: trailers in commit messages.
Stack skills
Load the matching skill when the task touches its area (they are on-demand, so
they only cost context when triggered). Use the skill tool to load them; if
skills are not available in the current harness, read the SKILL.md files
directly from ~/.agents/skills/ or the plugin/marketplace skills directory
and apply them as if they were a direct project instruction:
commit-conventions — Conventional Commits with a leading gitmoji.
commit — the commit/push handshake: propose, present, and approve.
nestjs-code-style — TypeScript / NestJS style, naming, types, repositories.
database — versioned SQL migrations and ORM schema discipline.
typeorm — TypeORM entity, relation, repository, query, and configuration conventions.
typeorm-mssql — MSSQL-specific TypeORM conventions (identifiers, keys, filtered indexes).
typeorm-pg — Postgres-specific TypeORM conventions (identifiers, keys, partial indexes).
testing-standards — Jest, unit and integration test layout.
code-intelligence — codebase search and graph navigation (ripgrep, ast-grep, graphify).
Contract version
This contract is v0.5.11. When you need to know or report the version of the
standards in effect (for example, when collaborators on different installs
produce divergent commits), state it.
1---2name: working-agreements3description: Always-on engineering contract for this project - language rules, security, architecture, package manager, timestamps, logging, and agent workflow, plus an index of the stack skills. Load at the start of any coding, review, or commit task; load the relevant stack skill on demand.4---56# Working Agreements78The always-on engineering contract. When the harness wrapper is installed9(Claude Code plugin or opencode plugin), this file is injected at the start of10every session (startup, `/clear`, and compaction); on a bare `~/.agents/skills`11install, load it with the `skill` tool or read it directly from disk. It stays12small on purpose: the details live in stack-specific skills that load on13demand.1415This contract states the default rules for the repo(s) it governs. A project16layer (project-level skill or `AGENTS.md`) may tighten them; if a rule17conflicts with an explicit user instruction, the user instruction wins.1819## Language2021- Code in **English** with descriptive names: `getUserById`, not `getUsrById`.22- Make code **descriptive and readable on its own**: names carry intent, so a23 comment is the last resort, added only when the code cannot explain the24 **why** on its own.25- **JSDoc** always in **English**, regardless of the surrounding prose; it is26 API surface, not local note-taking.27- **Inline comments** in Spanish and only to explain **why**, never restate28 the **what** the code already says.29- README and docs in English.3031## Security3233- Never commit `.env` files; keep secrets out of git via `.gitignore` and34 provide `.env.example` as the template.35- Never operate on a database that is not the repo's local/Docker one. Dev or36 staging credentials visible in `.env` or config are read-only information:37 running migrations or writing to those environments is off limits, even when38 reachable.39- Never log: tokens, keys, passwords, decrypted config, or sensitive request40 bodies.41- Joi validation schemas are the source of truth for env vars, validation, and42 defaults; validate environment config at startup.43- Sensitive config may be encrypted at rest with AES-256-GCM (`CRYPT_KEY` as a44 base64 32-byte key). Never log decrypted values.4546## Architecture4748- The default assumption is a **microservices** architecture with explicit49 service boundaries; avoid unnecessary coupling. A project may override this50 layer.51- Prefer the smallest simple solution that satisfies the requirement. Reviews52 should push toward simplicity, not ceremony.5354## Package manager5556- Determine the package manager from the project **lockfile**, never from57 README or Dockerfiles.58- In a pnpm project never introduce `yarn.lock` or `package-lock.json`.5960## Timestamps and logging6162- All timestamps are UTC.63- Logs are written in English and never contain tokens, secrets, API keys,64 passwords, or decrypted configuration.6566## Agent workflow6768- Check `package.json` and the lockfile before assuming tooling is available.69- Run the project's lint command before committing.70- Verify tests according to the project's fork-specific test configuration.71- Run local build, lint, and unit tests as part of finishing an implementation;72 do not ask for permission first, just report the result.73- Keep shared values (enums, seeds, config) synchronized across their sources.74- At each natural commit point (a checkpoint reached or the requirement75 finished), pause and present the proposed commit message (following76 `commit-conventions`) with a summary of the changes; the user approves the77 message before anything is staged or committed. OpenCode and Claude Code78 expose this flow as `/commit` and `/push` commands; Zed as the `commit`79 skill.80- Never `git commit`, `git push`, or stage changes without that explicit81 approval; report the finished work and its state first.82- Synchronizing to external services (Postman sync, deploys, tickets) requires83 an explicit ask each time.84- Never self-arm autonomous background loops/wakeups; only run them when the85 user explicitly invokes the loop command.86- Never include `Co-Authored-By:` trailers in commit messages.8788## Stack skills8990Load the matching skill when the task touches its area (they are on-demand, so91they only cost context when triggered). Use the `skill` tool to load them; if92skills are not available in the current harness, read the `SKILL.md` files93directly from `~/.agents/skills/` or the plugin/marketplace skills directory94and apply them as if they were a direct project instruction:9596- `commit-conventions` — Conventional Commits with a leading gitmoji.97- `commit` — the commit/push handshake: propose, present, and approve.98- `nestjs-code-style` — TypeScript / NestJS style, naming, types, repositories.99- `database` — versioned SQL migrations and ORM schema discipline.100- `typeorm` — TypeORM entity, relation, repository, query, and configuration conventions.101- `typeorm-mssql` — MSSQL-specific TypeORM conventions (identifiers, keys, filtered indexes).102- `typeorm-pg` — Postgres-specific TypeORM conventions (identifiers, keys, partial indexes).103- `testing-standards` — Jest, unit and integration test layout.104- `code-intelligence` — codebase search and graph navigation (ripgrep, ast-grep, graphify).105106## Contract version107108This contract is **v0.5.11**. When you need to know or report the version of the109standards in effect (for example, when collaborators on different installs110produce divergent commits), state it.