Open Source npm Package

Teach your agent
your taste

Your AI agent keeps making the same design mistakes. ECHO captures what you hate as structured rules, builds a taste profile, and exports it as a system prompt block. Persistent visual memory for AI style preferences.

npm install useechoui copy

The feedback loop, fixed

Right now the loop is broken. You reject a change, explain why in chat, the agent forgets next session, makes the same mistake again. ECHO turns that explanation into a permanent rule.

01
Spot it
Click the element. Or don't. Both work.
02
Say it
"Too much padding." Type what's wrong.
03
Save it
ECHO parses it into a typed rule with context.
04
Ship it
Export. Paste into system prompt. Done.

Try it

Click elements in the simulated app on the left. Add complaints in the panel on the right. Watch the taste profile and system prompt build in real-time.

Click elements to add feedback
acme.io
FeaturesPricing

Deploy at the speed of thought

The all-in-one platform for modern teams to ship faster and break less.

Analytics

Real-time insights into your deployment pipeline.

Monitoring

Alerts and dashboards for every service.

ECHO 0 rules

One component

Drop it next to your app. Press Alt+E to toggle. Click elements. Describe what's wrong. Your rules persist in localStorage across sessions. Export whenever you're ready.

<Echo />

// Add it alongside your app.
function App() {
  return (
    <>
      <YourApp />
      <Echo />
    </>
  )
}

Eight categories

Every rule gets tagged with a category. The export groups them so your agent can scan by domain. Spacing, color, typography, layout, components, interaction, content, and general preferences.

⊞ Spacing

Padding, margin, gap. "Too much whitespace." "Cards need more breathing room."

◐ Color

Palette, contrast, backgrounds. "Wrong shade of blue." "Never use pure black."

Aa Typography

Font, size, weight. "Headings too heavy." "Prefer 14px body text."

▦ Layout

Flex, grid, positioning. "Always center hero content." "Sidebar should be fixed."

◧ Components

Patterns, structure. "Never use modals for settings." "Prefer inline editing."

↗ Interaction

Hover, focus, motion. "Prefer subtle transitions." "Avoid bouncy animations."

¶ Content

Copy, tone, labels. "Keep button text to 2 words." "Never say 'Click here'."

● General

Big picture preferences. "Minimal over decorative." "Function over form."

The export is the product

One click copies a structured block you paste into your Cursor rules, CLAUDE.md, Copilot instructions, or any system prompt. Rules are grouped by category, weighted by how often you've reinforced them, and typed (never, always, prefer, avoid).

<design_preferences>

## Spacing
- **AVOID:** too much padding on cards (not `12px`)
- **PREFER:** tight spacing, 8px gaps between elements

## Color
- **NEVER:** use pure black for text (use `#1a1a1a`) [x3]
- **PREFER:** muted borders, not high-contrast

## Typography
- **ALWAYS:** use 14px for body text, not 16px
- **AVOID:** bold weight on paragraph text

## Components
- **NEVER:** use modals for settings pages
- **PREFER:** inline editing over modal forms

</design_preferences>

Programmatic API

The useEcho hook gives you full control. Add rules from code, export profiles, import shared team preferences.

import { useEcho } from 'echoui'

const {
  rules,
  addRule,
  exportSystemPrompt,
  importJSON,
} = useEcho()

// Add a rule programmatically
addRule('spacing', 'avoid', 'Too much padding on cards', {
  badValue: '24px',
  goodValue: '12px',
})

// Get system prompt block
const prompt = exportSystemPrompt()

// Share team preferences
importJSON(teamProfileJSON)

Smart parsing

Type naturally. ECHO figures out the rule type from how you phrase it. "Never use modals" becomes a NEVER rule. "Too much padding" becomes AVOID. "Prefer 14px body text" becomes PREFER. Start with "always", "never", "prefer", "avoid", or "use" for explicit typing. Everything else gets classified automatically.

Duplicate detection is built in. Say "too much padding" three times and ECHO reinforces the existing rule (weight goes to x3) instead of creating duplicates. Heavily weighted rules appear first in the export.

Props

PropDefaultDescription
projectdocument.titleProject name for the profile
shortcut'Alt+E'Keyboard toggle
position'right'Panel: right or left
panelWidth340Panel width in px
storageKey'echo-profile'localStorage key
onRuleCallback when rule is added
onExportCallback when profile exported

Disclaimer

Experimental, open-source software. Provided as-is with no warranties. DYOR. Use at your own risk. The author assumes zero liability.