@shepai/cli 1.155.0-pr486.e53674d → 1.156.0-pr487.27d2745
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 +113 -117
- package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.js +3 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/claude-code.json +3 -4
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +2 -2
- package/web/.next/required-server-files.json +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +29 -29
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +36 -36
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +36 -36
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +29 -29
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +36 -36
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +36 -36
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +26 -26
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +5 -5
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +10 -10
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +10 -10
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +5 -5
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17ed7ed1._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17ed7ed1._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__28d0d265._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__42bf1807._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__42bf1807._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__56b70465._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__56b70465._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5edfc56b._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__88f7e8e6._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__88f7e8e6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8b0aac03._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c30f1f82._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c30f1f82._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f80bfc75._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f80bfc75._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f8dd4422._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f8dd4422._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_05c23ad9._.js +1 -1
- package/web/.next/server/chunks/ssr/_05c23ad9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_813095ef._.js → _06d729d4._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_813095ef._.js.map → _06d729d4._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js +1 -1
- package/web/.next/server/chunks/ssr/_16eb4fec._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_41633e32._.js → _324b80d9._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_41633e32._.js.map → _324b80d9._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_3a0b989f._.js +2 -2
- package/web/.next/server/chunks/ssr/_3a0b989f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
- package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_5f69c13f._.js +1 -1
- package/web/.next/server/chunks/ssr/_5f69c13f._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_7c5b97c6._.js +1 -1
- package/web/.next/server/chunks/ssr/_7c5b97c6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_82c57f10._.js +1 -1
- package/web/.next/server/chunks/ssr/_82c57f10._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_9495d50b._.js +1 -1
- package/web/.next/server/chunks/ssr/_9495d50b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_a0e3f7e4._.js +1 -1
- package/web/.next/server/chunks/ssr/_a0e3f7e4._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_ac4a3873._.js +1 -1
- package/web/.next/server/chunks/ssr/_ac4a3873._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_59d0f988._.js → _c2d7b7db._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_59d0f988._.js.map → _c2d7b7db._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_ca0aa7f0._.js +1 -1
- package/web/.next/server/chunks/ssr/_ca0aa7f0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_cb5a021e._.js +1 -1
- package/web/.next/server/chunks/ssr/_cb5a021e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_d86175ae._.js +1 -1
- package/web/.next/server/chunks/ssr/_d86175ae._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_d8bedf13._.js +1 -1
- package/web/.next/server/chunks/ssr/_d8bedf13._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_fa7efce3._.js +2 -2
- package/web/.next/server/chunks/ssr/_fa7efce3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_cdc632e3.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_cdc632e3.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_39ca0924.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_39ca0924.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_357e3eb0._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_357e3eb0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +45 -45
- package/web/.next/static/chunks/{42e9d0c76e624005.js → 11f9d194a808e762.js} +1 -1
- package/web/.next/static/chunks/2a409a06c9f8e1f2.js +1 -0
- package/web/.next/static/chunks/{b3be394b3cc24151.js → 451b739f780a1316.js} +1 -1
- package/web/.next/static/chunks/{902c670cb337840c.js → 4a808ad7b2ee7e06.js} +1 -1
- package/web/.next/static/chunks/{2817c3b9d560aaeb.js → 519efb70d16e58e1.js} +1 -1
- package/web/.next/static/chunks/{a7c1cddd7d406fb8.js → 67796fc8bc518eb9.js} +1 -1
- package/web/.next/static/chunks/{ea823175bb410162.js → 6d8e30b4c0d6489f.js} +1 -1
- package/web/.next/static/chunks/79224190c8193749.js +1 -0
- package/web/.next/static/chunks/{a676d236e8214de3.js → 7c3c90336df83f48.js} +2 -2
- package/web/.next/static/chunks/{da980f1c277bafcb.js → b270cd01d6c84cc3.js} +1 -1
- package/web/.next/static/chunks/{125b250c28113507.js → d7dc5e69935dd50a.js} +1 -1
- package/web/.next/static/chunks/{6e6cd6218f76e404.js → dda3b05bd1c7d22e.js} +2 -2
- package/web/.next/static/chunks/7a1a68bdc20f0428.js +0 -1
- package/web/.next/static/chunks/b4080e40597d7f8e.js +0 -1
- /package/web/.next/static/{_5yY0q7bqEA7bwlEo729P → YJAjXJ0PmVhoQ7S_uBBDz}/_buildManifest.js +0 -0
- /package/web/.next/static/{_5yY0q7bqEA7bwlEo729P → YJAjXJ0PmVhoQ7S_uBBDz}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{_5yY0q7bqEA7bwlEo729P → YJAjXJ0PmVhoQ7S_uBBDz}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -2,15 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
# Shep AI
|
|
4
4
|
|
|
5
|
-
###
|
|
5
|
+
### One command. Full lifecycle. Merged PR.
|
|
6
6
|
|
|
7
|
-
_Describe a feature in plain English
|
|
7
|
+
_Describe a feature in plain English — Shep researches, plans, codes, tests, and opens a PR. You approve when you want to, or let it run hands-free._
|
|
8
8
|
|
|
9
9
|
[](https://github.com/shep-ai/cli/actions/workflows/ci.yml)
|
|
10
10
|
[](https://www.npmjs.com/package/@shepai/cli)
|
|
11
11
|
[](https://opensource.org/licenses/MIT)
|
|
12
|
+
[](https://www.typescriptlang.org/)
|
|
13
|
+
[](https://nodejs.org/)
|
|
14
|
+
[](https://pnpm.io/)
|
|
15
|
+
[](https://github.com/shep-ai/cli/pulls)
|
|
16
|
+
[](https://conventionalcommits.org)
|
|
12
17
|
|
|
13
|
-
|
|
18
|
+
<br />
|
|
19
|
+
|
|
20
|
+
[Features](#features) · [Quick Start](#quick-start) · [CLI Reference](#cli-reference) · [Architecture](#architecture) · [Contributing](#contributing)
|
|
14
21
|
|
|
15
22
|
<br />
|
|
16
23
|
|
|
@@ -20,46 +27,6 @@ _Describe a feature in plain English. Shep builds it step by step — researchin
|
|
|
20
27
|
|
|
21
28
|
---
|
|
22
29
|
|
|
23
|
-
## Who is Shep for?
|
|
24
|
-
|
|
25
|
-
Solo developers and small teams who use AI coding agents (Claude Code, Cursor, Gemini CLI) and want structure around the messy parts — turning a feature idea into a clear plan, keeping work isolated per feature, and not losing context when switching between tasks.
|
|
26
|
-
|
|
27
|
-
Shep is not a replacement for your coding agent. It's the orchestration layer that sits above it: it manages requirements, plans, git branches, and review gates so you can focus on the parts that need human judgment.
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## How It Works
|
|
32
|
-
|
|
33
|
-
Every feature moves through a structured pipeline. You control how much autonomy the agent gets.
|
|
34
|
-
|
|
35
|
-
```
|
|
36
|
-
You describe Shep generates Shep researches Shep writes Shep codes Shep opens
|
|
37
|
-
a feature → requirements → your codebase → a plan → + tests → a PR
|
|
38
|
-
▲ ▲ ▲
|
|
39
|
-
Gate 1: PRD Gate 2: Plan Gate 3: Merge
|
|
40
|
-
(approve/edit) (approve/edit) (approve/reject)
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
**Three approval gates.** Each one pauses execution and waits for you to review, edit, or approve before the agent continues. You choose which gates to enable:
|
|
44
|
-
|
|
45
|
-
| Flag | Gate | What you're approving |
|
|
46
|
-
|------|------|-----------------------|
|
|
47
|
-
| `--allow-prd` | Requirements | Auto-approve the generated PRD |
|
|
48
|
-
| `--allow-plan` | Plan | Auto-approve the implementation plan |
|
|
49
|
-
| `--allow-merge` | Merge | Auto-approve the final PR |
|
|
50
|
-
| `--allow-all` | All three | Fully autonomous — agent handles everything |
|
|
51
|
-
|
|
52
|
-
**With no flags**, every gate requires your explicit approval. You see exactly what the agent intends to do before it does it.
|
|
53
|
-
|
|
54
|
-
### What happens when things go wrong
|
|
55
|
-
|
|
56
|
-
- **CI fails after PR creation.** Shep reads the CI logs, diagnoses the failure, and pushes a fix. It retries up to 3 times before pausing and asking for your input.
|
|
57
|
-
- **Agent gets stuck or produces bad output.** The feature enters a `Blocked` state. You get notified and can provide feedback, reject the current phase, or restart from a checkpoint.
|
|
58
|
-
- **You don't like the plan.** Reject it with comments. Shep regenerates the plan incorporating your feedback.
|
|
59
|
-
- **You want to take over mid-feature.** The code lives in a standard git worktree on a named branch. You can open it in your IDE and work on it directly at any point.
|
|
60
|
-
|
|
61
|
-
---
|
|
62
|
-
|
|
63
30
|
## Quick Start
|
|
64
31
|
|
|
65
32
|
```bash
|
|
@@ -68,62 +35,28 @@ npx @shepai/cli
|
|
|
68
35
|
|
|
69
36
|
# Or install globally
|
|
70
37
|
npm i -g @shepai/cli
|
|
71
|
-
|
|
72
|
-
# Start Shep — opens the web dashboard at http://localhost:4050
|
|
73
38
|
shep
|
|
74
|
-
```
|
|
75
39
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
# With approval gates (recommended to start)
|
|
80
|
-
shep feat new "add a /health endpoint that returns uptime and version"
|
|
81
|
-
|
|
82
|
-
# Shep will pause at each gate for your review.
|
|
83
|
-
# Once you're comfortable, try autonomous mode:
|
|
84
|
-
shep feat new "add rate limiting to the API" --allow-all --push --pr
|
|
40
|
+
# Browser opens at http://localhost:4050 — you're in
|
|
85
41
|
```
|
|
86
42
|
|
|
87
|
-
|
|
43
|
+
---
|
|
88
44
|
|
|
89
|
-
|
|
45
|
+
## Features
|
|
90
46
|
|
|
91
47
|
```bash
|
|
92
|
-
shep feat new "add stripe payments" --push --pr
|
|
93
|
-
|
|
94
|
-
# Both run simultaneously in isolated worktrees
|
|
48
|
+
shep feat new "add stripe payments" --allow-all --push --pr
|
|
49
|
+
# ↳ PRD → research → plan → code → tests → PR → CI watch — done.
|
|
95
50
|
```
|
|
96
51
|
|
|
97
|
-
|
|
52
|
+
- **Full lifecycle in one shot** — From idea to merged PR: requirements, technical research, implementation plan, code with tests, PR creation, and CI fix loop
|
|
53
|
+
- **Approve or go hands-free** — Three review gates (PRD, Plan, Merge) you can enable, disable, or skip entirely with `--allow-all`
|
|
54
|
+
- **Run 10 features in parallel** — Each gets its own git worktree — switch context instantly, no stashing, no branch juggling, no conflicts
|
|
55
|
+
- **Pick your agent** — Claude Code, Cursor CLI, or Gemini CLI — swap per feature, per repo, anytime
|
|
56
|
+
- **Live dashboard** — Interactive graph of every repo and feature — review diffs, approve merges, launch dev servers, all in-browser
|
|
57
|
+
- **100% local, zero signup** — SQLite in `~/.shep/`, nothing leaves your machine, no account needed
|
|
98
58
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
Shep runs entirely on your machine. Here's the security model:
|
|
102
|
-
|
|
103
|
-
| Concern | How Shep handles it |
|
|
104
|
-
|---------|-------------------|
|
|
105
|
-
| **Data stays local** | All data lives in `~/.shep/` as SQLite databases. Nothing is sent to Shep servers — there are none. |
|
|
106
|
-
| **Agent sandboxing** | Shep delegates coding to your chosen agent (Claude Code, Cursor CLI, Gemini CLI). The agent's own permission model applies. Shep does not grant additional permissions. |
|
|
107
|
-
| **Git isolation** | Every feature runs in its own git worktree branched from your main branch. Your working directory is never modified. |
|
|
108
|
-
| **No credential access** | Shep never reads, stores, or transmits your API keys. Agent authentication is handled by the agent itself. |
|
|
109
|
-
| **Review before merge** | Unless you explicitly pass `--allow-merge`, no code is merged without your approval. PRs are created as drafts when using `--pr`. |
|
|
110
|
-
| **Audit trail** | Every agent action, approval, and state transition is logged. View with `shep feat logs <id>`. |
|
|
111
|
-
|
|
112
|
-
**What `--allow-all` actually means:** The agent will auto-approve requirements, auto-approve the plan, and auto-merge the PR. It does _not_ bypass CI — your CI pipeline still runs and must pass. Use this for low-risk tasks on repos with good test coverage, not for changes to production infrastructure.
|
|
113
|
-
|
|
114
|
-
---
|
|
115
|
-
|
|
116
|
-
## Features
|
|
117
|
-
|
|
118
|
-
- **Structured lifecycle** — Requirements, research, planning, implementation, and review as distinct phases, not one opaque prompt
|
|
119
|
-
- **Three configurable approval gates** — Full control, full autonomy, or anything in between
|
|
120
|
-
- **Parallel features via worktrees** — Multiple features in flight at once with zero branch conflicts
|
|
121
|
-
- **Agent-agnostic** — Claude Code, Cursor CLI, or Gemini CLI — swap anytime per feature or per repo
|
|
122
|
-
- **Web dashboard** — Interactive graph of repos and features with real-time status, diff review, and approval actions at `localhost:4050`
|
|
123
|
-
- **CI fix loop** — When CI fails, the agent reads logs, diagnoses, and retries before asking for help
|
|
124
|
-
- **100% local** — SQLite storage, no cloud dependency, no account needed
|
|
125
|
-
|
|
126
|
-
> **[Full features guide with screenshots →](./docs/FEATURES.md)**
|
|
59
|
+
> **[See the full Features Guide with screenshots →](./docs/FEATURES.md)**
|
|
127
60
|
|
|
128
61
|
---
|
|
129
62
|
|
|
@@ -208,56 +141,119 @@ shep run <agent> [-p prompt] [-r repo] [-s] Run an agent directly
|
|
|
208
141
|
|
|
209
142
|
---
|
|
210
143
|
|
|
211
|
-
##
|
|
144
|
+
## Architecture
|
|
212
145
|
|
|
213
|
-
|
|
214
|
-
Those tools are excellent at writing code given a prompt. Shep adds the layer above: breaking a feature into structured phases, managing requirements and plans as reviewable artifacts, isolating work in git worktrees, and handling the PR/CI lifecycle. Think of it as a project manager for your AI coding agent.
|
|
146
|
+
Clean Architecture with four layers. Dependencies point inward — domain has zero external deps.
|
|
215
147
|
|
|
216
|
-
|
|
217
|
-
|
|
148
|
+
```mermaid
|
|
149
|
+
flowchart TB
|
|
150
|
+
P["<b>Presentation</b><br/>CLI · Web UI · TUI"]
|
|
151
|
+
A["<b>Application</b><br/>Use Cases · Orchestration · Ports"]
|
|
152
|
+
D["<b>Domain</b><br/>Entities · Value Objects · Services"]
|
|
153
|
+
I["<b>Infrastructure</b><br/>SQLite · LangGraph · DI"]
|
|
218
154
|
|
|
219
|
-
|
|
220
|
-
|
|
155
|
+
P --> A --> D
|
|
156
|
+
I --> A
|
|
221
157
|
|
|
222
|
-
|
|
223
|
-
|
|
158
|
+
style P fill:#dbeafe,stroke:#3b82f6,color:#1e3a5f
|
|
159
|
+
style A fill:#fef3c7,stroke:#f59e0b,color:#78350f
|
|
160
|
+
style D fill:#d1fae5,stroke:#10b981,color:#064e3b
|
|
161
|
+
style I fill:#ede9fe,stroke:#8b5cf6,color:#4c1d95
|
|
162
|
+
```
|
|
224
163
|
|
|
225
|
-
|
|
226
|
-
|
|
164
|
+
| Layer | Path | Responsibility |
|
|
165
|
+
| -------------- | ----------------------------------- | ------------------------------------------------- |
|
|
166
|
+
| Domain | `packages/core/src/domain/` | Business logic, TypeSpec-generated types |
|
|
167
|
+
| Application | `packages/core/src/application/` | Use cases, output port interfaces |
|
|
168
|
+
| Infrastructure | `packages/core/src/infrastructure/` | SQLite repos, LangGraph agents, DI (tsyringe) |
|
|
169
|
+
| Presentation | `src/presentation/` | CLI (Commander), TUI (Inquirer), Web UI (Next.js) |
|
|
227
170
|
|
|
228
|
-
|
|
171
|
+
### Feature Lifecycle
|
|
229
172
|
|
|
230
|
-
|
|
173
|
+
Every feature progresses through a structured SDLC pipeline with 9 states:
|
|
231
174
|
|
|
232
|
-
|
|
175
|
+
```
|
|
176
|
+
Started -> Analyze -> Requirements -> Research -> Planning -> Implementation -> Review -> Maintain
|
|
177
|
+
|
|
|
178
|
+
(Blocked)
|
|
179
|
+
```
|
|
233
180
|
|
|
234
|
-
|
|
235
|
-
|-------|------|---------------|
|
|
236
|
-
| Domain | `packages/core/src/domain/` | Business logic, TypeSpec-generated types |
|
|
237
|
-
| Application | `packages/core/src/application/` | Use cases, port interfaces |
|
|
238
|
-
| Infrastructure | `packages/core/src/infrastructure/` | SQLite, LangGraph agents, DI |
|
|
239
|
-
| Presentation | `src/presentation/` | CLI, TUI, Web UI |
|
|
181
|
+
Human approval gates are configurable at PRD, Plan, and Merge phases. In `--allow-all` mode the agent handles everything autonomously.
|
|
240
182
|
|
|
241
|
-
|
|
183
|
+
### Tech Stack
|
|
242
184
|
|
|
243
|
-
|
|
185
|
+
| Component | Technology |
|
|
186
|
+
| --------------- | ------------------------------------------------------------------------- |
|
|
187
|
+
| Language | TypeScript (ES2022) |
|
|
188
|
+
| Package Manager | pnpm |
|
|
189
|
+
| CLI Framework | Commander |
|
|
190
|
+
| TUI Framework | [@inquirer/prompts](https://github.com/SBoudrias/Inquirer.js) |
|
|
191
|
+
| Web UI | Next.js 16 + React 19 + shadcn/ui + Tailwind CSS 4 |
|
|
192
|
+
| Graph Viz | React Flow (XYFlow) 12 |
|
|
193
|
+
| Design System | Storybook 8.x |
|
|
194
|
+
| Build Tool | tsc + tsc-alias (prod), tsx (CLI dev), Next.js (web dev) |
|
|
195
|
+
| Database | SQLite (better-sqlite3, per-repo) |
|
|
196
|
+
| Domain Models | TypeSpec -> generated TypeScript |
|
|
197
|
+
| Agent System | [LangGraph](https://www.langchain.com/langgraph) (`@langchain/langgraph`) |
|
|
198
|
+
| DI Container | tsyringe |
|
|
199
|
+
| Testing | Vitest (unit/integration) + Playwright (e2e) |
|
|
200
|
+
| Methodology | TDD (Red-Green-Refactor) |
|
|
201
|
+
|
|
202
|
+
### Supported Tools
|
|
203
|
+
|
|
204
|
+
Shep can detect, install, and manage the following tools:
|
|
205
|
+
|
|
206
|
+
| Category | Tools |
|
|
207
|
+
| ---------- | --------------------------------------------------------------------------------- |
|
|
208
|
+
| IDEs | Alacritty, Antigravity, Cursor, iTerm2, Kitty, TMux, VS Code, Warp, Windsurf, Zed |
|
|
209
|
+
| CLI Agents | Claude Code, Cursor CLI, Gemini CLI |
|
|
210
|
+
| Dev Tools | Git, GitHub CLI |
|
|
211
|
+
|
|
212
|
+
### Web UI
|
|
244
213
|
|
|
245
|
-
|
|
214
|
+
The web dashboard runs at `http://localhost:4050` and provides:
|
|
246
215
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
216
|
+
- **Dashboard canvas** — Interactive React Flow graph with feature and repository nodes
|
|
217
|
+
- **Feature drawer** — Tabs for overview, activity, approval, rejection, PR info, deployment, and timeline
|
|
218
|
+
- **Create feature form** — Start new features from the UI
|
|
219
|
+
- **Settings, Tools, Skills, and Version pages**
|
|
220
|
+
- **Real-time updates** via Server-Sent Events (SSE)
|
|
221
|
+
|
|
222
|
+
### Data Model
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
Repository --+-- Feature --+-- Plan --+-- Task -- ActionItem
|
|
226
|
+
| | +-- Artifact
|
|
227
|
+
| +-- Requirement -- Research
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
All data lives locally in `~/.shep/`. Per-repo SQLite databases. No cloud dependency.
|
|
252
231
|
|
|
253
232
|
---
|
|
254
233
|
|
|
234
|
+
## Documentation
|
|
235
|
+
|
|
236
|
+
| Document | Description |
|
|
237
|
+
| -------------------------------------------------- | ------------------------------------------ |
|
|
238
|
+
| [Features Guide](./docs/FEATURES.md) | Full features overview with screenshots |
|
|
239
|
+
| [Competitive Landscape](./docs/competitors/) | How Shep fits in the AI dev tool ecosystem |
|
|
240
|
+
| [CLAUDE.md](./CLAUDE.md) | Guidance for Claude Code instances |
|
|
241
|
+
| [AGENTS.md](./AGENTS.md) | Agent system architecture |
|
|
242
|
+
| [CONTRIBUTING-AGENTS.md](./CONTRIBUTING-AGENTS.md) | AI agent contribution guidelines |
|
|
243
|
+
| [Architecture](./docs/architecture/) | System design and patterns |
|
|
244
|
+
| [Concepts](./docs/concepts/) | Core domain concepts |
|
|
245
|
+
| [UI](./docs/ui/) | Web UI architecture and design system |
|
|
246
|
+
| [Guides](./docs/guides/) | User guides and tutorials |
|
|
247
|
+
| [Development](./docs/development/) | Contributing and development setup |
|
|
248
|
+
| [API Reference](./docs/api/) | Interface and model documentation |
|
|
249
|
+
|
|
255
250
|
## Contributing
|
|
256
251
|
|
|
257
252
|
We welcome contributions from humans and AI agents alike.
|
|
258
253
|
|
|
259
254
|
- **Humans**: See [CONTRIBUTING.md](./CONTRIBUTING.md)
|
|
260
255
|
- **AI Agents**: See [CONTRIBUTING-AGENTS.md](./CONTRIBUTING-AGENTS.md)
|
|
256
|
+
- **Spec-driven workflow**: All features start with `/shep-kit:new-feature` — see [Spec-Driven Workflow](./docs/development/spec-driven-workflow.md)
|
|
261
257
|
|
|
262
258
|
## License
|
|
263
259
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-installer.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-installer.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,sEAAsE,CAAC;AAC9E,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,qCAAqC,CAAC;AA2B7C,qBACa,wBAAyB,YAAW,qBAAqB;IACpE;;;OAGG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAoC1E;;;OAGG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAqB9D;;;OAGG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-installer.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/services/tool-installer/tool-installer.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,sEAAsE,CAAC;AAC9E,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,qCAAqC,CAAC;AA2B7C,qBACa,wBAAyB,YAAW,qBAAqB;IACpE;;;OAGG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAoC1E;;;OAGG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAqB9D;;;OAGG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,sBAAsB,CAAC;IAgFlC;;;;OAIG;IACG,sBAAsB,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAuCjE,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAiBpE;;OAEG;IACH,OAAO,CAAC,6BAA6B;CA4BtC"}
|
package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.js
CHANGED
|
@@ -109,7 +109,7 @@ let ToolInstallerServiceImpl = class ToolInstallerServiceImpl {
|
|
|
109
109
|
let output = '';
|
|
110
110
|
const child = spawn(installCommand.command, [], {
|
|
111
111
|
shell: true,
|
|
112
|
-
stdio: ['
|
|
112
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
113
113
|
env: {
|
|
114
114
|
...process.env,
|
|
115
115
|
DEBIAN_FRONTEND: 'noninteractive',
|
|
@@ -117,6 +117,8 @@ let ToolInstallerServiceImpl = class ToolInstallerServiceImpl {
|
|
|
117
117
|
GPG_TTY: '',
|
|
118
118
|
},
|
|
119
119
|
});
|
|
120
|
+
// Close stdin immediately to prevent interactive prompts
|
|
121
|
+
child.stdin?.end();
|
|
120
122
|
// Stream output from stdout and stderr
|
|
121
123
|
const pipeOutput = (stream) => {
|
|
122
124
|
if (!stream)
|
package/dist/packages/core/src/infrastructure/services/tool-installer/tools/claude-code.json
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"commands": {
|
|
13
13
|
"linux": "curl -fsSL https://claude.ai/install.sh | bash",
|
|
14
14
|
"darwin": "curl -fsSL https://claude.ai/install.sh | bash",
|
|
15
|
-
"win32": "
|
|
15
|
+
"win32": "npm install -g @anthropic-ai/claude-code"
|
|
16
16
|
},
|
|
17
17
|
"timeout": 300000,
|
|
18
18
|
"documentationUrl": "https://code.claude.com/docs/en/overview",
|
|
@@ -25,8 +25,7 @@
|
|
|
25
25
|
"detached": false
|
|
26
26
|
},
|
|
27
27
|
"terminalCommand": {
|
|
28
|
-
"linux": "
|
|
29
|
-
"darwin": "
|
|
30
|
-
"win32": "start cmd /k \"cd /d {dir} && claude\""
|
|
28
|
+
"linux": "x-terminal-emulator -e bash -c 'cd {dir} && exec claude'",
|
|
29
|
+
"darwin": "open -a Terminal.app bash -c 'cd {dir} && exec claude'"
|
|
31
30
|
}
|
|
32
31
|
}
|