plugins/lisa-harper-fabric-agy/skills/harper-component-model/SKILL.md
This skill should be used when reasoning about how a Harper (formerly HarperDB) Fabric application is structured — what a component, application, extension, or plugin is, where code and assets belong, and how the pieces depend on each other. Use it before adding a new capability, wiring an extension, deciding where a file should live, or explaining the runtime to someone. Pairs with harper-config-yaml, harper-resources, harper-schema-graphql, and harper-build-and-deploy.
npx skillsauth add codyswanngt/lisa harper-component-modelInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Harper (formerly HarperDB; the product and company now at harper.fast) is an open-source Node.js platform that fuses database, cache, application logic, and messaging into a single in-memory process. Fabric is Harper's distributed deploy network: you develop locally, then deploy the same component to Fabric.
Everything you build is a component. Understanding the component hierarchy is the prerequisite for every other Harper decision — config, resources, schema, and deploy all hang off it.
Harper organizes functionality into three tiers, top to bottom:
handleApplication(scope)
method and always runs on worker threads. The deprecated Extension API used
start, handleFile, handleDirectory, and setupDirectory instead.
handleApplication() cannot coexist with Extension API methods — defining
both throws. Prefer the Plugin API for any custom building block.An application is the component you ship. Extensions/plugins are the capabilities it consumes. Built-in extensions (
graphqlSchema,jsResource,rest,static, …) are provided by core; you only enable them inconfig.yaml. See [[harper-config-yaml]].
These ship with Harper and are enabled (not installed) via config.yaml:
graphqlSchema — define database tables/types from GraphQL schema files. See [[harper-schema-graphql]].jsResource — load custom JavaScript resources (resources.js). See [[harper-resources]].rest — auto-generate REST endpoints for exported resources/tables.static — serve static files (the web/** directory) over HTTP.roles — role-based access control from roles.yaml.loadEnv — load environment variables from .env.dataLoader — seed Harper tables from JSON/YAML.fastifyRoutes — custom Fastify route handlers.This project wraps Harper's native model with a fixed layout under harper-app/:
| Path | Role | Source or generated |
| --- | --- | --- |
| harper-app/config.yaml | Component config — which extensions are active | Source |
| harper-app/schema.graphql | Table/type definitions | Source |
| src/** (TypeScript) | Resources, browser modules, shared libs, scripts | Source |
| harper-app/resources.js | Loaded by jsResource | Generated — never edit; build from TS |
| harper-app/web/** | Served by static | Generated — never edit; build from TS |
The TypeScript under src/ is the source of truth. resources.js and web/**
are deploy artifacts produced by bun run build. Never hand-edit them — change
the matching TypeScript and rebuild. See [[harper-build-and-deploy]].
config.yaml. Don't ship a
client-side workaround for missing backend behavior — make the Harper change.pluginModule), not application code.web/** (generated from src/ UI code), served
by the static extension.config.yaml,
schema.graphql, resources.js, and web/** at the component root that Fabric
packages. If your change touches that surface, build before packaging.tools
--- name: harper-realtime description: This skill should be used when adding or troubleshooting Harper (HarperDB/Fabric) real-time behavior: MQTT topics, WebSocket resource subscriptions, resource publish/subscribe handlers, SSE-style streaming routes, and local subscriber verification. Pairs with harper-resources, harper-config-yaml, harper-schema-graphql, and harper-build-and-deploy. --- # Harper Realtime ## Overview Harper exposes live data through the same Resource model used for REST and
tools
--- name: harper-realtime description: This skill should be used when adding or troubleshooting Harper (HarperDB/Fabric) real-time behavior: MQTT topics, WebSocket resource subscriptions, resource publish/subscribe handlers, SSE-style streaming routes, and local subscriber verification. Pairs with harper-resources, harper-config-yaml, harper-schema-graphql, and harper-build-and-deploy. --- # Harper Realtime ## Overview Harper exposes live data through the same Resource model used for REST and
tools
--- name: harper-realtime description: This skill should be used when adding or troubleshooting Harper (HarperDB/Fabric) real-time behavior: MQTT topics, WebSocket resource subscriptions, resource publish/subscribe handlers, SSE-style streaming routes, and local subscriber verification. Pairs with harper-resources, harper-config-yaml, harper-schema-graphql, and harper-build-and-deploy. --- # Harper Realtime ## Overview Harper exposes live data through the same Resource model used for REST and
tools
--- name: harper-realtime description: This skill should be used when adding or troubleshooting Harper (HarperDB/Fabric) real-time behavior: MQTT topics, WebSocket resource subscriptions, resource publish/subscribe handlers, SSE-style streaming routes, and local subscriber verification. Pairs with harper-resources, harper-config-yaml, harper-schema-graphql, and harper-build-and-deploy. --- # Harper Realtime ## Overview Harper exposes live data through the same Resource model used for REST and