If you're working with Pangolin's infrastructure and need to generate Newt blueprint configs, this handles the YAML and Docker Labels formats for you. It covers proxy resources for HTTP/TCP/UDP, client resources for SSH/RDP access, and all the auth configurations including SSO and basic auth. The skill knows the validation rules and property constraints, so it'll catch issues like missing required fields or port conflicts before you hit errors. Most useful when you're setting up new resources or converting between the two config formats, especially if you're juggling multiple targets across Docker containers where the auto-detection and merging behavior can get tricky.
npx -y skills add rknall/claude-skills --skill "Newt Blueprint Generator" --agent claude-codeInstalls into .claude/skills of the current project.
Expert assistance for creating, validating, and managing Pangolin Newt blueprint configurations.
This skill should be triggered when:
Pangolin Blueprints are declarative configurations that allow you to define resources and their settings in a structured format. They support two formats:
YAML configs can be applied using:
--blueprint-file /path/to/blueprint.yaml/org/{orgId}/blueprint with base64-encoded JSON bodyExample Newt usage:
newt --blueprint-file /path/to/blueprint.yaml <other-args>
For containerized applications, blueprints can be defined using Docker labels with the pangolin. prefix.
Enable Docker socket access:
newt --docker-socket /var/run/docker.sock <other-args>
Or use environment variable:
DOCKER_SOCKET=/var/run/docker.sock
Proxy resources expose HTTP, TCP, or UDP services through Pangolin.
proxy-resources:
resource-nice-id-uno:
name: this is a http resource
protocol: http
full-domain: uno.example.com
host-header: example.com
tls-server-name: example.com
headers:
- name: X-Example-Header
value: example-value
- name: X-Another-Header
value: another-value
rules:
- action: allow
match: ip
value: 1.1.1.1
- action: deny
match: cidr
value: 2.2.2.2/32
- action: pass
match: path
value: /admin
targets:
- site: lively-yosemite-toad
hostname: localhost
method: http
port: 8000
- site: slim-alpine-chipmunk
hostname: localhost
path: /admin
path-match: exact
method: https
port: 8001
proxy-resources:
resource-nice-id-dos:
name: this is a raw resource
protocol: tcp
proxy-port: 3000
targets:
- site: lively-yosemite-toad
hostname: localhost
port: 3000
Simplified resources containing only target configurations:
proxy-resources:
additional-targets:
targets:
- site: another-site
hostname: backend-server
method: https
port: 8443
- site: another-site
hostname: backup-server
method: http
port: 8080
Note: When using targets-only resources, name and protocol fields are not required.
Client resources define proxied resources accessible via Olm client (SSH, RDP):
client-resources:
client-resource-nice-id-uno:
name: this is my resource
protocol: tcp
proxy-port: 3001
hostname: localhost
internal-port: 3000
site: lively-yosemite-toad
Authentication is off by default. Enable by adding fields in the auth section.
Note: Authentication is only allowed on HTTP resources, not TCP/UDP.
proxy-resources:
secure-resource:
name: Secured Resource
protocol: http
full-domain: secure.example.com
auth:
pincode: 123456
password: your-secure-password
basic-auth:
user: asdfa
password: sadf
sso-enabled: true
sso-roles:
- Member
- Admin
sso-users:
- user@example.com
whitelist-users:
- admin@example.com
services:
newt:
image: fosrl/newt
container_name: newt
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- PANGOLIN_ENDPOINT=https://app.pangolin.net
- NEWT_ID=h1rbsgku89wf9z3
- NEWT_SECRET=z7g54mbcwkglpx1aau9gb8mzcccoof2fdbs97keoakg2pp5z
- DOCKER_SOCKET=/var/run/docker.sock
nginx1:
image: nginxdemos/hello
container_name: nginx1
labels:
# Proxy Resource Configuration
- pangolin.proxy-resources.nginx.name=nginx
- pangolin.proxy-resources.nginx.full-domain=nginx.fosrl.io
- pangolin.proxy-resources.nginx.protocol=http
- pangolin.proxy-resources.nginx.headers[0].name=X-Example-Header
- pangolin.proxy-resources.nginx.headers[0].value=example-value
# Target Configuration - port and hostname auto-detected
- pangolin.proxy-resources.nginx.targets[0].method=http
- pangolin.proxy-resources.nginx.targets[0].path=/path
- pangolin.proxy-resources.nginx.targets[0].path-match=prefix
nginx2:
image: nginxdemos/hello
container_name: nginx2
labels:
# Additional target with explicit hostname and port
- pangolin.proxy-resources.nginx.targets[1].method=http
- pangolin.proxy-resources.nginx.targets[1].hostname=nginx2
- pangolin.proxy-resources.nginx.targets[1].port=80
networks:
default:
name: pangolin_default
| Property | Type | Required | Description | Constraints |
|---|---|---|---|---|
name | string | Conditional | Human-readable name | Required unless targets-only |
protocol | string | Conditional | Protocol type (http, tcp, udp) | Required unless targets-only |
full-domain | string | HTTP only | Full domain name | Required for HTTP, must be unique |
proxy-port | number | TCP/UDP only | Port for raw TCP/UDP | Required for TCP/UDP, 1-65535, must be unique |
ssl | boolean | No | Enable SSL/TLS | - |
enabled | boolean | No | Whether resource is enabled | Defaults to true |
host-header | string | No | Custom Host header | - |
tls-server-name | string | No | SNI name for TLS | - |
headers | array | No | Custom headers | Each requires name and value (min 1 char) |
rules | array | No | Access control rules | See Rules section |
auth | object | HTTP only | Authentication config | See Authentication section |
targets | array | Yes | Target endpoints | See Targets section |
| Property | Type | Required | Description | Constraints |
|---|---|---|---|---|
site | string | No | Site identifier | - |
hostname | string | Yes | Target hostname or IP | - |
port | number | Yes | Target port | 1-65535 |
method | string | HTTP only | Protocol method (http, https, h2c) | Required for HTTP |
enabled | boolean | No | Whether target is enabled | Defaults to true |
internal-port | number | No | Internal port mapping | 1-65535 |
path | string | HTTP only | Path prefix, exact, or regex | - |
path-match | string | HTTP only | Path matching type (prefix, exact, regex) | - |
Not allowed on TCP/UDP resources.
| Property | Type | Required | Description | Constraints |
|---|---|---|---|---|
pincode | number | No | 6-digit PIN | Must be exactly 6 digits |
password | string | No | Password for access | - |
basic-auth | object | No | Basic auth config | Requires user and password |
sso-enabled | boolean | No | Enable SSO | Defaults to false |
sso-roles | array | No | Allowed SSO roles | Cannot include "Admin" role |
sso-users | array | No | Allowed SSO user emails | Must be valid emails |
whitelist-users | array | No | Whitelisted user emails | Must be valid emails |
| Property | Type | Required | Description | Constraints |
|---|---|---|---|---|
action | string | Yes | Rule action (allow, deny, pass) | - |
match | string | Yes | Match type (cidr, path, ip, country) | - |
value | string | Yes | Value to match | Format depends on match type |
| Property | Type | Required | Description | Constraints |
|---|---|---|---|---|
name | string | Yes | Human-readable name | 2-100 characters |
protocol | string | Yes | Protocol type (tcp, udp) | - |
proxy-port | number | Yes | Port accessible to clients | 1-65535, must be unique |
hostname | string | Yes | Target hostname or IP | 1-255 characters |
internal-port | number | Yes | Port on target system | 1-65535 |
site | string | No | Site identifier | 2-100 characters |
enabled | boolean | No | Whether resource is enabled | Defaults to true |
targets field, making name and protocol optionalfull-domain and all targets must have method fieldproxy-port and targets must NOT have method fieldauth configurationproxy-port values must be unique within proxy-resourcesproxy-port values must be unique within client-resourcesfull-domain values must be unique across all proxy resourceshttp, all non-null targets must specify a methodThe Admin role is reserved and cannot be included in the sso-roles array.
Solution: Remove "Admin" from the sso-roles array.
Each full-domain must be unique across all proxy resources.
Solution: Use different subdomains or paths for multiple resources.
Port numbers in proxy-port must be unique within their resource type.
Solution: Assign unique port numbers within proxy-resources and client-resources separately.
All targets in HTTP proxy resources must specify the connection method.
Solution: Add method: http, method: https, or method: h2c to all targets.
TCP and UDP targets should not include the method field.
Solution: Remove the method field from TCP/UDP resource targets.
Authentication is only supported for HTTP resources.
Solution: Remove the auth section from TCP/UDP resources.
Resources must be either targets-only or complete resource definitions.
Solution: Either provide only targets field, or include both name and protocol fields.
When a user requests a Pangolin Newt blueprint configuration:
Gather Requirements:
Select Format:
Validate Configuration:
full-domain (HTTP) or proxy-port (TCP/UDP)method fieldmethod fieldGenerate Configuration:
Provide Usage Instructions:
web-app-prod, database-backup)site for multi-site deploymentsprefix for broad matches, exact for specific endpointsRequirements: Expose a web app running on localhost:8080 via HTTPS at app.example.com
proxy-resources:
web-app:
name: Web Application
protocol: http
full-domain: app.example.com
targets:
- hostname: localhost
port: 8080
method: https
Requirements: Expose PostgreSQL database on port 5432
proxy-resources:
postgres-db:
name: PostgreSQL Database
protocol: tcp
proxy-port: 5432
targets:
- hostname: localhost
port: 5432
Requirements: Multiple backend servers for the same domain
proxy-resources:
api-service:
name: API Service
protocol: http
full-domain: api.example.com
targets:
- site: site-01
hostname: backend-01
port: 8080
method: http
- site: site-02
hostname: backend-02
port: 8080
method: http
Requirements: Web app with SSO authentication
proxy-resources:
secure-app:
name: Secure Application
protocol: http
full-domain: secure.example.com
auth:
sso-enabled: true
sso-roles:
- Member
- Developer
sso-users:
- admin@example.com
targets:
- hostname: localhost
port: 3000
method: https
When generating blueprints:
sickn33/antigravity-awesome-skills
rohitg00/pro-workflow
supercent-io/skills-template