Orchestrates the complete configuration of a Nullplatform organization. Use when you need to initialize a project, verify infrastructure/cloud/K8s/API status, diagnose issues, or run tool, cloud, Kubernetes, Nullplatform API, telemetry, and service checks.
NEVER use curl directly to query the Nullplatform API (api.nullplatform.com).
For ANY query to the Nullplatform API, you MUST use:
/np-api fetch-api "<endpoint>" - For API queries/np-api check-auth - To verify authenticationnp-api skill - For programmatic operations (invoke via /np-api)Allowed exceptions (NOT the Nullplatform API):
curl to deployed application endpoints (*.nullapps.io) for health checkscurl to external services (AWS, Azure, GCP)| Command | Description |
|---|
/np-setup-orchestrator | Checks status, offers to initialize if config is missing |
/np-setup-orchestrator init | Step-by-step initial wizard |
/np-setup-orchestrator check-status | Runs ALL checks |
/np-setup-orchestrator check-tools | Verify installed tools |
/np-setup-orchestrator check-cloud | Verify cloud access |
/np-setup-orchestrator check-k8s | Verify Kubernetes access |
/np-setup-orchestrator check-np | Verify Nullplatform API |
/np-setup-orchestrator check-telemetry | Verify telemetry (logs and metrics) |
/np-setup-orchestrator check-services | List services, offer to diagnose/modify/create |
/np-setup-orchestrator check-tf-key | Verify common.tfvars (np_api_key) |
cat organization.properties 2>/dev/null
ls np-api-skill.key np-api-skill.token 2>/dev/null
ls -d infrastructure/ nullplatform/ nullplatform-bindings/ 2>/dev/null
ls common.tfvars infrastructure/*/terraform.tfvars nullplatform/terraform.tfvars nullplatform-bindings/terraform.tfvars 2>/dev/null
If ANY of the base components are MISSING (checks 1-3) → Use AskUserQuestion: "This repository is not fully configured for Nullplatform. Do you want to initialize?"
init flowIf EVERYTHING is configured → Automatically run check-status to gain situational context. The report includes next step recommendations.
cat organization.properties 2>/dev/null
ls np-api-skill.key np-api-skill.token 2>/dev/null
ls -d infrastructure/ nullplatform/ nullplatform-bindings/ 2>/dev/null
ls common.tfvars 2>/dev/null
If ALL components exist → Show that it's already initialized and offer with AskUserQuestion:
/np-setup-orchestrator check-status/np-infrastructure-wizard/np-nullplatform-wizard/np-nullplatform-bindings-wizardIf
check-statuswas already run in the conversation, the first option should say "Re-run full diagnostic".
If ANY component is MISSING → Continue with the wizard.
Check with cat organization.properties. If it doesn't exist, use AskUserQuestion:
/np-organization-create. Generates organization.properties automatically.organization=XXXX) and create: echo "organization_id={ORG_ID}" > organization.propertiesAfter having the organization, ask with AskUserQuestion:
name, slug, and repository_prefix:curl -s -L 'https://api.nullplatform.com/account' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H "Authorization: Bearer $TOKEN" \
-d '{
"name": "<account_name>",
"slug": "<account_slug>",
"organization_id": '"$ORG_ID"',
"repository_prefix": "<prefix>",
"status": "active",
"repository_provider": "github"
}'
The repository_provider defaults to github unless the user specifies otherwise.
Domain: The default application domain is {account_slug}.nullapps.io. Ask the user to confirm: "The application domain will be {account_slug}.nullapps.io. Is this correct, or do you want to use a different domain?". Do NOT offer invented alternatives.
Save the account info: echo "account_id={ACCOUNT_ID}" >> organization.properties
Check with ls np-api-skill.key np-api-skill.token. If it doesn't exist, guide:
A single API Key is used for everything (skills + Terraform). It's saved in np-api-skill.key and referenced from common.tfvars.
IMPORTANT: Do not use root API Keys or keys from other organizations. The key must belong to this organization.
echo 'YOUR_API_KEY' > np-api-skill.keyexport NP_API_KEY=$(cat np-api-skill.key)
Once created, automatically generate common.tfvars with the key (if applicable).
Verify that np-api-skill.key is in .gitignore. If not, add it.
Check with ls -d infrastructure/ nullplatform/ nullplatform-bindings/. If missing, create the structure directly.
Use AskUserQuestion for cloud provider: AWS, Azure (then AKS or ARO), GCP, OCI.
Create the following folder and file structure. The source of truth for each file's content is the nullplatform/tofu-modules repository (branch main):
{output}/
├── infrastructure/{cloud}/ # Cloud infrastructure (VPC, K8s, DNS, etc.)
│ ├── variables.tf
│ ├── provider.tf
│ ├── backend.tf
│ ├── locals.tf
│ ├── outputs.tf
│ └── terraform.tfvars.example
├── nullplatform/ # Central Nullplatform configuration
│ ├── variables.tf
│ ├── provider.tf
│ ├── backend.tf
│ ├── outputs.tf
│ └── terraform.tfvars.example
├── nullplatform-bindings/ # Connects Nullplatform with cloud + code repo
│ ├── variables.tf
│ ├── provider.tf
│ ├── backend.tf
│ ├── data.tf
│ ├── locals.tf
│ └── terraform.tfvars.example
├── common.tfvars.example
└── .gitignore
The main.tf files are NOT created in this step. They are dynamically generated in:
infrastructure/{cloud}/main.tf → /np-infrastructure-wizardnullplatform/main.tf → /np-nullplatform-wizardnullplatform-bindings/main.tf → /np-nullplatform-bindings-wizardIf common.tfvars doesn't exist, create it with default values and then let the user modify what they need.
Procedure:
np-api-skill.key (use Read, not shell variables)common.tfvars with these defaults:nrn = ""
np_api_key = "<plain value read from np-api-skill.key>"
organization_slug = ""
tags_selectors = {
"environment" = "development"
}
I generated
common.tfvarswith default values. I need you to complete:
nrn: Resource NRN (e.g.,organization=123:account=456)organization_slug: Organization slug
| Variable | Default | Notes |
|---|---|---|
np_api_key | Read from np-api-skill.key | Auto-completed, do not ask the user |
nrn | Empty | The user must provide it |
organization_slug | Empty | The user must provide it |
tags_selectors | { "environment" = "development" } | Reasonable default, user can change it |
The full
nrnmay not be available yet if it's a new org. Fill in partially and update later.
Invoke /np-infrastructure-wizard to configure the complete infrastructure (VPC, K8s, DNS, agent). Do NOT create terraform.tfvars manually.
Invoke /np-nullplatform-wizard to configure dimensions and scopes. Do NOT create terraform.tfvars manually.
Invoke /np-nullplatform-bindings-wizard to configure bindings. Do NOT create terraform.tfvars manually.
Show a table with the status of all components and suggest /np-setup-orchestrator check-status.
Runs ALL checks in sequence and generates a consolidated report.
| Condition | Recommendation |
|---|---|
| No organization.properties | /np-organization-create or /np-setup-orchestrator init |
| Expired token | Renew token and re-run |
| No cloud infrastructure | /np-infrastructure-wizard |
| Missing dimensions/scopes | /np-nullplatform-wizard |
| Missing bindings | /np-nullplatform-bindings-wizard |
| Last app/scope/deploy failed | /np-setup-troubleshooting {type} {id} (most recent) |
| No recent activity | Create application from Nullplatform UI |
| Empty system metrics | Verify agent telemetry configuration |
| Unregistered services | /np-service-craft register <name> |
| Services without binding | /np-service-craft register <name> (review bindings) |
| No services defined | /np-service-craft create to create a new one |
| Everything working | The complete flow is working correctly |
| Tool | Command | Required |
|---|---|---|
| OpenTofu | tofu version | Yes (or Terraform) |
| Terraform | terraform version | Yes (or OpenTofu) |
| kubectl | kubectl version --client | Yes |
| jq | jq --version | Yes |
tofu version 2>/dev/null || terraform version 2>/dev/null
kubectl version --client 2>/dev/null
jq --version 2>/dev/null
If any tool is missing, indicate how to install it.
Verify that common.tfvars exists and contains a valid np_api_key.
Verify the file exists: ls common.tfvars. If it doesn't exist, indicate to create from common.tfvars.example.
Validate the API Key: run ${CLAUDE_PLUGIN_ROOT}/skills/np-setup-orchestrator/scripts/check-tf-api-key.sh. If OK, key is valid. If ERROR, key is invalid: indicate to verify/recreate in UI.
Verify gitignore: grep -q "common.tfvars" .gitignore. If not present, warn (security risk).
| Condition | Recommendation |
|---|---|
| File doesn't exist | Create from common.tfvars.example |
| Invalid key | Verify/recreate API Key in UI |
| No permissions | Create new key with Administrator role |
| Not in gitignore | Add common.tfvars to .gitignore |
| All OK | Terraform API Key configured correctly |
See references/check-cloud.md for the complete flow.
See references/check-k8s.md for the complete flow.
See references/check-np.md for the complete flow.
See references/check-telemetry.md for the complete flow.
See references/check-services.md for the complete flow.