SKILL.md
Full skill instructions
Goal
Provide a deterministic plugin workflow using only direct nb plugin commands:
nb plugin list [--env <env>]nb plugin enable [--env <env>] <plugin...>nb plugin disable [--env <env>] <plugin...>
This skill must not route plugin operations through wrapper scripts or fallback channels.
Scope
- Inspect plugin inventory/state from CLI runtime (
nb plugin list [--env <env>]). - Enable plugins with
nb plugin enable [--env <env>] <plugin...>. - Disable plugins with
nb plugin disable [--env <env>] <plugin...>. - Always perform readback with
nb plugin listafter writes.
Non-Goals
- Do not use
docker compose exec ... yarn nocobase plugin .... - Do not use API action routes as fallback.
- Do not use legacy ctl commands or wrapper scripts for plugin operations.
- Do not support
install/removein this skill version.
Input Contract
| Input | Required | Default | Validation | Clarification Question |
|---|---|---|---|---|
action | yes | none | one of inspect/enable/disable | "Which action should I run: inspect, enable, or disable?" |
plugins | enable/disable: yes | none | non-empty string array | "Which plugin(s) should be changed?" |
runtime_env_name | no | current env | configured CLI env name | "Which env should I target?" |
base_dir | no | current working directory | existing path | "Which directory should nb commands run in?" |
execution_mode | no | safe | one of safe/fast | "Use safe mode or fast mode?" |
verify.timeout_seconds | no | 90 | integer 10..600 | "What verification timeout should I use?" |
Rules:
- Keep compact invocation:
Use $nocobase-plugin-manage <action> [plugin...]. safemode requires pre-state + post-state readback.- If user says "you decide", use defaults above.
Mandatory Clarification Gate
- Max clarification rounds:
2 - Max questions per round:
3 - Before
enable/disable,pluginsmust be resolved. - If required inputs are missing, stop mutation and ask.
Workflow
- Parse request and normalize to
inspect/enable/disable. - Capture pre-state via
nb plugin listwhenexecution_mode=safe. - Execute action with direct command:
inspect:nb plugin list [--env <env>]enable:nb plugin enable [--env <env>] <plugin...>disable:nb plugin disable [--env <env>] <plugin...>
- Readback polling via
nb plugin listuntil timeout. - Return structured output.
Safety Gate
- High-impact actions:
- disable auth/ACL/system-critical plugins
- batch disable in shared environments
- Secondary confirmation template:
- "Confirm execution:
{{action}}for{{plugins}}. Typeconfirmto continue." - Rollback guidance:
- failed disable: run
nb plugin enable [--env <env>] <plugin...> - failed enable: run
nb plugin disable [--env <env>] <plugin...>(only when user requests rollback)
Verification Checklist
actionandpluginsresolved.- Command path uses direct
nb pluginonly. - Pre-state captured in
safemode. - Post-state readback captured.
enable=> plugin showsenabled=true.disable=> plugin showsenabled=false.- Timeout reported as
pending_verification.
Minimal Test Scenarios
inspectusesnb plugin list.enableusesnb plugin enablethen readback bynb plugin list.disableusesnb plugin disablethen readback bynb plugin list.- Missing plugin input blocks mutation with clarification.
Output Contract
Always return:
requestcommandspre_statepost_stateverification(passed|failed|pending_verification)assumptionsnext_steps
Reference Loading Map
| Reference | Use When |
|---|---|
| V1 Runtime Contract | Mapping plugin actions to final nb plugin commands. |
| Test Playbook | Checking inspect/enable/disable behavior and fallback guarantees. |
