Skills and rules for the NanoClaw host agent (Claude Code on Mac), covering plugin promotion, container management, staging checks, repo chain safety, and public sync.
73
91%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Medium
Suggest reviewing before use
Process steps in order. Do not skip ahead.
Runs the plugin-repo PR lifecycle on content in the agent's NAS staging area. End state is a merged PR whose registry publish has been confirmed through the coding-policy release contract — not merely a merged PR. Same review discipline as source-code PRs: no direct pushes to main.
./scripts/check-staging.shReview each item before promoting. Proceed immediately to Step 2.
Each item belongs to exactly one plugin:
| Content | Target plugin | GitHub repo |
|---|---|---|
| Admin/operational skills | nanoclaw-admin | jbaruch/nanoclaw-admin (private) |
| Trusted shared operational | nanoclaw-trusted | jbaruch/nanoclaw-trusted |
| Security rules for untrusted | nanoclaw-untrusted | jbaruch/nanoclaw-untrusted |
| Shared behavior (all containers) | nanoclaw-core | jbaruch/nanoclaw-core |
| Host agent conventions | nanoclaw-host | jbaruch/nanoclaw-host |
Proceed immediately to Step 3.
TILE_NAME is the env var the scripts read. It keeps its historical spelling — do not substitute a PLUGIN_NAME variant, which the scripts do not recognise.
# Promote a specific skill to a plugin
TILE_NAME=nanoclaw-admin ./scripts/promote-from-host.sh heartbeat
# Promote all skills + rules for a plugin
TILE_NAME=nanoclaw-admin ./scripts/promote-from-host.sh all
# Promote only rules
TILE_NAME=nanoclaw-trusted ./scripts/promote-from-host.sh --rules-onlyInputs: TILE_NAME selects the plugin, the argument selects the scope (all, one skill by name, or --rules-only).
Output: PR opened: <url> and Branch: <name> on stdout — capture both. A non-zero exit means no PR was opened; read the script's stderr for which validation refused.
Placement validation, duplicate detection, the skill-review pass, branch naming, and the reviewer summon are the script's own — see the header of scripts/promote-to-tile-repo.sh in jbaruch/nanoclaw, which promote-from-host.sh wraps.
Proceed immediately to Step 4.
Skill(skill: "release")One typed call, and it runs to completion: it watches the PR to a terminal review state, carries the fix loop, merges, and confirms the registry publish. Do not treat its internals as steps of this skill and do not re-enter it partway — invoke it once and branch on what it returns.
Two things this skill owns that release cannot know:
Fix in staging, not in the plugin clone. When the review asks for a change, edit the NAS staging copy and push the fixup onto the same branch. A fix applied in the clone is regressed by the next re-promote of that skill.
TILE_NAME=<plugin> ./scripts/push-staged-to-branch.sh \
<local-staging-dir> <plugin> <branch> "<commit msg>" <skill|all|--rules-only>Inside containers, the equivalent is the push_staged_to_branch MCP tool. Both call scripts/push-staged-to-branch.sh, which re-summons the reviewers after pushing.
Never hand-roll the review watch. coding-policy: ci-safety routes it through skills/release/watch-pr-reviews.sh alone — the gate fields it resolves, its poll interval, and its give-up budget live in that script's header.
Plugin repos run publish.yml on push to main, not on pull_request, so gh pr checks returns nothing at PR time. Do not wait for a green CI box that is not coming.
Proceed immediately to Step 5 once release reports the release confirmed.
Run /verify-tiles. The command keeps its historical name; there is no /verify-plugins.
Proceed immediately to Step 6.
For the nanoclaw-host plugin, run tessl update locally to pull the new version. For container plugins, the next ./scripts/deploy.sh picks them up.
Finish here.
--repo in every gh call. Defaults leak to upstream.main on any plugin repo — always PR.Skill(skill: "release") owns both..tessl-plugin
rules
skills