AGENTS.md@plugins/amber-notes · git:20261013.b08ba54 · 2026-10-13 · sha256 d1f4075e7f9c4636
AGENTS.md@plugins/amber-notes git:20261013.b08ba54A
Immutable. This exact content never changes and is served at /api/v1/blob/d1f4075e7f9c4636.
<!-- Generated from supabase/functions/mcp/page_guide.ts by scripts/page-evals/build-skill.ts. Don't edit. -->
# Pinto Notes apps (for AGENTS.md)
Paste this into a project's AGENTS.md (Codex, Cursor and other agents read it) when you use the Pinto Notes MCP server (https://mcp.ambernotes.app) there. The server already teaches all of this through its instructions and every new app's README.md; this keeps it in front of agents that skim server instructions.
A folder ending in .app is the note's app, a small React project with its data in data.json; read its README.md first (an older app can be a single index.html: change it the same way). Its docs/ folder is that app's memory: read docs/ first, and keep it current (data shape, decisions and why, known gaps) whenever you change the app. Every feature you add gets a test in tests/ like the starter's (do what the person does, check what they see and what was saved); never weaken, skip or delete a test to make it pass: fix the app instead. Tests run on every save, and a version that fails isn't shown to the person.
The default look every app starts with, amber-base.css (the real file; override any rule, or opt out with `<meta name="amber-base" content="none">`):
```css
/* amber-base.css, version 1 (Amber Notes). The default stylesheet every note's app gets.
It is loaded before the app's own styles, inside the cascade layer "amber-base", so any style the
app writes wins over it, whatever its specificity. There is nothing else: no other styles are
added to an app, and no rule here is marked important.
The colours and sizes are variables from amber-tokens.css (loaded first, layer "amber-tokens"),
already switched for light and dark. To style everything yourself:
<meta name="amber-base" content="none"> keeps amber-tokens.css, drops this file. */
@layer amber-tokens, amber-base;
@layer amber-base {
/* Page: the note's background, the system font at the reader's text size (iPhone: Dynamic Type,
so rem follows it; Mac: 14px). */
html { font: var(--amber-root-font); -webkit-text-size-adjust: 100%; color-scheme: light dark; }
body { margin: 0; font-size: 1rem; line-height: 1.35; background: var(--amber-bg); color: var(--amber-text); font-family: var(--amber-font); }
/* Never wider than the note: something too wide is clipped, not panned to. */
html, body { overflow-x: clip; }
:where(img, video, canvas, svg, iframe, pre) { max-width: 100%; }
/* Fields: every input visible as a field, in both themes. */
:where(input:not([type=checkbox], [type=radio], [type=range], [type=color], [type=file], [type=hidden]), select, textarea) {
background: var(--amber-field); color: var(--amber-text); border: 1px solid var(--amber-field-border);
border-radius: var(--amber-radius-small); font: inherit; padding: 6px 10px;
}
:where(input, select, textarea, button, a):focus-visible { outline: 2px solid var(--amber-accent); outline-offset: 1px; }
:where(input[type=checkbox], input[type=radio], input[type=range], progress) { accent-color: var(--amber-accent); }
/* Buttons: the app's font; the rest is up to the app. */
:where(button) { font: inherit; color: inherit; }
/* Links and lines. */
:where(a) { color: var(--amber-accent-text); }
:where(hr) { border: 0; border-top: 1px solid var(--amber-separator); margin: 16px 0; }
}
```