no-more-configs 1.3.1 → 1.3.2

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.
Files changed (2) hide show
  1. package/README.md +655 -22
  2. package/package.json +26 -5
package/README.md CHANGED
@@ -1,44 +1,677 @@
1
- # no-more-configs
1
+ <div align="center">
2
2
 
3
- One-command installer & updater for [No More Configs](https://github.com/agomusio/no-more-configs) — a clone-and-go VS Code devcontainer built for Claude Code.
3
+ # NO MORE CONFIGS
4
4
 
5
- ## Install
5
+ **A clone-and-go VS Code devcontainer built for Claude Code. Codex CLI included as an optional second agent.**
6
+
7
+ **Install. Open. Code.**
8
+
9
+ **Free, transparent, and fully customizable. No subscription walls, no black-box abstractions — just a devcontainer you own and control. For developers who'd rather read the source than trust the vendor.**
10
+
11
+ [![GitHub stars](https://img.shields.io/github/stars/agomusio/no-more-configs?style=for-the-badge&logo=github&color=181717)](https://github.com/agomusio/no-more-configs)
12
+ [![License](https://img.shields.io/badge/license-MIT-blue?style=for-the-badge)](LICENSE)
13
+ [![Version](https://img.shields.io/github/v/release/agomusio/no-more-configs?style=for-the-badge&color=brightgreen)](https://github.com/agomusio/no-more-configs/releases/latest)
14
+ [![npm](https://img.shields.io/npm/v/no-more-configs?style=for-the-badge&logo=npm&color=CB3837)](https://www.npmjs.com/package/no-more-configs)
15
+
16
+ <br>
17
+
18
+ <pre>npx no-more-configs@latest</pre>
19
+
20
+ **Works on Windows (WSL2 + Docker Desktop) and Linux (Docker Engine).**
21
+
22
+ <br>
23
+
24
+ _"I spent weekends configuring Claude, Docker, and everything else — now you don't have to."_
25
+
26
+ <br>
27
+
28
+ [What You Get](#what-you-get) · [Quick Start](#quick-start) · [How It Works](#how-it-works) · [Plugin System](#plugin-system) · [Agent Config](#agent-config)
29
+ <br>
30
+ [Architecture](#architecture) · [Firewall](#firewall) · [MCP Servers](#mcp-servers) · [GSD Framework](#gsd-framework) · [Langfuse Tracing](#langfuse-tracing)
31
+ <br>
32
+ [Shell Shortcuts](#shell-shortcuts) · [Project Structure](#project-structure) · [Customization](#customization) · [Troubleshooting](#troubleshooting) · [Known Issues](#known-issues)
33
+
34
+ </div>
35
+
36
+ <div align="center">
37
+ <pre>
38
+ | You Container |
39
+ | │ ├── Claude Code CLI + Codex CLI |
40
+ | ├── config.json ──────────► ├── Firewall domains |
41
+ | │ (settings) ├── VS Code settings |
42
+ | │ ├── MCP server config |
43
+ | ├── secrets.json ─────────► ├── Claude + Codex auth tokens |
44
+ | │ (credentials) ├── Git identity |
45
+ | │ ├── Plugin env vars (hydrated) |
46
+ | ├── agent-config/plugins/ ► └── Hooks, commands, agents, skills, MCP |
47
+ | │ (self-registering) |
48
+ | └── Open in Container ────► Done. |
49
+ </pre>
50
+ </div>
51
+
52
+ ---
53
+
54
+ ## What You Get
55
+
56
+ | Feature | Description | Status |
57
+ | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | -------------- |
58
+ | **Claude Code** | Anthropic's agentic coding CLI — Opus 4.6, high effort, permissions bypassed. **Only requires a Claude Pro/Max subscription.** | Out of the box |
59
+ | **Codex CLI** | OpenAI's agentic coding CLI — GPT-5.3-Codex, full-auto mode. Optional, requires separate ChatGPT Plus/Pro subscription. | Out of the box |
60
+ | **Plugin system** | Drop a directory with a `plugin.json` to register hooks, env vars, commands, agents, MCP servers | Out of the box |
61
+ | **GSD framework** | 30+ slash commands and 11 specialized agents for structured development | Out of the box |
62
+ | **BMAD Method** | AI-driven agile development framework — 21+ specialized agents, 50+ guided workflows (PRD, architecture, epics, QA) | Out of the box |
63
+ | **PostgreSQL client** | `psql` CLI for connecting to Postgres databases | Out of the box |
64
+ | **iptables firewall** | Default-deny network with domain whitelist (47 core domains), disable via `config.json` | Out of the box |
65
+ | **Oh-My-Zsh** | Powerlevel10k, fzf, git-delta, GitHub CLI | Out of the box |
66
+ | **Langfuse observability** | Self-hosted tracing — every conversation traced to a local dashboard | Opt-in |
67
+ | **MCP gateway** | Model Context Protocol tool access via Docker MCP Gateway | Opt-in |
68
+ | **Codex MCP server** | Let Claude delegate to Codex mid-session | Opt-in |
69
+
70
+ ---
71
+
72
+ ## Quick Start
73
+
74
+ ### Prerequisites
75
+
76
+ - [Node.js](https://nodejs.org/) >= 18 (for npx)
77
+ - [VS Code](https://code.visualstudio.com/) with the [Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension
78
+
79
+ **Windows:**
80
+ - [WSL2](https://learn.microsoft.com/en-us/windows/wsl/install) enabled
81
+ - [Docker Desktop for Windows](https://www.docker.com/products/docker-desktop/) running (WSL2 backend)
82
+
83
+ **Linux:**
84
+ - [Docker Engine](https://docs.docker.com/engine/install/) with [buildx plugin](https://docs.docker.com/build/install-buildx/)
85
+
86
+ ### 1. Install and Open
87
+
88
+ ```bash
89
+ npx no-more-configs@latest
90
+ ```
91
+
92
+ Or clone manually:
93
+
94
+ ```bash
95
+ git clone https://github.com/agomusio/no-more-configs.git
96
+ cd no-more-configs
97
+ code .
98
+ ```
99
+
100
+ This clones the repo, prints next steps, and tries to open VS Code automatically. You can also specify a directory: `npx no-more-configs my-workspace`.
101
+
102
+ > **Alternative:** `git clone https://github.com/agomusio/no-more-configs.git && cd no-more-configs && code .`
103
+
104
+ VS Code will detect the devcontainer and prompt to reopen in container. Click **Reopen in Container** (or use `Ctrl+Shift+P` → `Dev Containers: Reopen in Container`).
105
+
106
+ First build takes a few minutes. Subsequent opens are fast.
107
+
108
+ ### 2. Authenticate
109
+
110
+ Once the container is running, authenticate Claude Code:
111
+
112
+ ```bash
113
+ claude # Follow OAuth prompts (requires Claude Pro/Max subscription)
114
+ ```
115
+
116
+ Optionally, authenticate Codex CLI if you have a ChatGPT Plus/Pro subscription:
6
117
 
7
118
  ```bash
8
- npx no-more-configs
119
+ codex # Follow OAuth prompts (optional — separate subscription)
9
120
  ```
10
121
 
11
- Clones the repo, prints next steps, and tries to open VS Code automatically.
122
+ Set your git identity:
12
123
 
13
- ## Update
124
+ ```bash
125
+ git config --global user.name "Your Name"
126
+ git config --global user.email "you@example.com"
127
+ ```
14
128
 
15
- Run the same command inside (or pointing at) an existing install:
129
+ Then capture everything so it survives container rebuilds:
16
130
 
17
131
  ```bash
18
- npx no-more-configs
132
+ save-secrets
19
133
  ```
20
134
 
21
- If devcontainer files changed, you'll be advised to rebuild the container.
135
+ ### 3. Clone Your Projects
22
136
 
23
- ## Usage
137
+ Your repos live in `projects/` — clone them there and register them in `config.json` so VS Code's git scanner picks them up:
24
138
 
139
+ ```bash
140
+ cd /workspace/projects
141
+ git clone https://github.com/you/your-repo.git
25
142
  ```
26
- npx no-more-configs [directory] # Install or update (default: no-more-configs)
27
- npx no-more-configs --help # Show help
28
- npx no-more-configs --version # Show version
143
+
144
+ Then add the path to `config.json → vscode.git_scan_paths`:
145
+
146
+ ```json
147
+ { "vscode": { "git_scan_paths": ["projects/your-repo"] } }
29
148
  ```
30
149
 
31
- ## Prerequisites
150
+ Each project can have its own `CLAUDE.md` for project-specific agent instructions, and `.claude/plugins/` for project-scoped plugins that are auto-installed alongside the global ones.
32
151
 
33
- - [Node.js](https://nodejs.org/) >= 18 (for npx)
34
- - [Git](https://git-scm.com/)
35
- - [VS Code](https://code.visualstudio.com/) with the [Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension
36
- - [Docker Desktop](https://www.docker.com/products/docker-desktop/) (Windows) or [Docker Engine](https://docs.docker.com/engine/install/) (Linux)
152
+ ### 4. Start the Langfuse Stack (Optional)
37
153
 
38
- ## What You Get
154
+ If you want conversation tracing:
155
+
156
+ ```bash
157
+ langfuse-setup
158
+ ```
159
+
160
+ This generates credentials (into `secrets.json`), starts the stack, and verifies health. View traces at `http://localhost:3052`.
161
+
162
+ ### 5. Done
163
+
164
+ Start coding:
165
+
166
+ ```bash
167
+ claude # Claude Code (Opus 4.6, high effort, permissions bypassed)
168
+ clauder # Resume a recent Claude session
169
+ codex # Codex CLI (GPT-5.3-Codex, full-auto mode)
170
+ codexr # Resume a recent Codex session
171
+ ```
172
+
173
+ Your projects go in `projects/`. Clone repos there and they'll be auto-detected by VS Code's git scanner.
174
+
175
+ ### 5. Updating
176
+
177
+ **From the host** (outside the container):
178
+
179
+ ```bash
180
+ npx no-more-configs@latest
181
+ ```
182
+
183
+ **From inside the container:**
184
+
185
+ ```bash
186
+ nmc-update
187
+ ```
188
+
189
+ ## Both pull the latest changes and tell you if a container rebuild is needed. The container shell also shows a notification banner when a new version is available.
190
+
191
+ ## How It Works
192
+
193
+ ### Two-File Configuration
194
+
195
+ Everything is driven by two files at the repo root:
196
+
197
+ **`config.json`** — non-secret settings (created by `save-config`):
198
+
199
+ ```json
200
+ {
201
+ "firewall": { "extra_domains": ["your-api.example.com"] },
202
+ "codex": { "model": "gpt-5.3-codex", "skip_dirs": [] },
203
+ "langfuse": { "host": "http://host.docker.internal:3052" },
204
+ "vscode": { "git_scan_paths": ["projects/my-project"] },
205
+ "mcp_servers": {
206
+ "mcp-gateway": { "enabled": false },
207
+ "codex": { "enabled": false, "targets": ["claude"] }
208
+ },
209
+ "plugins": { "nmc-langfuse-tracing": { "enabled": false } }
210
+ }
211
+ ```
212
+
213
+ **`secrets.json`** (gitignored) — credentials and plugin secrets:
214
+
215
+ ```json
216
+ {
217
+ "git": { "name": "Your Name", "email": "you@example.com" },
218
+ "claude": { "credentials": { "...auth tokens..." } },
219
+ "codex": { "auth": { "...oauth tokens..." } },
220
+ "gh": { "oauth_token": "...", "user": "...", "git_protocol": "https" },
221
+ "npm": { "auth_token": "npm_..." },
222
+ "infra": {
223
+ "postgres_password": "...", "encryption_key": "...", "nextauth_secret": "...",
224
+ "salt": "...", "clickhouse_password": "...", "minio_root_password": "...",
225
+ "redis_auth": "...", "langfuse_project_public_key": "...",
226
+ "langfuse_project_secret_key": "...", "langfuse_user_email": "...",
227
+ "langfuse_user_name": "...", "langfuse_user_password": "...",
228
+ "langfuse_org_name": "..."
229
+ },
230
+ "nmc-langfuse-tracing": { "LANGFUSE_HOST": "...", "LANGFUSE_PUBLIC_KEY": "...", "LANGFUSE_SECRET_KEY": "..." }
231
+ }
232
+ ```
233
+
234
+ | Key | Source | Captured by |
235
+ | ---------------------- | ------------------------------------ | --------------------------------- |
236
+ | `git` | `git config --global` | `save-secrets` |
237
+ | `claude` | `~/.claude/.credentials.json` | `save-secrets` |
238
+ | `codex` | `~/.codex/auth.json` | `save-secrets` |
239
+ | `gh` | `~/.config/gh/hosts.yml` | `save-secrets` |
240
+ | `npm` | `~/.npmrc` | `save-secrets` |
241
+ | `infra` | `infra/.env` (Langfuse stack) | `langfuse-setup` → `save-secrets` |
242
+ | `nmc-langfuse-tracing` | Derived from `infra` + `config.json` | `save-secrets` |
243
+
244
+ Plugin secrets use namespaced keys (`secrets.json["plugin-name"]["TOKEN"]`). The `infra` section holds Langfuse stack infrastructure secrets. Run `langfuse-setup` to generate these automatically — `save-secrets` derives the plugin namespace from the infra keys.
245
+
246
+ On container creation, `install-agent-config.sh` reads both files, discovers plugins, hydrates `{{TOKEN}}` placeholders, and generates all runtime configuration. On container start, the firewall and MCP servers are initialized from the generated files.
247
+
248
+ > **Important:** All hooks, env vars, and functional settings must be in `settings.json`. Never use `settings.local.json` for hooks or env vars — Claude Code does not execute hooks defined there. The install script merges everything (template + plugins + GSD) into `~/.claude/settings.json`.
249
+
250
+ ### Credential Persistence
251
+
252
+ ```
253
+ authenticate Claude/Codex → set git identity → save-secrets → secrets.json → rebuild → auto-restored
254
+ ```
255
+
256
+ `save-secrets` captures live Claude credentials, Codex credentials, git identity, infrastructure secrets, and derives plugin secret namespaces. The install script restores them on the next rebuild. Delete `secrets.json` to start fresh.
257
+
258
+ ### Pre-configured Defaults
259
+
260
+ Both CLI agents are pre-configured for container use — no interactive prompts on subsequent starts:
261
+
262
+ | Setting | Claude Code | Codex CLI |
263
+ | --------------- | ------------------------------------------ | ---------------------------------------------- |
264
+ | **Permissions** | Bypassed (`bypassPermissions` in settings) | Bypassed (`approval_policy = "never"`) |
265
+ | **Model** | Opus 4.6 (high effort) | GPT-5.3-Codex (configurable via `config.json`) |
266
+ | **Credentials** | `~/.claude/.credentials.json` | `~/.codex/auth.json` (file-based, no keyring) |
267
+ | **MCP** | `~/.claude/.mcp.json` | `config.toml [mcp_servers.*]` |
268
+ | **Onboarding** | Skipped when credentials present | Workspace pre-trusted |
269
+
270
+ ---
271
+
272
+ ## Plugin System
273
+
274
+ Plugins are self-registering bundles discovered from `agent-config/plugins/*/plugin.json`. Each manifest can declare:
275
+
276
+ - **hooks** — registered in settings.json (multiple plugins accumulate on same events)
277
+ - **env** — injected with `{{TOKEN}}` placeholder hydration from `secrets.json[plugin-name][TOKEN]`
278
+ - **mcp_servers** — merged into `.mcp.json` with `_source` tagging for persistence
279
+ - **files** — skills, hooks, commands, agents copied to `~/.claude/` (skills and commands also mirrored to `~/.codex/`)
280
+
281
+ ### Creating a Plugin
282
+
283
+ ```
284
+ agent-config/plugins/my-plugin/
285
+ ├── plugin.json # Manifest (required)
286
+ ├── hooks/ # Hook scripts
287
+ ├── commands/ # Slash commands (*.md)
288
+ ├── agents/ # Agent definitions (*.md)
289
+ └── skills/ # Skills directories
290
+ ```
291
+
292
+ Minimal `plugin.json`:
293
+
294
+ ```json
295
+ {
296
+ "name": "my-plugin",
297
+ "version": "1.0.0",
298
+ "description": "What this plugin does",
299
+ "hooks": {
300
+ "Stop": [
301
+ {
302
+ "type": "command",
303
+ "command": "python3 /home/node/.claude/hooks/my_hook.py"
304
+ }
305
+ ]
306
+ },
307
+ "env": {
308
+ "MY_VAR": "value",
309
+ "MY_SECRET": "{{MY_SECRET}}"
310
+ }
311
+ }
312
+ ```
313
+
314
+ Only declare fields you use — no empty arrays needed.
315
+
316
+ ### Plugin Control
317
+
318
+ Most plugins are enabled by default. Some opt-in plugins (like `nmc-langfuse-tracing`) are disabled by default. Enable or disable any plugin via `config.json`:
319
+
320
+ ```json
321
+ { "plugins": { "my-plugin": { "enabled": false } } }
322
+ ```
323
+
324
+ Override env vars via `config.json`:
325
+
326
+ ```json
327
+ { "plugins": { "my-plugin": { "env": { "MY_VAR": "override-value" } } } }
328
+ ```
329
+
330
+ ### Validation
331
+
332
+ The install script validates plugins and provides clear feedback:
333
+
334
+ - Missing hook scripts → plugin skipped with warning
335
+ - File conflicts between plugins → first-wins with warning
336
+ - Invalid `plugin.json` → friendly error + raw parse details
337
+ - Unresolved `{{TOKEN}}` placeholders → warning (non-fatal)
338
+ - All warnings recapped after install summary
339
+
340
+ ### Included Plugins
341
+
342
+ | Plugin | Description |
343
+ | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
344
+ | `nmc` | NMC system status command (`/nmc`) |
345
+ | `nmc-langfuse-tracing` | Claude Code conversation tracing to Langfuse (Stop hook + env vars) |
346
+ | `plugin-dev` | Plugin development guidance ([source](https://github.com/anthropics/claude-code/tree/main/plugins/plugin-dev)) |
347
+ | `nmc-ralph-loop` | Ralph Wiggum technique for iterative, self-referential AI development loops (forked from [ralph-wiggum](https://github.com/anthropics/claude-code/tree/main/plugins/ralph-wiggum)) |
348
+ | `frontend-design` | Frontend design skills and patterns ([source](https://github.com/anthropics/claude-code/tree/main/plugins/frontend-design)) |
349
+
350
+ ---
351
+
352
+ ## Agent Config
353
+
354
+ The `agent-config/` directory is the version-controlled source of truth:
355
+
356
+ - **`settings.json.template`** — Permissions-only template (hooks and env come from plugins)
357
+ - **`plugins/`** — Self-registering plugin bundles with `plugin.json` manifests
358
+ - **`skills/`** — Standalone skills copied to `~/.claude/skills/` and `~/.codex/skills/`
359
+ - **`commands/`** — Standalone slash commands copied to `~/.claude/commands/` and `~/.codex/prompts/`
360
+ - **`mcp-templates/`** — MCP server templates (mcp-gateway, codex) with placeholder hydration
361
+
362
+ Add your own skills by creating a directory under `agent-config/skills/` with a `SKILL.md` file. They'll be installed to both Claude and Codex automatically on rebuild. Commands are also mirrored — `~/.claude/commands/` for Claude and `~/.codex/prompts/` for Codex (with Claude-specific frontmatter stripped).
363
+
364
+ ---
365
+
366
+ ## Architecture
367
+
368
+ ```
369
+ Host (Docker Desktop)
370
+ ├── VS Code → Dev Container (Debian 12 Bookworm / Node 20)
371
+ │ ├── Claude Code + Codex CLI + plugins + GSD + BMAD + psql
372
+ │ ├── iptables whitelist firewall
373
+ │ └── /var/run/docker.sock (from host)
374
+
375
+ └── Sidecar Stack (Docker-outside-of-Docker)
376
+ ├── langfuse-web :3052
377
+ ├── langfuse-worker :3030
378
+ ├── docker-mcp-gateway :8811
379
+ ├── postgres :5433
380
+ ├── clickhouse :8124 (HTTP) / :9000 (native)
381
+ ├── redis :6379
382
+ └── minio :9090 (API) / :9091 (console)
383
+ ```
384
+
385
+ The dev container and sidecar services are sibling containers on the same Docker engine. They communicate via `host.docker.internal`.
386
+
387
+ ---
388
+
389
+ ## Firewall
390
+
391
+ Default policy is **DROP**. Only whitelisted domains are reachable.
392
+
393
+ To disable the firewall entirely, set `firewall.enabled` to `false` in `config.json`:
394
+
395
+ ```json
396
+ { "firewall": { "enabled": false } }
397
+ ```
398
+
399
+ Rebuild the container to apply. When disabled, all iptables rules are flushed and policies set to ACCEPT.
400
+
401
+ **Always included** (47 core domains): Anthropic API, GitHub, npm, PyPI, Debian repos, VS Code Marketplace, Azure Blob Storage (VS Code extensions), OpenAI (API + Auth + Platform + ChatGPT), Google AI API, Cloudflare, Amazon, Google Fonts, jsDelivr CDN, Vercel, and cloud Postgres providers (Supabase, Neon, Aiven dashboards — add your specific DB endpoint to `extra_domains`).
402
+
403
+ **Auto-generated**: Per-publisher VS Code extension CDN domains are derived from `devcontainer.json` so extensions install without firewall errors.
404
+
405
+ **User-configured**: Add domains to `config.json → firewall.extra_domains` — they're appended automatically on rebuild.
406
+
407
+ To temporarily allow a domain inside the container:
408
+
409
+ ```bash
410
+ IP=$(dig +short example.com | tail -1)
411
+ sudo iptables -I OUTPUT -d "$IP" -j ACCEPT
412
+ ```
413
+
414
+ To refresh DNS for all firewall domains without restarting:
415
+
416
+ ```bash
417
+ sudo /usr/local/bin/refresh-firewall-dns.sh
418
+ ```
419
+
420
+ ---
421
+
422
+ ## MCP Servers
423
+
424
+ MCP servers come from two sources:
425
+
426
+ 1. **Templates** in `agent-config/mcp-templates/`, enabled in `config.json → mcp_servers`
427
+ 2. **Plugins** declaring `mcp_servers` in their `plugin.json` manifest
428
+
429
+ | Server | Source | Description |
430
+ | ------------- | -------- | ---------------------------------------------------------------------------------------- |
431
+ | `mcp-gateway` | Template | Docker MCP Gateway at `127.0.0.1:8811` |
432
+ | `codex` | Template | Codex CLI as MCP server — gives Claude access to `codex`, `review`, `listSessions` tools |
433
+
434
+ Enable a template server:
435
+
436
+ ```json
437
+ {
438
+ "mcp_servers": {
439
+ "mcp-gateway": { "enabled": false },
440
+ "codex": { "enabled": true, "targets": ["claude"] }
441
+ }
442
+ }
443
+ ```
444
+
445
+ ### Server Targeting
446
+
447
+ By default, enabled MCP servers are configured for both Claude Code (`~/.claude/.mcp.json`) and Codex CLI (`config.toml [mcp_servers.*]`). To restrict a server to a specific agent, add `targets`:
448
+
449
+ ```json
450
+ { "mcp-gateway": { "enabled": true, "targets": ["codex"] } }
451
+ ```
452
+
453
+ Valid targets: `"claude"`, `"codex"`. Default (when `targets` is omitted): both agents. The `codex` MCP server template should always target `["claude"]` since it would be circular for Codex to have itself as an MCP server.
454
+
455
+ Plugin MCP servers are registered automatically and persist across container restarts. The `mcp-setup` command regenerates base template servers on every container start for both agents while preserving plugin servers.
456
+
457
+ ---
458
+
459
+ ## GSD Framework
460
+
461
+ [Get Shit Done](https://github.com/glittercowboy/get-shit-done) is a project management framework for Claude Code that breaks work into atomic tasks sized for fresh context windows, while logging everything in `.planning/` via Markdown.
462
+
463
+ **Key commands:** `/gsd:new-project`, `/gsd:plan-phase`, `/gsd:execute-phase`, `/gsd:verify-work`, `/gsd:progress`
464
+
465
+ Run `/gsd:help` inside a Claude session for the full command list.
466
+
467
+ ---
468
+
469
+ ## BMAD Method
470
+
471
+ [BMAD Method](https://github.com/bmad-code-org/BMAD-METHOD) (Breakthrough Method of Agile AI-driven Development) is a CLI-installable framework that provides 21+ specialized AI agents with role-based personas (PM, Architect, Developer, QA, UX Designer, etc.) and 50+ guided workflows for PRD creation, architecture design, epic/story generation, implementation, and testing.
472
+
473
+ BMAD is installed per-project into `_bmad/` and registers slash commands in `.claude/commands/`. The CLI is available globally in the container.
474
+
475
+ **Key commands:** `bmad install`, `bmad status`, `bmad list:agents`, `bmad list:expansions`
476
+
477
+ Run `/bmad-help` inside a Claude session for the full command list.
478
+
479
+ ---
480
+
481
+ ## Langfuse Tracing
482
+
483
+ The `nmc-langfuse-tracing` plugin traces every Claude conversation to your local Langfuse instance. It registers a Stop hook that reads transcript files, groups messages into turns, and sends structured traces with generation and tool spans.
484
+
485
+ Disabled by default. To enable, set in `config.json → plugins`:
486
+
487
+ ```json
488
+ { "plugins": { "nmc-langfuse-tracing": { "enabled": true } } }
489
+ ```
490
+
491
+ Then start the Langfuse stack and view traces at `http://localhost:3052`.
492
+
493
+ ### Hook Logs
494
+
495
+ ```bash
496
+ tail -50 ~/.claude/state/langfuse_hook.log
497
+ ```
498
+
499
+ ---
500
+
501
+ ## Shell Shortcuts
502
+
503
+ | Command | Action |
504
+ | ---------------- | ----------------------------------------------------------------------- |
505
+ | `claude` | Claude Code — Opus 4.6, high effort, permissions bypassed |
506
+ | `clauder` | Alias for `claude --resume` |
507
+ | `codex` | Codex CLI — GPT-5.3-Codex, full-auto, no sandbox |
508
+ | `codexr` | Alias for `codex resume` |
509
+ | `bmad` | BMAD Method CLI — install modules, check status, list agents |
510
+ | `psql` | PostgreSQL client CLI |
511
+ | `save-secrets` | Capture live credentials, git identity, and keys to `secrets.json` |
512
+ | `langfuse-setup` | Generate secrets, start Langfuse stack, verify health |
513
+ | `nmc-update` | Pull latest NMC changes, detect if container rebuild is needed |
514
+ | `mcp-setup` | Regenerate MCP configs (Claude + Codex) and health-check gateway |
515
+ | `slc` | Show postCreate lifecycle log (`/tmp/devcontainer-logs/postCreate.log`) |
516
+ | `sls` | Show postStart lifecycle log (`/tmp/devcontainer-logs/postStart.log`) |
517
+
518
+ ---
519
+
520
+ ## Project Structure
521
+
522
+ ```
523
+ /workspace/
524
+ ├── .devcontainer/ # Container definition and lifecycle scripts
525
+ │ ├── Dockerfile
526
+ │ ├── devcontainer.json
527
+ │ ├── install-agent-config.sh # Master config generator (plugins, hooks, env, MCP)
528
+ │ ├── init-firewall.sh
529
+ │ └── ...
530
+
531
+ ├── agent-config/ # Version-controlled agent config source
532
+ │ ├── settings.json.template # Permissions-only template
533
+ │ ├── plugins/ # Self-registering plugin bundles
534
+ │ │ ├── nmc-langfuse-tracing/ # Langfuse conversation tracing
535
+ │ │ ├── nmc/ # NMC system status
536
+ │ │ └── .../ # Your plugins here
537
+ │ ├── mcp-templates/ # MCP server templates (mcp-gateway, codex)
538
+ │ ├── skills/ # Standalone skills (Claude + Codex)
539
+ │ └── commands/ # Standalone slash commands
540
+
541
+
542
+ ├── infra/ # Langfuse + MCP gateway stack
543
+ │ ├── docker-compose.yml
544
+ │ ├── data/ # Persistent bind mounts (gitignored)
545
+ │ └── mcp/mcp.json
546
+
547
+ └── projects/ # Your repos go here
548
+ ```
549
+
550
+ ---
551
+
552
+ ## Customization
553
+
554
+ ### Adding Firewall Domains
555
+
556
+ Edit `config.json`:
557
+
558
+ ```json
559
+ { "firewall": { "extra_domains": ["api.example.com", "cdn.example.com"] } }
560
+ ```
561
+
562
+ Rebuild the container to apply.
563
+
564
+ ### Changing the Codex Model
565
+
566
+ Edit `config.json`:
567
+
568
+ ```json
569
+ { "codex": { "model": "o4-mini" } }
570
+ ```
571
+
572
+ Rebuild the container. Default is `gpt-5.3-codex`.
573
+
574
+ ### Disabling Codex for Specific Projects
575
+
576
+ Project `.claude/` content (skills and commands) is automatically mirrored to Codex's global directories on rebuild. To exclude specific projects:
577
+
578
+ ```json
579
+ { "codex": { "skip_dirs": ["my-claude-only-project"] } }
580
+ ```
581
+
582
+ Values are project directory names under `projects/`. Excluded projects still get `.codex/` gitignored as a placeholder.
583
+
584
+ ### Adding Skills
585
+
586
+ Create `agent-config/skills/my-skill/SKILL.md` with a YAML front matter block and skill content. It'll be copied to both `~/.claude/skills/` and `~/.codex/skills/` on rebuild.
587
+
588
+ ### Adding Plugins
589
+
590
+ Create `agent-config/plugins/my-plugin/plugin.json` with a manifest declaring hooks, env vars, commands, agents, or MCP servers. See the [Plugin System](#plugin-system) section for details.
591
+
592
+ ### Adding Git Repos
593
+
594
+ ```bash
595
+ cd /workspace/projects && git clone <url>
596
+ ```
597
+
598
+ Add the path to `config.json → vscode.git_scan_paths` for VS Code git integration.
599
+
600
+ ### Adding MCP Servers
601
+
602
+ Via templates:
603
+
604
+ 1. Create a template in `agent-config/mcp-templates/`
605
+ 2. Enable it in `config.json → mcp_servers`
606
+ 3. Rebuild
607
+
608
+ Via plugins:
609
+
610
+ 1. Add `mcp_servers` to your plugin's `plugin.json`
611
+ 2. Add secrets to `secrets.json` under the plugin name
612
+ 3. Rebuild
613
+
614
+ ---
615
+
616
+ ## Troubleshooting
617
+
618
+ ### Langfuse unreachable / port 3052 blocked
619
+
620
+ WSL2's networking can enter a broken state (Windows only). Fix:
621
+
622
+ ```powershell
623
+ # PowerShell as Administrator
624
+ wsl --shutdown
625
+ Restart-Service hns
626
+ ```
627
+
628
+ Reopen VS Code and the container.
629
+
630
+ ### Traces not appearing
631
+
632
+ 1. Inside a Claude session, check `echo $TRACE_TO_LANGFUSE` (should be `true` — this env var is set in Claude's `settings.json`, not in the shell)
633
+ 2. Check `curl http://host.docker.internal:3052/api/public/health`
634
+ 3. Check `tail -20 ~/.claude/state/langfuse_hook.log`
635
+
636
+ ### Plugin warnings during install
637
+
638
+ Check the install output for the `--- Warnings Recap ---` section. Common issues:
639
+
640
+ - Missing hook script file → plugin skipped (check the file path in your plugin.json)
641
+ - Unresolved `{{TOKEN}}` → add the secret to `secrets.json` under your plugin name
642
+ - File conflict → two plugins provide the same file (first alphabetically wins)
643
+
644
+ ### Docker socket permission denied
645
+
646
+ ```bash
647
+ sudo chmod 666 /var/run/docker.sock
648
+ ```
649
+
650
+ ### Git "dubious ownership" errors
651
+
652
+ Handled automatically. If it recurs: `git config --global --add safe.directory '*'`
653
+
654
+ ---
655
+
656
+ ## Known Issues
657
+
658
+ | Issue | Cause | Status |
659
+ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
660
+ | Claude Code Edit tool throws `ENOENT: no such file or directory` on files that exist (Windows only) | WSL2 bind mount (C:\ → 9P → container) causes stale file metadata; the Edit tool's freshness check sees a mismatched mtime and rejects the write | Intermittent, self-healing (re-read + retry succeeds). Likely resolved in a future Claude Code update. |
661
+ | Lifecycle terminal closes before you can read output | VS Code dismisses the postCreate/postStart terminal on completion | Use `slc` / `sls` aliases to view saved logs from `/tmp/devcontainer-logs/` |
662
+
663
+ ---
664
+
665
+ <div align="center">
666
+
667
+ ## Acknowledgments
668
+
669
+ Built on the shoulders of:
670
+
671
+ **[Claude Code](https://github.com/anthropics/claude-code)** (devcontainer, plugins, hooks framework) · **[claude-code-langfuse-template](https://github.com/doneyli/claude-code-langfuse-template)** · **[Get Shit Done](https://github.com/glittercowboy/get-shit-done)** · **[codex-mcp-server](https://github.com/tuannvm/codex-mcp-server)**
39
672
 
40
- A fully configured devcontainer with Claude Code, Codex CLI, iptables firewall, plugin system, Langfuse tracing, and more. See the [main README](https://github.com/agomusio/no-more-configs) for details.
673
+ <br>
41
674
 
42
- ## License
675
+ MIT License · Copyright (c) 2026 agomusio
43
676
 
44
- MIT
677
+ </div>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "no-more-configs",
3
- "version": "1.3.1",
4
- "description": "One-command installer for No More Configsa clone-and-go VS Code devcontainer for Claude Code",
3
+ "version": "1.3.2",
4
+ "description": "Zero-config devcontainer for Claude Code & Codex CLI firewall, plugins, Langfuse tracing, MCP servers, and 80+ slash commands out of the box. One command to install.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "no-more-configs": "index.js"
@@ -10,17 +10,38 @@
10
10
  "index.js",
11
11
  "README.md"
12
12
  ],
13
+ "scripts": {
14
+ "prepack": "cp ../README.md README.md"
15
+ },
13
16
  "engines": {
14
17
  "node": ">=18"
15
18
  },
16
19
  "keywords": [
17
20
  "claude",
18
21
  "claude-code",
22
+ "codex",
23
+ "codex-cli",
19
24
  "devcontainer",
20
25
  "vscode",
21
- "codex",
22
- "ai",
23
- "coding-assistant"
26
+ "docker",
27
+ "ai-coding",
28
+ "ai-agent",
29
+ "mcp",
30
+ "model-context-protocol",
31
+ "langfuse",
32
+ "anthropic",
33
+ "openai",
34
+ "developer-tools",
35
+ "dev-environment",
36
+ "firewall",
37
+ "plugin-system",
38
+ "gsd",
39
+ "bmad",
40
+ "wsl2",
41
+ "linux",
42
+ "arch-linux",
43
+ "debian",
44
+ "containerized-development"
24
45
  ],
25
46
  "repository": {
26
47
  "type": "git",