plugins/lisa-harper-fabric/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.
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.