RuleStack

Configs

Stacks

Compare

Diff

RuleStack

Configs

Stacks

Compare

Diff

Read API

RuleStack

Configs

Stacks

Compare

Diff

Read API

Configs/AGENTS.md/n8n-io/n8n

AGENTS.md

packages/nodes-base/AGENTS.md
AGENTS.md

Quality

89/100

Scores the file, not the repository.

Length

670 words

23 headings · 2 code blocks

Repository

199k

— · pushed 0 days ago

Last changed

3 days ago

First indexed 3 days ago.
n8n-io/n8n/packages/nodes-base/AGENTS.mdRawGitHub
1# AGENTS.md
2 
3Guidance for node development in the nodes-base package.
4 
5## Node Structure
6 
7Every node implements the `INodeType` interface with:
8- `description: INodeTypeDescription` - Node metadata and UI configuration
9- `execute?()` - For programmatic nodes
10- `poll?()` - For polling triggers (set `polling: true` in description)
11- `trigger?()` - For generic triggers
12- `webhook?()` - For webhook triggers
13- `webhookMethods?` - Webhook lifecycle (checkExists, create, delete)
14- `methods?` - loadOptions, listSearch, credentialTest, resourceMapping
15 
16## Node Types
17 
18### Programmatic Nodes
19Use `execute` function for custom logic. Example: `nodes/Discord/v2/DiscordV2.node.ts`
20 
21### Declarative Nodes
22Use `requestDefaults` and routing configuration instead of `execute`. Example: `nodes/Okta/Okta.node.ts`
23 
24### Trigger Nodes
25- **Webhook triggers**: Implement `webhook` and `webhookMethods` (checkExists, create, delete). Example: `nodes/Microsoft/Teams/MicrosoftTeamsTrigger.node.ts`
26- **Polling triggers**: Set `polling: true` and implement `poll`. Use `getWorkflowStaticData('node')` to persist state. Example: `nodes/Google/Gmail/GmailTrigger.node.ts`
27- **Generic triggers**: Implement `trigger` function. Example: `nodes/MQTT/MqttTrigger.node.ts`
28 
29## Node Parameters
30 
31Common parameter types:
32- `string` - Text input
33- `options` - Dropdown (static or dynamic via `loadOptionsMethod`)
34- `resourceLocator` - Select by list, ID, or URL
35- `collection` - Key-value pairs
36- `fixedCollection` - Structured collections
37 
38Use `displayOptions` to show/hide fields based on other parameters. Use `noDataExpression: true` for resource/operation selectors.
39 
40## Versioning
41 
42- **Light versioning**: Use version arrays in description: `version: [3, 3.1, 3.2]`
43- **Full versioning**: Use `VersionedNodeType` class with separate version implementations. Example: `nodes/Set/Set.node.ts`
44 
45## Credentials
46 
47Credentials are defined in `credentials/` directory and implement `ICredentialType`:
48- `name` - Internal identifier
49- `displayName` - Human-readable name
50- `properties` - Credential fields
51- `authenticate` - Authentication configuration (generic or custom function)
52- `test` - Credential test request
53 
54Nodes can test credentials via `methods.credentialTest`.
55 
56## Testing
57 
58### Unit Tests
59- Use `vitest-mock-extended` for mocking interfaces
60- Use `nock` for HTTP mocking
61- Mock all external dependencies
62- Test happy paths, error handling, edge cases, and binary data
63 
64### Workflow Tests
65- Use `NodeTestHarness` with JSON workflow definitions
66- Mock external APIs with nock
67- Use `pnpm test` for running tests. Example: `cd packages/nodes-base/ && pnpm test TestFileName`
68 
69## Common Development Tasks
70 
71### Creating a New Node
721. Create directory: `nodes/YourService/`
732. Create `YourService.node.ts` implementing `INodeType`
743. Add icon SVG files in node directory
754. Define credentials in `credentials/` if needed
765. Write tests following testing guidelines
776. Register in `package.json` nodes array if needed
78 
79### Adding Dynamic Options
80Add `loadOptionsMethod` to parameter's `typeOptions` and implement method in `methods.loadOptions`.
81 
82### Adding Resource Locator
83Change parameter type to `'resourceLocator'`, define modes (list, id, url), add `searchListMethod` for list mode, add `extractValue` regex for URL mode.
84 
85## Best Practices
86 
87### TypeScript
88- Never use `any` type - use proper types or `unknown`
89- Avoid type casting with `as` - use type guards instead
90- Define interfaces for API responses
91 
92### Error Handling
93- Use `NodeOperationError` for user-facing errors
94- Use `NodeApiError` for API-related errors
95- Support `continueOnFail` option when appropriate
96 
97### Security
98 
99User input is untrusted. In nodes it arrives mainly through
100`this.getNodeParameter(...)` (and incoming `item.json`), and a workflow author
101controls these values.
102 
103**Never use an untrusted value as a computed object key in an assignment.** A
104value such as `__proto__`, `constructor`, or `prototype` pollutes the prototype
105chain:
106 
107```ts
108// UNSAFE — `table`/`key` come from this.getNodeParameter(...)
109if (acc[table] === undefined) acc[table] = {};
110acc[table][key] = value;
111```
112 
113Route dynamic-key writes through the `n8n-workflow` helpers, or build the
114accumulator as a `Map` / `Object.create(null)`:
115 
116```ts
117import { setSafeObjectProperty, isSafeObjectProperty } from 'n8n-workflow';
118 
119if (isSafeObjectProperty(table) && acc[table] === undefined) {
120 setSafeObjectProperty(acc, table, {});
121}
122```
123 
124This only applies to dynamic-key **writes** (grouping/aggregating rows by a
125user-chosen column is the common case). Reads like `const x = obj[key]` are
126safe. Reference usage: `nodes/Google/GSuiteAdmin/GSuiteAdmin.node.ts`.
127 
128### Code Organization
129- Separate operation/field descriptions into separate files
130- Create reusable API request helpers in GenericFunctions
131- Use kebab-case for files, PascalCase for classes
132 
133### UI/UX
134- Use clear `displayName` and `description` fields
135- Set sensible default values
136- Use `displayOptions` to show/hide fields conditionally
137 
138## Example Nodes
139 
140- Declarative: `nodes/Okta/Okta.node.ts`
141- Programmatic: `nodes/Discord/v2/DiscordV2.node.ts`
142- Webhook Trigger: `nodes/Microsoft/Teams/MicrosoftTeamsTrigger.node.ts`
143- Polling Trigger: `nodes/Google/Gmail/GmailTrigger.node.ts`
144- Generic Trigger: `nodes/MQTT/MqttTrigger.node.ts`
145- Versioned: `nodes/Set/Set.node.ts`
146 

