@stefanoginella/auto-bmad 0.1.15 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -46
- package/cli.js +6 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Automated (and very opinionated) BMAD pipeline orchestration for Claude Code.
|
|
6
6
|
|
|
7
|
-
Four sequential pipeline commands that drive the BMAD software development lifecycle — from planning through story delivery
|
|
7
|
+
Four sequential pipeline commands that drive the BMAD software development lifecycle — from planning through story delivery.
|
|
8
8
|
|
|
9
9
|
> 👀 The pipelines are quite long and token hungry (the story pipeline alone can run for more than 60 minutes). Some steps might seem redundant, but I am satisfied with the code quality and consistency I get out of this. I recommend having a Claude Code Max x5 or x20 subscription to not hit limits mid-run.
|
|
10
10
|
|
|
@@ -87,14 +87,12 @@ The pipelines are based on the [BMAD Method](https://github.com/bmad-code-org/BM
|
|
|
87
87
|
From the [`anthropics/claude-plugins-official`](https://github.com/anthropics/claude-plugins-official) marketplace.
|
|
88
88
|
|
|
89
89
|
- **context7** — Live documentation lookups for library APIs. Used during architecture creation (plan) and story development (story). Without it, agents rely on training data instead of current docs.
|
|
90
|
-
- **semgrep** — Security scanning in the story pipeline. Without it, the security scan step is skipped.
|
|
91
90
|
- **security-guidance** — Security best practice recommendations during story development.
|
|
92
91
|
- Any relevant `lsp` plugin(s) for your codebase — used during story development for linting and test feedback. They can improve the code quality and feedback loop, but are not strictly required since the pipelines also include manual lint and test steps.
|
|
93
92
|
|
|
94
93
|
### Required and optional CLI tools
|
|
95
94
|
|
|
96
|
-
- `jq` (required) - JSON processing in bash steps. Needed by the pipelines
|
|
97
|
-
- `semgrep` (optional) - security scanning. Needed if you have the semgrep plugin and want to run the security scan step in the story pipeline.
|
|
95
|
+
- `jq` (required) - JSON processing in bash steps. Needed by the pipelines.
|
|
98
96
|
- Any relevant CLI tool (optional) needed by your LSP plugin(s).
|
|
99
97
|
|
|
100
98
|
### Project Requirements
|
|
@@ -106,51 +104,12 @@ The pipelines expect BMAD configuration files in the project:
|
|
|
106
104
|
|
|
107
105
|
These files are normally created by the BMAD CLI when initializing BMAD in a project. The pipelines rely on the standard structure and paths defined by these configs, so custom configurations may require pipeline adjustments.
|
|
108
106
|
|
|
109
|
-
## 🔒 Hooks
|
|
110
|
-
|
|
111
|
-
### Safe Bash Auto-Approval (PreToolUse)
|
|
112
|
-
|
|
113
|
-
Auto-approves bash commands matching a known-safe and non-destructive prefix list to reduce false-positive sandbox prompts during autonomous pipeline execution. This is a lightweight heuristic, not a full sandbox bypass.
|
|
114
|
-
|
|
115
|
-
**Default safe list:**
|
|
116
|
-
|
|
117
|
-
| Group | Match | Commands |
|
|
118
|
-
|-------|-------|----------|
|
|
119
|
-
| **Git** | Exact | `git diff` · `git fetch` · `git log` · `git status` |
|
|
120
|
-
| | Prefix | `git -C` · `git add` · `git commit` · `git diff` · `git diff-tree` · `git fetch` · `git log` · `git rev-parse` · `git show` · `git status` · `git tag` |
|
|
121
|
-
| **Docker & Compose** | Exact | `docker compose build` · `docker compose config` · `docker compose down` · `docker compose images` · `docker compose logs` · `docker compose ls` · `docker compose ps` · `docker compose pull` · `docker compose top` · `docker compose up` · `docker compose version` · `docker images` · `docker ps` · `docker version` |
|
|
122
|
-
| | Prefix | `docker compose build` · `docker compose config` · `docker compose exec` · `docker compose logs` · `docker compose ps` · `docker compose pull` · `docker compose top` · `docker compose up` · `docker inspect` · `docker logs` · `docker ps` |
|
|
123
|
-
| **File reading** | Prefix | `cat` · `file` · `head` · `stat` · `tail` · `wc` |
|
|
124
|
-
| **File system** | Prefix | `chmod` · `cp` · `mkdir` · `mv` · `touch` |
|
|
125
|
-
| **Search & filtering** | Prefix | `find` · `grep` · `sort` · `uniq` |
|
|
126
|
-
| **Text processing** | Prefix | `awk` · `cut` · `diff` · `echo` · `jq` · `sed` · `tr` |
|
|
127
|
-
| **Path utilities** | Prefix | `basename` · `dirname` · `realpath` |
|
|
128
|
-
| **Directory listing** | Exact | `ls` · `pwd` · `tree` |
|
|
129
|
-
| | Prefix | `ls` · `tree` |
|
|
130
|
-
| **System & environment** | Exact | `date` · `uname` |
|
|
131
|
-
| | Prefix | `date` · `du` · `timeout` · `uname` · `which` |
|
|
132
|
-
| **Security scanning** | Prefix | `semgrep` |
|
|
133
|
-
|
|
134
|
-
**Customizing the safe list:** Create `.claude/auto-bmad-safe-prefixes.txt` in your project to add entries without modifying the plugin:
|
|
135
|
-
|
|
136
|
-
```
|
|
137
|
-
# Lines starting with "= " are exact matches (bare commands)
|
|
138
|
-
# All other lines are prefix matches (must end with a trailing space)
|
|
139
|
-
# Empty lines and comments (#) are ignored
|
|
140
|
-
|
|
141
|
-
= docker compose restart
|
|
142
|
-
npm install
|
|
143
|
-
npx vitest
|
|
144
|
-
```
|
|
145
|
-
|
|
146
107
|
## 🔐 Permissions
|
|
147
108
|
|
|
148
|
-
The pipelines run various bash commands (depending on the project), skills and MCP that Claude Code will prompt you to approve if they are not already approved.
|
|
149
|
-
|
|
150
|
-
Many bash commands are already pre-approved by the safe bash auto-approval hook, but some might still require manual approval, especially if you have custom steps or a unique project setup that involves commands not in the default safe list. For the first few runs in a new project, expect several approval prompts as the allow list builds up. After that, things stabilize and the pipelines run fully autonomously.
|
|
109
|
+
The pipelines run various bash commands (depending on the project), skills and MCP that Claude Code will prompt you to approve if they are not already approved. For the first few runs in a new project, expect several approval prompts as the allow list builds up. After that, things stabilize and the pipelines run more autonomously.
|
|
151
110
|
|
|
152
|
-
> ⚠️ Alternatively, you can run Claude Code in "dangerously skip permissions" mode (`--dangerously-skip-permissions`), but do so at your own risk — this disables **all** permission checks
|
|
111
|
+
> ⚠️ Alternatively, you can run Claude Code in "dangerously skip permissions" mode (`--dangerously-skip-permissions`), but do so at your own risk — this disables **all** permission checks. Only use it in an isolated environment like a VM or container.
|
|
153
112
|
|
|
154
113
|
## 📄 License
|
|
155
114
|
|
|
156
|
-
|
|
115
|
+
MIT
|
package/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
const {
|
|
2
|
+
const { execFileSync } = require("child_process");
|
|
3
3
|
const { createInterface } = require("readline");
|
|
4
4
|
|
|
5
5
|
const PLUGIN_NAME = "auto-bmad";
|
|
@@ -14,8 +14,8 @@ const YELLOW = noColor ? "" : "\x1b[33m";
|
|
|
14
14
|
const BOLD = noColor ? "" : "\x1b[1m";
|
|
15
15
|
const RESET = noColor ? "" : "\x1b[0m";
|
|
16
16
|
|
|
17
|
-
function run(
|
|
18
|
-
return
|
|
17
|
+
function run(args, opts = {}) {
|
|
18
|
+
return execFileSync(args[0], args.slice(1), { stdio: "inherit", ...opts });
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
function claudeExists() {
|
|
@@ -48,7 +48,7 @@ async function main() {
|
|
|
48
48
|
if (process.argv.includes("--uninstall")) {
|
|
49
49
|
console.log(`Uninstalling ${PLUGIN_NAME}...`);
|
|
50
50
|
try {
|
|
51
|
-
run(
|
|
51
|
+
run(["claude", "plugin", "uninstall", `${PLUGIN_NAME}@${MARKETPLACE}`]);
|
|
52
52
|
console.log(`${GREEN}${PLUGIN_NAME} uninstalled.${RESET}`);
|
|
53
53
|
} catch {
|
|
54
54
|
console.log(`${PLUGIN_NAME} is not installed.`);
|
|
@@ -74,12 +74,12 @@ async function main() {
|
|
|
74
74
|
|
|
75
75
|
// Add marketplace (idempotent)
|
|
76
76
|
console.log(`Adding marketplace ${MARKETPLACE_REPO}...`);
|
|
77
|
-
try { run(
|
|
77
|
+
try { run(["claude", "plugin", "marketplace", "add", MARKETPLACE_REPO], { stdio: "pipe" }); } catch {}
|
|
78
78
|
|
|
79
79
|
// Install plugin
|
|
80
80
|
console.log("Installing plugin...");
|
|
81
81
|
try {
|
|
82
|
-
run(
|
|
82
|
+
run(["claude", "plugin", "install", `${PLUGIN_NAME}@${MARKETPLACE}`, "--scope", scope]);
|
|
83
83
|
console.log();
|
|
84
84
|
console.log(`${GREEN}${BOLD}${PLUGIN_NAME} installed successfully.${RESET}`);
|
|
85
85
|
console.log();
|