Available

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. 1. Ask for a plan

    00:24 → 04:16

    You 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. 2. Tests first

    04:25 → 08:00

    You 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. 3. Implement until green

    08:00 → 12:06

    The 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. 4. Review its own work

    12:08 → 21:14

    You 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. 5. Run it in a real store

    21:14 → 31:11

    The 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 below the free-shipping threshold
    The cart after reaching free shipping
    The cart after reaching free shipping
  6. 6. Clean up and package

    31:11 → 32:43

    The 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.