Félix Malfait ab0108df0d docs: rightsize CLAUDE.md to gotchas, add AGENTS.md symlink (#24362)
**224 lines → 49**, restructured along the [Claude 5 context-engineering
guidance](https://claude.com/blog/the-new-rules-of-context-engineering-for-claude-5-generation-models):
keep the file lightweight, spend it on what a session won't get right on
its own.

Two load-bearing sections:

## House rules — standing conventions that contradict model defaults

Models write JSDoc, interfaces, enums, and hand-rolled guards
unprompted; these are the rules that push back, one line each:
short-form `//` comments only (WHY, never WHAT), types over interfaces,
string literals over enums, no `any`, named exports only, functional
components, event handlers over `useEffect`, no abbreviations,
`twenty-shared` guards before hand-rolled ones, Lingui/Linaria, test
behavior not implementation. All carried over from the old file — cut in
the first revision of this PR, restored on review: "match surrounding
code" is not sufficient for counter-default preferences, especially in
new files.

## Gotchas — what a session cannot discover from the code

- `twenty-shared/dist` is per-branch state → rebuild with
`--skip-nx-cache` before trusting a failure.
- Nx cache can serve a stale typecheck pass → verify with `tsgo`
directly.
- **Never commit lingui-regenerated catalogs unless translations are the
task** — `extract`/`compile` churn thousands of
`.po`/`locales/generated` lines as a side effect of touching any `msg`
string.
- Commit-attribution CI check (`@anthropic.com` trailers rejected).
- Upgrade-command rules incl. the silent-skip: a timestamp sorting
before an already-applied command never runs.

## What was cut

Tech-stack prose, the package tree, command sprawl, architecture
descriptions — discoverable in seconds. The dead Context7 instruction.
The style sections' *long forms* — each survives as one line above.

## Open question: `.cursor/rules/`

The team no longer uses Cursor, so this PR removes CLAUDE.md's
*dependence* on those files (everything load-bearing is now inline) and
keeps a single neutral mention. What to do with the 16 `.mdc` files
themselves — move to `docs/guidelines/`, keep for Cursor-using community
contributors, or delete — is left as a separate decision.

## AGENTS.md

Added as a **symlink** to CLAUDE.md so Codex/OpenCode/other agents read
the same instructions with no duplicate to drift. The repo's sub-app
packages currently ship byte-identical CLAUDE.md/AGENTS.md *copies* —
exactly the drift this avoids. Those pairs are left as real files
because they feed npm-published scaffolds (`create-twenty-app`) where
symlinks don't survive every checkout. Caveat: on a Windows checkout
without `core.symlinks`, AGENTS.md materializes as a one-line text file
containing `CLAUDE.md` — degraded but self-describing.
2026-08-19 19:26:40 +02:00

Twenty logo

The #1 Open-Source CRM

Website · Documentation · Roadmap · Discord · Figma

Twenty banner


Why Twenty

Twenty gives technical teams the building blocks for a custom CRM that meets complex business needs and quickly adapts as the business evolves. Twenty is the CRM you build, ship, and version like the rest of your stack.

Learn more about why we built Twenty


Installation

Cloud

The fastest way to get started. Sign up at twenty.com and spin up a workspace in under a minute, with no infrastructure to manage and always up to date.

Build an app

Scaffold a new app with the Twenty CLI:

npx create-twenty-app my-app

Define objects, fields, and views as code:

import { defineObject, FieldType } from 'twenty-sdk/define';

export default defineObject({
  nameSingular: 'deal',
  namePlural: 'deals',
  labelSingular: 'Deal',
  labelPlural: 'Deals',
  fields: [
    { name: 'name', label: 'Name', type: FieldType.TEXT },
    { name: 'amount', label: 'Amount', type: FieldType.CURRENCY },
    { name: 'closeDate', label: 'Close Date', type: FieldType.DATE_TIME },
  ],
});

Then ship it to your workspace:

npx twenty app:publish --private

See the app development guide for objects, views, agents, and logic functions.

Self-hosting

Run Twenty on your own infrastructure with Docker Compose, or contribute locally via the local setup guide.



Everything you need

Twenty gives you the building blocks of a modern CRM (objects, views, workflows, and agents) and lets you extend them as code. Here's a tour of what's in the box.

Want to go deeper? Read the User Guide for product walkthroughs, or the Documentation for developer reference.

Create your apps

Learn more about apps in doc

Stay on top with version control

Learn more about version control in doc

All the tools you need to build anything

Learn more about primitives in doc

Customize your layouts

Learn more about layouts in doc

AI agents and chats

Learn more about AI in doc

Plus all the tools of a good CRM

Learn more about CRM features in doc


Stack

Thanks

Greptile      Sentry      Crowdin

Thanks to these amazing services that we use and recommend for code review (Greptile), catching bugs (Sentry) and translating (Crowdin).

Join the Community

Star the repo · Discord · Feature requests · Releases · X · LinkedIn · Crowdin · Contribute

S
Description
No description provided
Readme AGPL-3.0
2.5 GiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 81.5%
MDX 15.8%
JavaScript 2.3%
Python 0.2%