reins-method 0.1.0 → 0.1.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.
package/README.md CHANGED
@@ -1,15 +1,14 @@
1
1
  ```
2
- █████ █████ ███ █ █ ████
3
- █ █ █ █ ██ █
4
- █ █ █ █
5
- █████ ████ █ █ ██ ███
6
- █ █ █ █ █ █
7
- █ █ █ █ █ █ █
8
- █ █ █████ ███ █ █ ████
9
-
10
- agent-agnostic · stack-agnostic
11
- globally installed · customizable
12
- ──────────────────────────────────────────
2
+ ,~~_ ____ ___________ _______
3
+ |/\ =_ _ ~ / __ \/ ____/ _/ | / / ___/
4
+ _( )_( )\~~ / /_/ / __/ / // |/ /\__ \
5
+ \,\ _|\ \~~~ / _, _/ /____/ // /| /___/ /
6
+ \` \ /_/ |_/_____/___/_/ |_//____/
7
+ ` `
8
+
9
+ structured AI pair programming method
10
+ ──────────────────────────────────────────────────
11
+ agent-agnostic · stack-agnostic · globally installed
13
12
  ```
14
13
 
15
14
  <p align="center">
@@ -21,10 +20,6 @@
21
20
 
22
21
  # REINS Method
23
22
 
24
- > AI is like a horse — far stronger than any human, but without a rider it goes
25
- > wherever it wants. REINS is the bridle. It does not limit the horse; it gives the
26
- > rider control over where that power goes.
27
-
28
23
  A universal, agent-agnostic AI pair-programming workflow. Install it once, globally,
29
24
  and use it in every project — without ever adding files to a project repository.
30
25
 
@@ -86,13 +81,9 @@ global install covers every project on the machine, in every supported agent.
86
81
 
87
82
  ### Why does the installer need Node, if REINS is a bash CLI?
88
83
 
