plugins/lisa-harper-fabric-cursor/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.documentation
Onboard a user to the project via its LLM Wiki. Interviews the user about themselves in relation to the project, captures that to project-scoped memory only, then gives a guided tour of what the project is and sample questions they can ask. Use when someone is new to the project or asks to be onboarded. Read-mostly — it does not open PRs or write PII into the wiki.
documentation
Migrate an existing, hand-rolled wiki implementation onto the lisa-wiki kernel — phased and compatibility-first, with a strict no-loss guarantee. Use when adopting lisa-wiki in a repo that already has its own wiki/, ingest skills, docs, or roles. Renaming things into the canonical shape is fine; losing functionality or data is not. Ends by running /doctor.
development
Health-check the LLM Wiki. Reports orphan pages, contradictions, stale claims, broken internal links, missing index/log coverage, structure-manifest violations, and secret/tenant leaks. Use periodically or before hardening a wiki. Read-only — it reports findings, it does not fix them.
testing
Ingest source material into the LLM Wiki. With an argument (URL, file path, or prompt) it ingests that one source; with no argument it runs a full ingest across every enabled non-external-write source. Routes to the right connector, then runs the ordered pipeline (source note → synthesis → index → log → verify → state → commit/PR). Use whenever new knowledge should enter the wiki.