Commands it names

  • vitest-mock-extended
  • pnpm test

Sections

  • AGENTS.md
  • Node Structure
  • Node Types
  • Programmatic Nodes
  • Declarative Nodes
  • Trigger Nodes
  • Node Parameters
  • Versioning
  • Credentials
  • Testing
  • Unit Tests
  • Workflow Tests
  • Common Development Tasks
  • Creating a New Node
  • Adding Dynamic Options
  • Adding Resource Locator
  • Best Practices
  • TypeScript
  • Error Handling
  • Security
  • Code Organization
  • UI/UX
  • Example Nodes

What it covers

testcode-stylearchitecturetypestesting-strategysecurityuido-notagent-behaviour

Stack — with the evidence

typescript

(1.00)

langchain

(1.00)

vite

(1.00)

turborepo

(1.00)

eslint

(1.00)

biome

(1.00)

node

(0.95)

vitest

(0.95)

pnpm

(0.85)

supabase

(0.70)

postgres

(0.70)

pytest

(0.70)

ruff

(0.70)

javascript

(0.60)

monorepo

(0.60)

terraform

(0.60)

github-actions

(0.60)

python

(0.50)

Format

AGENTS.md

A plain-markdown README for coding agents, deliberately unopinionated: no frontmatter, no globs, no vendor keys. That minimalism is why it became the one file a dozen different agents will read, and why it carries the least per-file targeting power of any format here.

What the corpus says about it

Repository

Owner
n8n-io
Language
—
License
—
Archived
no

All configs in this repo

Also in n8n-io/n8n

Diff this repo’s formats

One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?