89
- Only the *installer* (`npx reins-method install`) uses Node for the
90
- [@clack/prompts](https://github.com/bombshell-dev/clack)-based arrow-key menus,
91
- in the same style as [BMAD-METHOD](https://github.com/bmad-code-org/BMAD-METHOD)'s
92
- `npx bmad-method install`. It collects your answers, then hands them to `bin/reins
93
- install --non-interactive` to do the actual file work. Everything you run
94
- afterwards — `reins update`, `reins sync`, `reins new-adapter`, etc. — is plain
95
- bash with no runtime dependencies. If you'd rather not use Node at all, `install.sh`
84
+ Only the *installer* (`npx reins-method install`) uses Node, for the arrow-key
85
+ menus. Everything you run afterwards — `reins update`, `reins sync`, `reins
86
+ new-adapter`, etc. is plain bash with no runtime dependencies. No Node? `install.sh`
96
87
  runs the same wizard with `read -p` prompts instead of menus.
97
88
 
98
89
  ---
@@ -176,26 +167,25 @@ or invoke `skill-creator` for guided creation. See [SKILLS.md](SKILLS.md).
176
167
  ## Personas, Party Mode & Code Review
177
168
 
178
169
  Six built-in persona skills give you BMAD-style perspectives natively, with no
179
- external install — each named after its role (`reins-<role>`), with a character
180
- identity for flavor:
181
-
182
- | Skill | Persona | Lens |
183
- |---|---|---|
184
- | `reins-business-analyst` | Toby | Methodical, evidence-based (Porter, Minto Pyramid), represents every stakeholder including the inconvenient ones — never takes sides |
185
- | `reins-technical-writer` | Pam | CommonMark/DITA/OpenAPI, writes for the reader with zero context, diagrams over walls of text |
186
- | `reins-product-manager` | Jim | Jobs-to-be-Done, pragmatic and people-focused, skeptical of complexity that doesn't earn its cost |
187
- | `reins-ux-designer` | Erin | Deeply empathetic, thinks in user flows and friction points, every decision serves a genuine user need |
188
- | `reins-system-architect` | David | Calm and strategic, favors proven tech, developer productivity, ties decisions to business value |
189
- | `reins-senior-engineer` | Angela | Test-first (red/green/refactor), 100% passing before review, no shortcuts |
190
-
191
- Each is callable individually ("give me David's take on this"). Before a
192
- breakdown, ask for **`party-mode`** Michael (Facilitator) picks the relevant
193
- personas (always Toby) and announces the lineup, each speaks in turn, then Jim
194
- (Synthesizer) distills it into what matters for the breakdown. Before proposing a
195
- commit message, ask for **`code-review`** Michael opens the session and
196
- launches independent subagents (Dwight for logic, Creed for security, and Oscar for
197
- requirements if a SPEC exists) for adversarial, parallel review; Jim then closes
198
- with a plain-language summary of what needs fixing before merge.
170
+ external install:
171
+
172
+ | Skill | Lens |
173
+ |---|---|
174
+ | `reins-business-analyst` | Methodical, evidence-based (Porter, Minto Pyramid), represents every stakeholder — including the inconvenient ones — never takes sides |
175
+ | `reins-technical-writer` | CommonMark/DITA/OpenAPI, writes for the reader with zero context, diagrams over walls of text |
176
+ | `reins-product-manager` | Jobs-to-be-Done, pragmatic and people-focused, skeptical of complexity that doesn't earn its cost |
177
+ | `reins-ux-designer` | Deeply empathetic, thinks in user flows and friction points, every decision serves a genuine user need |
178
+ | `reins-system-architect` | Calm and strategic, favors proven tech, developer productivity, ties decisions to business value |
179
+ | `reins-senior-engineer` | Test-first (red/green/refactor), 100% passing before review, no shortcuts |
180
+
181
+ Each is callable individually (e.g. "give me the system architect's take on
182
+ this"). Before a breakdown, ask for **`party-mode`** a facilitator picks the
183
+ relevant personas (always the business analyst) and announces the lineup, each
184
+ speaks in turn, then a synthesizer distills it into what matters for the
185
+ breakdown. Before proposing a commit message, ask for **`code-review`** it
186
+ launches independent subagents (logic, security, and requirements if a SPEC
187
+ exists) for adversarial, parallel review, then closes with a plain-language
188
+ summary of what needs fixing before merge.
199
189
 
200
190
  ---
201
191
 
@@ -329,4 +319,4 @@ authors — nothing here is a fork or a dependency):
329
319
 
330
320
  ## License
331
321
 
332
- MIT (or your choice update before publishing).
322
+ MIT — see [LICENSE](LICENSE).
package/bin/reins CHANGED
@@ -18,6 +18,45 @@ log() { printf '%s\n' "$*"; }
18
18
  err() { printf 'Error: %s\n' "$*" >&2; }
19
19
  die() { err "$*"; exit 1; }
20
20
 
21
+ print_banner() {
22
+ local horse=$'\033[32m' rtxt=$'\033[92m' muted=$'\033[2;32m'
23
+ local check=$'\033[92m' text=$'\033[32m' reset=$'\033[0m'
24
+
25
+ printf '%s%s%s%s%s\n' "$horse" ' ,~~_ ' "$rtxt" '____ ___________ _______' "$reset"
26
+ printf '%s%s%s%s%s\n' "$horse" ' |/\ =_ _ ~ ' "$rtxt" '/ __ \/ ____/ _/ | / / ___/' "$reset"
27
+ printf '%s%s%s%s%s\n' "$horse" ' _( )_( )\~~ ' "$rtxt" '/ /_/ / __/ / // |/ /\__ \' "$reset"
28
+ printf '%s%s%s%s%s\n' "$horse" ' \,\ _|\ \~~~ ' "$rtxt" '/ _, _/ /____/ // /| /___/ /' "$reset"
29
+ printf '%s%s%s%s%s\n' "$horse" ' \` \ ' "$rtxt" '/_/ |_/_____/___/_/ |_//____/' "$reset"
30
+ printf '%s%s%s\n' "$horse" ' ` `' "$reset"
31
+ printf '\n'
32
+ printf '%s structured AI pair programming method%s\n' "$muted" "$reset"
33
+ printf '%s ──────────────────────────────────────────────────%s\n' "$muted" "$reset"
34
+ printf ' agent-agnostic · stack-agnostic · globally installed\n'
35
+ printf '\n'
36
+
37
+ printf '%s✓%s REINS installed to ~/.reins/%s\n' "$check" "$text" "$reset"
38
+
39
+ local agent bridge_ok=0
40
+ agent="$(config_get agent)"
41
+ if [ -n "$agent" ]; then
42
+ local entry
43
+ if entry="$(agent_bridge_target "$agent" 2>/dev/null)"; then
44
+ local bridge="${entry%%:*}"
45
+ [ -f "$bridge" ] && bridge_ok=1
46
+ fi
47
+ fi
48
+ if [ "$bridge_ok" -eq 1 ]; then
49
+ printf '%s✓%s Agent bridge configured%s\n' "$check" "$text" "$reset"
50
+ fi
51
+
52
+ local skill_count=0
53
+ if [ -d "$CORE_DIR/skills" ]; then
54
+ skill_count="$(find "$CORE_DIR/skills" -mindepth 1 -maxdepth 1 -type d | wc -l | tr -d ' ')"
55
+ fi
56
+ printf '%s✓%s %s core skills registered%s\n' "$check" "$text" "$skill_count" "$reset"
57
+ printf '\n'
58
+ }
59
+
21
60
  config_get() {
22
61
  # config_get <key> -> prints scalar value for "key: value" line, empty if absent
23
62
  [ -f "$CONFIG" ] || return 0
@@ -300,6 +339,7 @@ EOF
300
339
  # ---------------------------------------------------------------------------
301
340
 
302
341
  cmd_install() {
342
+ print_banner
303
343
  local non_interactive=0
304
344
  local arg_agent="" arg_standards="" arg_historic="" arg_adapter=""
305
345
  for arg in "$@"; do
@@ -453,6 +493,7 @@ EOF
453
493
  }
454
494
 
455
495
  cmd_update() {
496
+ print_banner
456
497
  if [ -d "$REINS_HOME/.git" ]; then
457
498
  if ! git -C "$REINS_HOME" pull --ff-only; then
458
499
  err "git pull failed — if this checkout has no upstream tracking branch, run:"
@@ -468,6 +509,7 @@ cmd_update() {
468
509
  }
469
510
 
470
511
  cmd_new_adapter() {
512
+ print_banner
471
513
  local name="${1:-}"
472
514
  [ -n "$name" ] || die "usage: reins new-adapter <name>"
473
515
  local dir="$USER_DIR/adapters/$name"
@@ -504,6 +546,7 @@ EOF
504
546
  }
505
547
 
506
548
  cmd_new_skill() {
549
+ print_banner
507
550
  local name="${1:-}"
508
551
  [ -n "$name" ] || die "usage: reins new-skill <name>"
509
552
  local dir="$USER_DIR/skills/$name"
@@ -534,10 +577,12 @@ EOF
534
577
  }
535
578
 
536
579
  cmd_sync() {
580
+ print_banner
537
581
  generate_bridges
538
582
  }
539
583
 
540
584
  cmd_link_agents() {
585
+ print_banner
541
586
  # Wire newly-installed AI agents into the existing bridge files without a
542
587
  # full bridge regeneration — handy after installing a new agent on this
543
588
  # machine (e.g. you set up Gemini CLI after running `reins install`).
@@ -548,6 +593,7 @@ cmd_link_agents() {
548
593
  }
549
594
 
550
595
  cmd_historic() {
596
+ [ "${2:-}" = "--quiet" ] || print_banner
551
597
  local mode="${1:-}"
552
598
  case "$mode" in
553
599
  on)
@@ -570,6 +616,7 @@ cmd_historic() {
570
616
  }
571
617
 
572
618
  cmd_status() {
619
+ print_banner
573
620
  log "REINS_HOME: $REINS_HOME"
574
621
  if [ -d "$REINS_HOME/.git" ]; then
575
622
  log "Version: $(git -C "$REINS_HOME" rev-parse --short HEAD 2>/dev/null) ($(git -C "$REINS_HOME" log -1 --format=%cd --date=short 2>/dev/null))"
@@ -597,6 +644,7 @@ cmd_status() {
597
644
  }
598
645
 
599
646
  cmd_doctor() {
647
+ print_banner
600
648
  local problems=0
601
649
 
602
650
  [ -d "$CORE_DIR" ] || { err "missing $CORE_DIR"; problems=$((problems+1)); }
@@ -639,6 +687,7 @@ cmd_doctor() {
639
687
  }
640
688
 
641
689
  cmd_uninstall() {
690
+ print_banner
642
691
  log "Uninstalling REINS Method..."
643
692
 
644
693
  # Remove the managed block from every native config REINS may have wired
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reins-method",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "REINS Method — agent-agnostic AI pair-programming workflow. Interactive installer.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/gustavodiasp/reins-method",
@@ -29,25 +29,20 @@ async function getColors() {
29
29
  async function printBanner() {
30
30
  const c = await getColors();
31
31
  const lines = [
32
- '█████ █████ ███ █ █ ████',
33
- '█ █ █ █ ██ █ ',
34
- '█ █ █ █ ',
35
- '█████ ████ █ █ ██ ███',
36
- '█ █ █ █ █ █ █',
37
- '█ █ █ █ █ █ █',
38
- '█ █ █████ ███ █ █ ████',
32
+ [' ,~~_ ', '____ ___________ _______'],
33
+ [' |/\\ =_ _ ~ ', '/ __ \\/ ____/ _/ | / / ___/'],
34
+ [' _( )_( )\\~~ ', '/ /_/ / __/ / // |/ /\\__ \\'],
35
+ [' \\,\\ _|\\ \\~~~ ', '/ _, _/ /____/ // /| /___/ /'],
36
+ [' \\` \\ ', '/_/ |_/_____/___/_/ |_//____/'],
37
+ [' ` `', ''],
39
38
  ];
40
- const colors = [c.red, c.red, c.yellow, c.yellow, c.yellow, c.yellow, c.yellow];
41
- for (let i = 0; i < lines.length; i++) {
42
- console.log(colors[i] ? colors[i](lines[i]) : lines[i]);
39
+ for (const [horse, reins] of lines) {
40
+ console.log(c.green(horse) + c.greenBright(reins));
43
41
  }
44
42
  console.log('');
45
- console.log(
46
- c.bold(
47
- 'AI is like a horse — strong, but it goes where it wants without a rider.',
48
- ),
49
- );
50
- console.log(c.bold('REINS is the bridle.'));
43
+ console.log(c.dim(c.green(' structured AI pair programming method')));
44
+ console.log(c.dim(c.green(' ──────────────────────────────────────────────────')));
45
+ console.log(' agent-agnostic · stack-agnostic · globally installed');
51
46
  console.log('');
52
47
  }
53
48