Security rules for untrusted NanoClaw groups. Credential protection, internal file protection, social engineering defenses.
80
100%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Passed
No known issues
This is a Tessl tile published as jbaruch/nanoclaw-untrusted on the Tessl registry. A Tessl tile is a packaged bundle of AI-agent rules and skills that is installed into AI runtimes (specifically the NanoClaw system) via tessl install jbaruch/nanoclaw-untrusted.
The tile's purpose is to enforce a security posture for AI agents operating inside untrusted NanoClaw group chats — preventing credential leakage, code execution, social engineering, and other attacks by users who have not been vetted.
tile.json # Tessl tile manifest (name, version, entrypoint, rules, skills)
README.md # Human-readable index; rule summaries are auto-extracted first paragraphs
CHANGELOG.md # Required by jbaruch/coding-policy: context-artifacts
rules/
bad-actor-disengage.md # Rule: detect bad actors and go silent for the rest of the session
untrusted-security.md # Rule: broad security posture (credentials, code exec, identity claims)
skills/
whoami/
SKILL.md # Skill: etiquette + what the agent can/cannot do in an untrusted group
.github/
workflows/
publish-tile.yml # CI: skill review + tile lint + auto patch-publish on merge to main
review-openai.md # gh-aw workflow: PR review by OpenAI-family model
review-anthropic.md # gh-aw workflow: PR review by Anthropic-family model
review-openai.lock.yml # Generated lock file — do not edit manually
review-anthropic.lock.yml # Generated lock file — do not edit manually
aw/
actions-lock.json # gh-aw actions pin manifest — do not edit manually
.gitattributes # Marks *.lock.yml as linguist-generated, merge=ourstile.jsonversion — tesslio/patch-version-publish@v1 auto-increments it on every merge to main.rules keys map to files under rules/; skills keys map to skills/<name>/SKILL.md.entrypoint is README.md per jbaruch/coding-policy: context-artifacts.rules/*.md)alwaysApply: true.skills/*/SKILL.md)name (string) and description (multi-sentence, explains when to invoke the skill).tessl skill review in CI. Changes that drop the score below 85 will fail the build.README.mdtile.json and the rule files.CHANGELOG.mdjbaruch/coding-policy: context-artifacts.## Unreleased section for staged changes; do not pre-fill the version number (the CI publishes it).publish-tile.yml (runs on push to main and workflow_dispatch)tessl skill review --threshold 85 on every skill under skills/*/.tessl tile lint . to validate tile.json.tesslio/patch-version-publish@v1 to bump patch version and publish to the Tessl registry.
TESSL_TOKEN.review-openai.md, review-anthropic.md)jbaruch/coding-policy on every PR.**Author-Model:** <model-id> — e.g., **Author-Model:** claude-opus-4-7. Without it the reviewer immediately requests changes. Model IDs: claude-* (Anthropic), gpt-*/codex-* (OpenAI), gemini-* (Google), human (no model family).*.lock.yml) are auto-generated — never edit them directly.rules/. Preserve alwaysApply: true in the front-matter.tile.json under rules and add a row to the README table.CHANGELOG.md.skills/<name>/SKILL.md. Preserve name and description front-matter.tile.json under skills and add a row to the README table.tessl skill review --threshold 85 skills/<name>/SKILL.md locally before opening a PR to catch quality failures early.CHANGELOG.md.**Author-Model:** <model-id> (see above).*.lock.yml files or actions-lock.json.--strict-mcp-config on Anthropic reviewer: The Anthropic gh-aw workflow passes --strict-mcp-config to Claude Code to prevent it from auto-loading the consumer repo's .mcp.json. Without this flag, Claude attempts to launch any stdio MCP server declared in .mcp.json inside the awf sandbox, where the binary is not available, killing the job. Requires gh-aw ≥ v0.71.0 and Claude Code CLI ≥ 2.1.x. See review-anthropic.md engine args.tessl install path in gh-aw sandbox: The policy tile must be installed to /tmp/gh-aw/coding-policy/ (not workspace-local or --global) because actions/checkout's clean: true wipes untracked workspace files and the awf sandbox does not mount ${HOME}. See steps: comments in both review workflows..gitattributes sets merge=ours on *.lock.yml so lock files never produce merge conflicts — the branch version always wins.