Skills and rules for the NanoClaw host agent (Claude Code on Mac), covering plugin promotion, container management, staging checks, repository safety, and upstream updates.
91%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Medium
Suggest reviewing before use
This contract covers only NanoClaw's dedicated noVNC Tailscale viewer node.
It grants no website, payment, messaging, Google, vehicle or agent role authority.
Only the actual host operator may enroll the node. A source branch, test fixture,
TTY, copied JSON or caller isMain value never proves native acceptance.
The reviewed Core owner consists of container/browser-viewer/entrypoint.sh,
setup/browser-tailnet-viewer.ts, scripts/browser-viewer.sh, their tests and
canonical Compose/deploy wiring. Its complete operator procedure is
jbaruch/nanoclaw:docs/BROWSER-VIEWER.md; bind the deployed commit and installed
Host contract before relying on it. The operator helper uses fixed native
service/ID/image selection and first-party Tailscale CLI, never a credential API.
Narrow exception for first-party Tailscale node identity and ACME state.
Applies only to the dedicated nanoclaw-browser-viewer service.
Preconditions, all required:
$HOME/.local/state/nanoclaw-browser-viewer/tailscale, outside checkout,
backups and agent/group mounts. Its enclosing directories are 0700; files are
0600, single-link and owned by actual configured non-root HOST_UID:HOST_GID.
Only public certs/<own-node>.crt may be 0644 inside 0700. Refuse aliases,
foreign inputs and unknown root leaves; do not repair or reuse another node.Every other credential follows rules/host-conventions.md and OneCLI policy.
This exception creates no secret-materialization API or general state-cache grant.
Narrow exception under coding-policy: testing-standards for the following finite
external-runtime interaction classes, limited to their smallest invocation layer:
scripts/browser-viewer.sh enroll's
fixed interactive tailscale up; parsing, TTY refusal, command ordering,
identity binding, readback and failure cleanup remain CI tested.Manual validation for class1: verify source/image/installed authority and the complete class2 policy first. Start only via approved canonical deployment. Use actual operator private TTY, authenticate normal SSO, inspect native node ID/name/tag/owner, then require exact online Serve443/loopback 6080/Funnel-off readback. Preserve unknown state and stop the bound viewer on failure.
Manual validation for class2: retain private metadata proving selected phone, laptop and denied-device IDs/addresses, complete effective policy/tag owners, HTTPS, no routes/exit-node/SSH/Funnel and accept/deny tests. No broader allow may reach this destination. No API credential, raw state, PIN or enrollment link enters shared evidence.
Manual validation for class3: off-home phone AND laptop each load the real noVNC
HTTPS page and establish wss /websockify, HTTP 101 and a live frame. An HTML 200
alone fails. The unselected tailnet device fails page AND WebSocket; owner devices
cannot reach other ports. Off-tailnet access fails with native Funnel absent and
no exposed 6080/9222. Recreate/restart only through canonical deployment and repeat
same node ID/URL plus allowed/denied page and WebSocket checks. Record source,
installed-contract/native IDs and booleans, never account content or credentials.
Every other interaction follows testing-standards in full. Mandatory deterministic CI covers the real pinned offline unprivileged image/daemon startup, native CLI refusal and private-state modes, shell diagnostics, metadata/Serve projection, TTY/non-TTY outcomes, fixed native arguments, stop-on-failure and unchanged browser exposure. No manual exception excuses missing source/image tests. The published Host authority and actual native reference read are required before activation.
.tessl-plugin
rules
skills
add-ugos-project
check-staging
extract-to-overlay
host-contracts
references
scripts
nuke
promote
reconcile
ship-code
update-from-upstream