The other instruction files in this repository
RepositoryFormatStackCoversScoreChanged
n8n-io/n8n.agents/skills/AGENTS.md · 199kAGENTS.mdtypescriptlangchain+16setuparchagent-behaviour58/1003 days ago
n8n-io/n8n.github/CLAUDE.md · 199kCLAUDE.mdtypescriptlangchain+17styleagent-behaviour48/1003 days ago
n8n-io/n8nAGENTS.md · 199kAGENTS.mdtypescriptlangchain+16setupbuildtestlint-format+896/1003 days ago
n8n-io/n8npackages/@n8n/ai-workflow-builder.ee/AGENTS.md · 199kAGENTS.mdtypescriptlangchain+16agent-behaviour53/1003 days ago
n8n-io/n8npackages/@n8n/db/AGENTS.md · 199kAGENTS.mdtypescriptlangchain+16database39/1003 days ago
n8n-io/n8npackages/@n8n/engine/AGENTS.md · 199kAGENTS.mdtypescriptlangchain+16archdo-not59/1003 days ago
n8n-io/n8npackages/@n8n/instance-ai/CLAUDE.md · 199kCLAUDE.mdtypescriptlangchain+16buildteststyletesting-strategy+189/1003 days ago
n8n-io/n8npackages/cli/AGENTS.md · 199kAGENTS.mdtypescriptlangchain+16lint-format55/1003 days ago
n8n-io/n8npackages/cli/src/modules/n8n-packages/CLAUDE.md · 199kCLAUDE.mdtypescriptlangchain+16stylearchdependenciesmonorepo+269/1003 days ago
n8n-io/n8npackages/frontend/AGENTS.md · 199kAGENTS.mdtypescriptlangchain+16style40/1003 days ago
n8n-io/n8npackages/frontend/editor-ui/src/app/stores/workflowDocument/CLAUDE.md · 199kCLAUDE.mdtypescriptlangchain+16styleagent-behaviour58/1003 days ago
n8n-io/n8npackages/testing/playwright/AGENTS.md · 199kAGENTS.mdtypescriptlangchain+17setupbuildtestlint-format+896/1003 days ago
n8n-io/n8npackages/@n8n/agents/AGENTS.md · 199kAGENTS.mdtypescriptlangchain+16buildteststylearch+3100/1003 days ago
n8n-io/n8nscripts/instance-seeding/AGENTS.md · 199kAGENTS.mdtypescriptlangchain+16setupstyledo-not65/1003 days ago
Diff against .agents/skills/AGENTS.md Diff against .github/CLAUDE.md Diff against AGENTS.md Diff against packages/@n8n/ai-workflow-builder.ee/AGENTS.md Diff against packages/@n8n/db/AGENTS.md Diff against packages/@n8n/engine/AGENTS.md Diff against packages/@n8n/instance-ai/CLAUDE.md Diff against packages/cli/AGENTS.md Diff against packages/cli/src/modules/n8n-packages/CLAUDE.md Diff against packages/frontend/AGENTS.md Diff against packages/frontend/editor-ui/src/app/stores/workflowDocument/CLAUDE.md Diff against packages/testing/playwright/AGENTS.md Diff against packages/@n8n/agents/AGENTS.md Diff against scripts/instance-seeding/AGENTS.md

Similar configs

Same format, overlapping stack, ranked by quality.

Same format, overlapping stack, ranked by quality
RepositoryFormatStackCoversScoreChanged
TryGhost/Ghoste2e/AGENTS.md · 55kAGENTS.mdtypescriptjavascript+12setupteststylearch+2100/1003 days ago
elastic/elasticsearchx-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/AGENTS.md · 78kAGENTS.mdjavanode+4buildtestlint-formatstyle+2100/1003 days ago
mui/material-uiAGENTS.md · 99kAGENTS.mdtypescriptjavascript+13setupbuildtestlint-format+9100/1003 days ago
n8n-io/n8npackages/@n8n/agents/AGENTS.md · 199kAGENTS.mdtypescriptlangchain+16buildteststylearch+3100/1003 days ago
code-yeongyu/oh-my-openagentpackages/web/AGENTS.md · 67kAGENTS.mdtypescriptbun+10setupbuildtestlint-format+6100/1002 days ago
duckduckgo/content-scope-scriptsspecial-pages/AGENTS.md · 70AGENTS.mdtypescriptjavascript+5buildteststylearch+3100/1003 days ago
aaif-goose/gooseAGENTS.md · 52kAGENTS.mdrusttypescript+2setupbuildtestlint-format+6100/1003 days ago
elastic/elasticsearchx-pack/plugin/inference/AGENTS.md · 78kAGENTS.mdjavanode+4buildtestlint-formatstyle+3100/1003 days ago
RuleStack

Built by

Kynth Studio

Directory

Configs
Stacks
Compare formats
Diff two configs
Best AGENTS.md examples

Formats

AGENTS.md
CLAUDE.md
Cursor rules
Copilot instructions

Reference

Read API
Corpus health
Privacy Policy
Terms

RuleStack

RuleStack

Built by

Kynth Studio

Directory

Configs
Stacks
Compare formats
Diff two configs
Best AGENTS.md examples

Formats

AGENTS.md
CLAUDE.md
Cursor rules
Copilot instructions

Reference

Read API
Corpus health
Privacy Policy
Terms

RuleStack

RuleStack

Built by

Kynth Studio

Directory

Configs
Stacks
Compare formats
Diff two configs
Best AGENTS.md examples

Formats

AGENTS.md
CLAUDE.md
Cursor rules
Copilot instructions

Reference

Read API
Corpus health
Privacy Policy
Terms

RuleStack