Your coding agent, fluent in GrandNode.
The Agent Kit teaches AI coding agents how GrandNode is built — its architecture, conventions, security rules and review checklists — so your agent writes plugins and themes the way the core team would.
What is inside
- Skills, workflows, checklists and standards in
.ai/ - Works with any agent that reads
AGENTS.md: Claude Code, Codex, Cursor and others
Get started
Clone GrandNode and point your agent at the repository: github.com/grandnode/grandnode2.
A real session, step by step
An AI coding agent built a GrandNode plugin from scratch, reading only AGENTS.md and the .ai/ folder. Here is the whole session, step by step — the prompts exactly as typed, what the agent did, and what came out. Real time: 32 minutes 43 seconds, stumbles included.
-
1. Ask for a plan
00:24 → 04:16You ask
Read AGENTS.md and follow .ai/prompts/create-plugin.md. Build a widget plugin called Widgets.FreeShippingBar. It shows "Add $X more for free shipping" with a progress bar on the product page (widget zone productdetails_overview_bottom) and in the cart (order_summary_content_before). When the cart already qualifies, it shows "You've got free shipping". Use the store's existing ShippingSettings (FreeShippingOverXEnabled, FreeShippingOverXValue, FreeShippingOverXIncludingTax) and the current customer's cart subtotal. Show amounts in the customer's working currency. Render nothing when free shipping over X is disabled. No settings of its own except DisplayOrder. Do not change anything outside the new plugin and its tests. Before writing code, tell me which existing plugin you will use as the reference and list the files you will create.
The agent
Read AGENTS.md, which routed it to the create-plugin prompt, the widget-plugin skill, the plugin template and the testing guide. It picked Widgets.GoogleAnalytics as the reference, found that the cart zone sits inside a Vue block (so the view needs v-pre), and found the core rule for free shipping, so the bar would use exactly the same test as checkout.
A plan: 13 plugin files and 3 test files, before a single line of code.
-
2. Tests first
04:25 → 08:00You ask
Go ahead. Write the unit tests first (MSTest + Moq, in src/Tests/Grand.Modules.Tests/Plugins/FreeShippingBar/), run them and show they fail, then implement the plugin. Build the plugin and run only these tests.
The agent
Wrote 15 unit tests for the progress maths, the view component and the widget provider, then ran them before any plugin code existed.
Red, as expected: the tests fail because the plugin does not exist yet.
-
3. Implement until green
08:00 → 12:06The agent
Created the plugin (manifest, settings, install and uninstall, widget provider for both zones, view component, view with localized text and an accessible progress bar) and built it with 0 warnings. One stumble: a test used the wrong namespace for a pricing helper; the agent read the compiler error and fixed it.
15 of 15 tests pass.
-
4. Review its own work
12:08 → 21:14You ask
Review your change with .ai/prompts/review-change.md and the checklists it names. Fix what you find, run the tests again, and show me the final list of changed files.
The agent
Ran the review prompt and its checklists and found two real problems: no admin screen for the display order, and customers or groups that already have free shipping were ignored. It fixed both test-first — two new tests failed, then passed.
17 of 17 tests pass; only the new plugin and its tests changed.
-
5. Run it in a real store
21:14 → 31:11The agent
Built the whole solution, installed a fresh store with sample data, turned on free shipping over $100 and enabled the widget. It also noticed that most sample products don't need shipping, so the bar correctly hides for them.
In the cart: "Add $52.00 more for free shipping" at 48%, then "You've got free shipping" after one more item. No JavaScript errors.
The cart below the free-shipping threshold
The cart after reaching free shipping -
6. Clean up and package
31:11 → 32:43The agent
Uninstalled the plugin from the admin to prove it leaves nothing behind — no settings, no text resources — then built a release package and removed the test store.
A clean, installable plugin — the one you can download below, with its source and tests.