marketplace/bundles/plan-marshall/skills/tools-permission-sync/SKILL.md
Synchronize marketplace permissions - generate wildcards, manage executor permissions, and migrate to executor pattern.
npx skillsauth add cuioss/plan-marshall tools-permission-syncInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
PURPOSE: Synchronize Claude Code permissions with marketplace bundles and manage the executor permission pattern.
Execution mode: Run scripts exactly as documented; use --dry-run before applying changes.
Prohibited actions:
Constraints:
python3 .plan/execute-script.py plan-marshall:tools-permission-sync:marketplace-sync {command} {args}--dry-run first to preview changes before applying| Script | Notation | Purpose |
|--------|----------|---------|
| marketplace-sync | plan-marshall:tools-permission-sync:marketplace-sync | Marketplace permission synchronization |
Generate Skill and SlashCommand wildcards from marketplace inventory.
# Read inventory from stdin
python3 .plan/execute-script.py pm-plugin-development:tools-marketplace-inventory:scan-marketplace-inventory \
--scope marketplace --resource-types skills,commands | \
python3 .plan/execute-script.py plan-marshall:tools-permission-sync:marketplace-sync generate-wildcards
# Or from file
python3 .plan/execute-script.py plan-marshall:tools-permission-sync:marketplace-sync generate-wildcards \
--input inventory.json
Output (JSON):
{
"statistics": {
"bundles_scanned": 8,
"skills_found": 28,
"commands_found": 39,
"wildcards_generated": 22
},
"permissions": {
"skill_wildcards": ["Skill(pm-dev-builder:*)", "Skill(plan-marshall:*)"],
"command_bundle_wildcards": ["SlashCommand(/pm-dev-builder:*)", "SlashCommand(/plan-marshall:*)"],
"command_shortform": ["SlashCommand(/java-core:*)"]
}
}
Ensure the executor permission exists in settings.
python3 .plan/execute-script.py plan-marshall:tools-permission-sync:marketplace-sync ensure-executor \
--target global \
--dry-run
Output (JSON):
{
"executor_permission": "Bash(python3 .plan/execute-script.py *)",
"settings_file": "/Users/name/.claude/settings.json",
"action": "added",
"success": true
}
Remove individual script path permissions (redundant with executor pattern).
python3 .plan/execute-script.py plan-marshall:tools-permission-sync:marketplace-sync cleanup-scripts \
--target global \
--remove-broad-python \
--dry-run
Output (JSON):
{
"individual_script_permissions": ["Bash(python3 /path/to/scripts/foo.py:*)"],
"individual_count": 5,
"broad_python_found": true,
"broad_python_removed": true,
"action": "would_remove",
"total_would_remove": 6
}
Complete migration: add executor permission + cleanup redundant permissions.
python3 .plan/execute-script.py plan-marshall:tools-permission-sync:marketplace-sync migrate-executor \
--target global \
--remove-broad-python \
--dry-run
Output (JSON):
{
"success": true,
"dry_run": true,
"executor": {
"permission": "Bash(python3 .plan/execute-script.py *)",
"action": "added"
},
"cleanup": {
"individual_removed": 5,
"broad_python_removed": true
},
"summary": "Migrated to executor-only pattern: 1 permission replaces 5 individual script permissions"
}
The executor pattern uses a single permission for all marketplace scripts:
Bash(python3 .plan/execute-script.py *)This replaces individual script path permissions because the executor invokes scripts via subprocess (not checked by Claude Code permissions).
ensure-executor to add the executor permissioncleanup-scripts to remove redundant individual permissionsmigrate-executor to do both in one step| Target | File |
|--------|------|
| global | ~/.claude/settings.json |
| project | .claude/settings.json or .claude/settings.local.json |
The plan-marshall skill uses this during setup:
.plan/execute-script.pyBash(python3 .plan/execute-script.py *) to global settingspython3 .plan/execute-script.py plan-marshall:tools-permission-sync:marketplace-sync ensure-executor \
--target global
All operations return JSON with error details:
{
"error": "Settings file not found: /path/to/settings.json",
"success": false
}
development
Domain-owned OpenRewrite log-line finding parser for the java-cui domain — parses the
development
Domain-owned OpenRewrite marker detection for the java-cui domain — scans Java/Kotlin sources for cui-rewrite TODO markers, categorizes them by recipe, and fails the gate on any detected marker
development
Operator control surface for the marshalld build server — enrol/drop a project in the machine-global registry (the opt-in enable signal and anti-laundering wall), manage the daemon lifecycle (start, stop, drain, status, install, upgrade) version-pinned to the verified bundle copy, and inspect the daemon's per-project interaction-audit log (read-only)
tools
The tiny build-consumption client for the marshalld build server — submit a build job, bounded long-poll for its result, ping the daemon identity, and preflight registry-plus-liveness in one call; consumption only, never provisioning or enrolment