skills/lfx-setup/SKILL.md
Environment setup for any LFX repo, prerequisites, clone, install, env vars, and dev server. Adapts to repo type (Angular or Go). Use for getting started, first-time setup, broken environments, or install failures.
npx skillsauth add linuxfoundation/lfx-skills lfx-setupInstall 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.
You are helping a contributor set up an LFX development environment from scratch. Walk through each step interactively, verifying success before moving on.
Key principle: Verify each step before proceeding to the next.
Before diving into the technical steps, here's what you should have ready:
github.com/linuxfoundation and see private repos, you're good.Don't worry if you're not sure about any of these, I'll check each one as we go and help you get access if needed. Don't assume success, check.
if [ -f apps/lfx-one/angular.json ] || [ -f turbo.json ]; then
echo "REPO_TYPE=angular" # lfx-self-serve
elif [ -f go.mod ]; then
echo "REPO_TYPE=go" # Go microservice
fi
Check that the following are installed and verify versions:
echo "=== Prerequisites Check ==="
echo -n "Node.js: " && node --version 2>/dev/null || echo "NOT INSTALLED"
echo -n "Yarn: " && yarn --version 2>/dev/null || echo "NOT INSTALLED"
echo -n "Git: " && git --version 2>/dev/null || echo "NOT INSTALLED"
Required versions:
nvm install 22 && nvm use 22corepack enable && corepack prepare [email protected] --activateDocker is NOT required for local development. All services point to the shared dev environment.
macOS-specific notes:
corepack enable fails with permission errors: sudo corepack enablenpm install -g corepack firstxcode-select --installIf not already cloned:
git clone <repository-url>
cd lfx-self-serve
Copy the env template:
cp apps/lfx-one/.env.example apps/lfx-one/.env
Get credentials from 1Password:
apps/lfx-one/.envValidate critical env vars:
echo "=== Env Var Check ==="
missing=()
for key in PCC_AUTH0_CLIENT_ID PCC_AUTH0_CLIENT_SECRET PCC_AUTH0_ISSUER_BASE_URL PCC_AUTH0_AUDIENCE PCC_AUTH0_SECRET PCC_BASE_URL LFX_V2_SERVICE; do
if grep -qE "^${key}=.+" apps/lfx-one/.env 2>/dev/null; then
echo "✓ $key"
else
echo "✗ $key, MISSING"
missing+=("$key")
fi
done
if [ ${#missing[@]} -gt 0 ]; then
echo -e "\nMissing vars: ${missing[*]}"
echo "Get these from 1Password → LFX One Dev Environment vault"
else
echo -e "\nAll critical env vars are populated ✓"
fi
yarn install
If yarn install fails:
EACCES errors → Don't use sudo. Check Node is installed via nvm, not system packagecorepack enable && corepack prepare [email protected] --activateyarn config set httpProxy ...node-gyp errors → Ensure Xcode Command Line Tools are installed: xcode-select --installVerify install succeeded:
[ -d node_modules ] && echo "✓ node_modules exists" || echo "✗ node_modules missing"
[ -f yarn.lock ] && echo "✓ yarn.lock exists" || echo "✗ yarn.lock missing"
yarn start
The app should be available at http://localhost:4200.
# Wait a few seconds for the server to start, then check
curl -s -o /dev/null -w "%{http_code}" http://localhost:4200
Expected: HTTP 200 or 302 (redirect to login).
If the server fails to start:
lsof -i :4200 to find the process, kill it or use a different port.env values match 1Passwordyarn build separately to see detailed errorsecho "=== Prerequisites Check ==="
echo -n "Go: " && go version 2>/dev/null || echo "NOT INSTALLED"
echo -n "Git: " && git --version 2>/dev/null || echo "NOT INSTALLED"
echo -n "Make: " && make --version 2>/dev/null | head -1 || echo "NOT INSTALLED"
Required:
go versiongit --versionmake --versionmake apigen handles this)Optional for full local stack:
helm versiongit clone <repository-url>
cd lfx-v2-<service>-service
Standard environment variables for running against the local stack:
export NATS_URL=nats://localhost:4222
export OPENSEARCH_URL=http://localhost:9200
export JWKS_URL=http://localhost:4457/.well-known/jwks
export LFX_ENVIRONMENT=lfx.
export PORT=8080
For running against the shared dev environment, get values from 1Password.
go mod download
go build ./...
If build fails:
go mod tidy && go mod downloadgo.mod for required versionexport CGO_ENABLED=0 if the service doesn't need CGOVerify:
echo $? # Should be 0
make apigen
If apigen fails:
go install goa.design/goa/v3/cmd/[email protected]cmd/*/design/*.go for syntax issuesgo run cmd/*-api/main.go
Verify:
curl -s http://localhost:8080/livez
# Expected: 200 OK
To run the full platform locally with all services:
# Clone the helm repo
git clone https://github.com/linuxfoundation/lfx-v2-helm
cd lfx-v2-helm
# Pull chart dependencies
helm dependency update charts/lfx-platform
# Create local values
cp charts/lfx-platform/values.local.example.yaml charts/lfx-platform/values.local.yaml
# Edit values.local.yaml, secrets are in 1Password
# Install
helm install -n lfx lfx-platform ./charts/lfx-platform \
--values charts/lfx-platform/values.local.yaml
| Symptom | Likely Cause | Fix |
|---------|-------------|-----|
| corepack enable permission error | System Node | sudo corepack enable or use nvm |
| yarn install EACCES | Root-owned files | Don't use sudo. Reinstall Node via nvm |
| Port 4200 in use | Zombie process | lsof -i :4200 then kill <PID> |
| Auth redirect loop | Wrong .env values | Re-copy from 1Password |
| ERR_MODULE_NOT_FOUND | Missing deps | rm -rf node_modules && yarn install |
| NATS connection refused | Local stack not running | Start the Helm platform stack |
| make apigen fails | Missing Goa | go install goa.design/goa/v3/cmd/[email protected] |
| Go build fails after Goa changes | Stale generated code | make apigen && go build ./... |
Once the app/service runs successfully:
═══════════════════════════════════════════
SETUP COMPLETE ✓
═══════════════════════════════════════════
Repo: [repo name]
Type: [Angular / Go microservice]
Running at: [URL]
═══════════════════════════════════════════
Suggest next steps:
/lfx-skills:lfx/lfx-skills:lfx-platform-architecture/lfx-skills:lfx-platform-architecture<short-repo-name>-dev skillCLAUDE.mddevelopment
LFX cross-repo topology and ownership router. Use when the task spans more than one LFX repo, asks "which repo owns X", "where does Y live", "what repos does this touch", "what consumes Z", or needs a peer-repo file path from inside a single repo. Loads per-repo configs when invoked from the LFX workspace root with a full task prompt; gives targeted cross-repo guidance when invoked from inside a single repo. Also answers LFX glossary and topology questions, and performs read-only discovery when the user asks whether a contract, API, event, field, workflow, or repo capability exists. Do not fire for single-repo implementation tasks where the active repo's own CLAUDE.md already governs (those belong to the repo's local skills). Do not fire for V2 platform composition, service classes, or cross-service handoffs (use `/lfx-skills:lfx-platform-architecture`), ITX wrapper plumbing (`/lfx-skills:lfx-itx-integration`), or Intercom app/Fin workflows (`/lfx-skills:lfx-intercom`).
tools
Create a new ticket in the LFXV2 Jira project (linuxfoundation.atlassian.net). Guides the user through picking an issue type (Bug, Story, Task, Epic), writing a concise summary, and capturing the requirement, feature, or bug context, collecting reproduction steps for bugs. Optionally attaches a parent epic, labels, or priority if the user provides them. Submits the ticket via Atlassian MCP and returns the URL. Use this skill any time someone asks to "create a Jira ticket", "open an LFXV2 ticket", "file a bug", "log a story", "write up a feature request", "draft a ticket", or any variation of submitting work into LFXV2.
testing
Combine multiple feature branches across repos into worktrees for end-to-end journey testing. Create, refresh, and teardown integration environments that merge branches from multiple repos.
devops
Guide users through requesting Snowflake access at the Linux Foundation. Handles two request types: (1) individual user access, adding or modifying an entry in users.tf in the lfx-snowflake-terraform repo, and (2) service account creation, adding an entry in service_accounts.tf. For each, the skill collects the necessary details, generates the exact Terraform HCL block to add, explains where to place it, and guides the user through the PR process. Use this skill any time someone asks about Snowflake access, permissions, user provisioning, service accounts, or making changes to the lfx-snowflake-terraform repo, including phrases like "get access to Snowflake", "add me to Snowflake", "need a service account", "request Snowflake permissions", "I need to query Snowflake", or "how do I get Snowflake access".