plugins/lisa-harper-fabric-cursor/skills/harper-build-and-deploy/SKILL.md
This skill should be used when building, running locally, or deploying a Harper (HarperDB/Fabric) component — running harper dev/run, producing the generated resources.js and web/** from TypeScript via the project build, packaging the harper-app component, deploying to Harper Fabric, or handling deploy-time secrets. Use it for any change that affects the deployable surface or the dev loop. Pairs with harper-component-model, harper-config-yaml, and harper-resources.
npx skillsauth add codyswanngt/lisa harper-build-and-deployInstall 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.
The Harper lifecycle is: develop locally → build TypeScript into the deployable component → run/iterate → deploy to Fabric. This skill covers the CLI, the project's build step, and the deploy surface so a change is provably finished, not just compiling.
The CLI binary is harper (v5; older installs use harperdb). Key commands:
| Command | What it does |
| --- | --- |
| harper dev <path/to/app> | Dev mode: watches files, single-threaded, auto-restarts worker threads on change, with console logging. The fast iteration loop. Does not restart the main thread. |
| harper run <path/to/app> | Run an app from any directory. Use when you need the main thread to (re)start; manage start/stop yourself. |
| harper start / stop / restart | Background (daemon) lifecycle. |
| harper status | Harper and clustering status. |
| harper get_components | List installed components. |
In this project, dev typically runs against the component dir, e.g.
harper dev harper-app (use the project's documented run command if it wraps this).
Harper loads JavaScript (resources.js) and serves static files (web/**). In this
project those are generated, not authored:
src/ is source. bun run build compiles it into
harper-app/resources.js and harper-app/web/**.resources.js or web/** directly — change the TypeScript and
rebuild. See [[harper-resources]] and [[harper-component-model]].harper-app/. Deploying
stale artifacts ships code that does not match src/.A deployable Harper component must keep these at the component root Fabric packages:
config.yaml — active extensions ([[harper-config-yaml]])schema.graphql — data model ([[harper-schema-graphql]])resources.js — generated custom logicweb/** — generated static assetsIf a change touches this surface, it is not done until the local build and the relevant deployed or smoke path agree.
Fabric is Harper's distributed deploy network. Deploy packages the component and sends it to a target instance:
harper deploy_component \
project=<app-name> \
package=<path-or-git-url> \
target=https://<instance>:9925 \
username=<user> \
password=<pass> \
restart=true \
replicated=true
package deploys the current directory.restart=true restarts threads after deploy so new code loads.replicated=true replicates the deploy across all nodes in a cluster — include it
when targeting Fabric/a cluster.CLI_TARGET_USERNAME / CLI_TARGET_PASSWORD instead of
inline flags — prefer that so secrets never land in shell history or tracked files.Keep runtime secrets out of tracked files. Use environment variables, the
loadEnv extension, or an OS keychain helper. Document where secrets live (which
env var, which store) without recording their values.
bun run build — produces fresh resources.js / web/**.bun run typecheck.If a verification command cannot run, report the exact command and the blocker — do not claim completion. When you hit a Harper/Fabric limitation or workaround, record the symptom, root cause, fix, and the tempting-but-broken alternatives in the project's Fabric runbook.
development
Use Expo DOM components to run web code in a webview on native and as-is on web. Migrate web code to native incrementally.
development
Guidelines for upgrading Expo SDK versions and fixing dependency issues
development
Use when implementing or debugging ANY network request, API call, or data fetching. Covers fetch API, React Query, SWR, error handling, caching, offline support, and Expo Router data loaders (`useLoaderData`).
tools
`@expo/ui/swift-ui` package lets you use SwiftUI Views and modifiers in your app.