forgetrail 0.3.0 → 0.4.1
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 +28 -169
- package/TRY_FORGETRAIL.md +2 -0
- package/content/cursor-rules/npm-name-hold.mdc +23 -0
- package/content/cursor-rules/writing-voice.mdc +33 -0
- package/content/skills/forgetrail/SKILL_FACTS.md +97 -0
- package/docs/BRAND_AND_PRODUCT.md +20 -0
- package/docs/CONTEXT_PROMPT.md +4 -0
- package/docs/NPM.md +15 -7
- package/package.json +69 -68
- package/prompts/propagate-to-forgetrail.md +1 -0
- package/scripts/forgetrail-cli.mjs +0 -0
package/README.md
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="site/static/logo.png" alt="ForgeTrail" width="180" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
1
5
|
# ForgeTrail
|
|
2
6
|
|
|
3
7
|
[](LICENSE)
|
|
@@ -8,191 +12,46 @@
|
|
|
8
12
|
|
|
9
13
|
A persistent development system for building software with AI agents.
|
|
10
14
|
|
|
11
|
-
**
|
|
12
|
-
|
|
13
|
-
**Who it is for:** builders using Cursor, Claude Code, Codex, or similar agents who want structure without a heavyweight process.
|
|
14
|
-
|
|
15
|
-
**Why it works:** phases with exit criteria, a live `.forgetrail/workflow_tracking.json`, and templates pre-loaded with production lessons. Each project leaves a trail of decisions, gotchas, and breadcrumbs that future work can follow.
|
|
16
|
-
|
|
17
|
-
**Try it now (no MCP):** [TRY_FORGETRAIL.md](TRY_FORGETRAIL.md): write a `docs/GENESIS.md` in any AI chat, drop in ForgeTrail Lite, paste one kickoff line into your coding agent.
|
|
18
|
-
|
|
19
|
-
Site: [forgetrail.dev](https://forgetrail.dev). Open source under [Apache License 2.0](LICENSE). Distilled from [Exec Foundry](https://execfoundry.com) and refined across about a dozen further projects. Built by [Catalyst Forge](https://catalystforge.com).
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Quickstart (ranked)
|
|
24
|
-
|
|
25
|
-
### 1. Try (no MCP): start here
|
|
26
|
-
|
|
27
|
-
Follow **[TRY_FORGETRAIL.md](TRY_FORGETRAIL.md)** (~15 minutes of setup, plus time to iterate your spec):
|
|
28
|
-
|
|
29
|
-
1. Paste the [Genesis prompt](content/GENESIS_SPEC_PROMPT.md) into ChatGPT, Claude, Grok, or a local Ollama UI.
|
|
30
|
-
2. Save the result as `docs/GENESIS.md` in a **new empty project folder**.
|
|
31
|
-
3. Add [ForgeTrail Lite](content/FORGETRAIL_LITE.md) as `.forgetrail/FORGETRAIL_LITE.md`. If you have Node 20+: `npx forgetrail install --lite --with-genesis-stub`.
|
|
32
|
-
4. Paste the kickoff line from TRY_FORGETRAIL.md into your coding agent. Approve the Phase 1 brief before any scaffold.
|
|
33
|
-
|
|
34
|
-
Optional shape reference (fiction): [Mars habitat duty roster](content/examples/GENESIS_SAMPLE_mars-habitat-roster.md).
|
|
35
|
-
|
|
36
|
-
Stuck? Use the [Try ForgeTrail checklist](https://github.com/Catalyst-Forge-LLC/forgetrail/issues/new?template=try-forgetrail-checklist.md) issue template.
|
|
15
|
+
**Docs:** [forgetrail.dev/docs](https://forgetrail.dev/docs) · **Site:** [forgetrail.dev](https://forgetrail.dev)
|
|
37
16
|
|
|
38
|
-
|
|
17
|
+
## Install
|
|
39
18
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
```json
|
|
43
|
-
{
|
|
44
|
-
"mcpServers": {
|
|
45
|
-
"forgetrail": {
|
|
46
|
-
"command": "npx",
|
|
47
|
-
"args": ["-y", "forgetrail-mcp"],
|
|
48
|
-
"env": {
|
|
49
|
-
"FORGETRAIL_ROOT": "/absolute/path/to/forgetrail-or-node_modules/forgetrail"
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
If `forgetrail` is installed in the same tree as the MCP package, you can omit `FORGETRAIL_ROOT`. From a clone instead: `pnpm run mcp:build`. Details: [mcp-server/README.md](mcp-server/README.md).
|
|
57
|
-
|
|
58
|
-
First chat: *"Call `getNewProjectKickoff` and set up the project."* Resume later with *"Call `getResumeSessionInstructions`."*
|
|
59
|
-
|
|
60
|
-
### 3. Full / vendored methodology
|
|
61
|
-
|
|
62
|
-
Need the whole template tree on disk (offline, no MCP):
|
|
19
|
+
Node.js 20+. Prefer `pnpm dlx` on Windows.
|
|
63
20
|
|
|
64
21
|
```bash
|
|
65
|
-
|
|
66
|
-
npx forgetrail install
|
|
22
|
+
pnpm dlx forgetrail install --lite --with-genesis-stub
|
|
67
23
|
```
|
|
68
24
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
**Graduation:** Try (copy Lite) → `npx forgetrail install --lite` → `npx -y forgetrail-mcp` → full `_forgetrail/` only when you need vendored templates. Details in [TRY_FORGETRAIL.md](TRY_FORGETRAIL.md).
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
## The 7 phases (short)
|
|
76
|
-
|
|
77
|
-
| Phase | Name | What happens |
|
|
78
|
-
| ----- | ---- | ------------ |
|
|
79
|
-
| 1 | **Plan** | Lock architecture in `PHASE_1_BRIEF.md` before code |
|
|
80
|
-
| 2 | **Build** | Full runnable spine in one pass |
|
|
81
|
-
| 3 | **Stabilize** | Env, paths, auth: make the foundation solid |
|
|
82
|
-
| 4 | **Iterate** | Feature by feature with real data |
|
|
83
|
-
| 5 | **Refine** | Systematic cleanup before complexity owns you |
|
|
84
|
-
| 6 | **Align** | Cut what does not serve the product vision |
|
|
85
|
-
| 7 | **Harden** | Security, performance, production docs |
|
|
86
|
-
|
|
87
|
-
Phases 4 and 5 often alternate. Full playbooks: [WORKFLOW.md](WORKFLOW.md). Docs arrive progressively (brief first; no empty boilerplate day one).
|
|
25
|
+
or `npx forgetrail install --lite --with-genesis-stub`. MCP: `npx -y forgetrail-mcp` (set `FORGETRAIL_ROOT`). Do not add `forgetrail` to an app's `dependencies`.
|
|
88
26
|
|
|
89
|
-
|
|
27
|
+
## Quick start
|
|
90
28
|
|
|
91
|
-
|
|
29
|
+
1. Write a `docs/GENESIS.md` (what, not how) in a **new empty project folder**.
|
|
30
|
+
2. Add Lite: the command above, or copy [`content/FORGETRAIL_LITE.md`](content/FORGETRAIL_LITE.md) to `.forgetrail/FORGETRAIL_LITE.md`.
|
|
31
|
+
3. Paste the kickoff line from [TRY_FORGETRAIL.md](TRY_FORGETRAIL.md). Approve the Phase 1 brief before any scaffold.
|
|
92
32
|
|
|
93
|
-
|
|
33
|
+
No Node required if you copy Lite by hand. Full recipe: [Try](https://forgetrail.dev/docs/try).
|
|
94
34
|
|
|
95
|
-
|
|
96
|
-
|-----------|-----------|------------------------|
|
|
97
|
-
| **GitHub Spec Kit** | Gated specify → plan → tasks | Templates arrive **pre-loaded with production lessons** and keep absorbing new ones |
|
|
98
|
-
| **BMAD-Method** | Many agent personas | One developer + one agent; invests in **lifecycle memory**, not persona breadth |
|
|
99
|
-
| **OpenSpec** | Change deltas in an existing repo | Complementary: OpenSpec for changes; ForgeTrail for the **whole product lifecycle** |
|
|
100
|
-
| **Per-project retros** | Lessons in one repo's instruction file | ForgeTrail propagation is **cross-project** |
|
|
35
|
+
## What you get
|
|
101
36
|
|
|
102
|
-
|
|
37
|
+
A 7-phase playbook, a live `.forgetrail/workflow_tracking.json`, and templates pre-loaded with production lessons. Each project leaves a trail of decisions, gotchas, and breadcrumbs that future work follows. Flags, MCP, and the phase table live in the [docs](https://forgetrail.dev/docs).
|
|
103
38
|
|
|
104
|
-
|
|
39
|
+
<!-- xfacts-nutrition-label -->
|
|
105
40
|
|
|
106
|
-
##
|
|
41
|
+
## Nutrition label
|
|
107
42
|
|
|
108
|
-
|
|
43
|
+
- **AppFacts:** [viewer](https://appfacts.dev/v#af1.eNp1Uk1r3DAQ_StiTg1o10mOPrUYcihJCCS3UsqsNNaqK2uENHbiLvvfi2x320tvg3hf8zRnmKC90xBxIGjhgbOjt4w-gAaZU30riYxqlDAHHx1oKIIyFmgBjfiJQEPwhmKp4C8JzZF29_vbFWhO0J4hYHQjugr4ihO-muyTaPU2J1pn0JDHKH4J8cyW9j9LTbB5tvDEloLqOAp9iHrJLGw4qE9P3csNaDhykRXYBR5tHzATXDRYSgXab2eI0MLnoYqYVSNtEk2xJ9CQ_u9RKE-UlR9SoIGioHiOcNGr6C-2G_3VHGlANWHwdsEojFbVEpWPPWWKhq6094zRBcob929qZSkFnqvRUvmV4Uh6HyhlKmVjPfhAuwMWsmrZKooaMKJbYsLlu4Yymev6_zSjIUP7pzSVMk_eUlY9Z_VOh-KFFvZh9MHW_0toTujox6peuSmmoRacKXHxwnmugiKptE3jvBzHw97w0HQoGOYiu-Wydo-PXdPXSZYbu_wGeaPbgQ) · [raw](https://github.com/Catalyst-Forge-LLC/forgetrail/blob/main/APP_FACTS.md)
|
|
44
|
+
- **ToolFacts:** [viewer](https://toolfacts.dev/v#tf1.eNrFl8Fy2zYQhl9lhye7IymJL53RzVVjTxrV8shuc8hkPDC4pBCBAAuAUjWevHv_pUhJVdxceuCNAyyA_9tdLJYv2SabvhtlTlWcTbMbH0p-DMpY-n12Tw8cNhyyUZbzhq2v8T3NZiopu4uJWmNMwiQa7zD1dnI1ucJITCo1EQNKJ7MRG2s0uyhHXNdKr3h8NXmL4bVxOcYqXY9jf1ZoXDKi5iXjv1k3ab-39VrZcR285hhhloJysfYhYS6m3Pjs2yjTgXPGcmWjrA_8V2MwlE0_f8Esl0HWYiKx5YpT2GGx845bxJiMU3Ja7OyT97LP55fePRtlTa6SeEhDeimoJucnLgrWSYADq1wYGJByUGEsRziLK5Gp4UKZdpy2PqyPh3dYjC0KaGccjn2r2ifQZNMUGoZRE2rf-vDPTgdNColBkoC9kR0L67dPqVM3-Rq9owvjrHFMvz0s7sgH8rUgKktHaVSrtLokVSrjENeI-FSKlMupXqnIFBpYwr0HP9Svsncsr7N3k_-XfOadY0kqk3YEnXo9pcCpCS6SX49AoteqZOpyckQ3i-Xt-8fl9Yf503KxeBy1WNsVpxUH-rRYfryZLz5NKoypSIVvkI8noPDtvbjgtoG_neZhoJctICFhVz731pc7KjtBkBxIUXc_KyzvYnbxbvzz5SlKZBX0ao5jJcEH4XhoJRBcTyeFxraSCPmsnkX5847WvMNB55F4xM4WWT9oENSp9NzrpvV56qRREXwlw_HNT0iqUwCUtesmN2lg9REzGt-ckxI5hI2qOrV5JIHRTQhtFgX_FfroIvccyXkpC8q1JiIk4qIxmRTZFpdncZrJtbQmDo3aI-heT3dZKjk0YW_qmIvG2qPVedZ11fShrYqDIvXOf6XKdzU7cMEIHwrVvyGu8Sbeq5Q4DHX3O4T-xkj6QdO47kTtL44AnlS580ocfPuAo6P41WuJR46HaVCc7cqgoAHqUAEiJU9oQ6QYGEeiYV-Rz2DueHu_z8-PRq99UQzKAb-yKwzbnJ69TygSqsZburNe5cDQFqXClSgeKiBc1Ode-5geGopZEyJu1HfdwnoPeHs4Y6DXB2oIj_xrzqetSasOlPccS2CQ7NFCOg93BOwA_B_D3fn9-mEhv5PVEvomtXfsJFIUpZ1Ch_1f6flLnw-DJij-RsaFCajh0qLKEyZ9uty1NidR1U9SuC_8PTLa7p1k68nLbRyWiisC1_6M_Wg2NwN3G22rdOxg5x8e30uvKr896hnB68IsxMlrb39I8kct_wxxcCDRQs1ezKGkyNOMml9KnHoaKlWNy_ZFfvYap2Gf7zf-9g9m9jXP) · [raw](https://github.com/Catalyst-Forge-LLC/forgetrail/blob/main/mcp-server/TOOL_FACTS.md)
|
|
45
|
+
- **SkillFacts:** [viewer](https://skillfacts.dev/v#sf1.eNq9lN9v20YMx_-Vg_rSGJHspsA26C1LmmKo1xqzsZcoMGSZtq6W7oy7Uzyj6d-19_1lI3n65dhe1wItgqQVyePxSH4_n4LHIH51Gai0hCAOVtqswZlUFsFlsIRHKPQWDDpuUpcWe-vEHUWg8xGMlVqhaxS9jkZosS51lUVDmjn5SDGFzEBZynu9TbMcwisO3Ei1RFtWGatNaDeyoNu2ldlqDn6jsIwMhMvBXzejgsTP4TZPLYhCriDbZwWIVC1FmUrl8FdEXe3DnTabVaF3c_zM8Lp19NFqJVLLOS2-A0qhV8JAps2SLjf6EVSqMrz_U2B1Zeh_Qe7c1sbD4Vq6vFpEmS6HTSNCriwcj2-GB03bVotC2vxU0z5fBlJZZyrsj1Z2bgCbwvflgC2IA_hriy2TDtMocPQINMoSjUBFrmQBvnY04-FluDPScV6ndUEJV2AAH4Htvf_q4oeLQi-G1M9hmW1DCwZnPJx9-DCe313fzKZRSUVg8ITG8LaSS-7XZWAqdV0tuWwLqcnyMVhst6UtSQsMczRBngOFVOs1WDetFukalLvFEZQ4eEk98flngE_GQ_7rPewmRn-EzL2T2UavVt78B9iqhCnehOd-67U1eLgMFpVaFrCcp8bJFa4jbuU9mmFtMJ467qCAEp-9x04qrYC33TqpUp8Dw7GruS5hi1X2NqFrV4TyoMcDF6851Tfsi0l3eDAMw0SxEuZc77yWVywS1NeraJQEiSKNxqI7nahWobE43LVEHSR47RN4hcbCCzRRtT5j0ckzUaTOWPTFmaham5TsR4uT6m7mEIvTY0hUN4Uu5v8OAZ_Xqj9OlBBe_t-SSIhW_scTOda-v43EH4tG-2SqxR-LWvtk68Qfi077iXqufM4Ziu8gfp_4uf69tUGA_zqggDc9B0Ed-B8saK9rcNAajojQes5CIVFHSOBG3T8kylOBP1ssxIKoQKY-FmKOx0rBYD2-1fSoWFyNrn4KR7-EVyOy1REalyBHGYRp5XJtaI4Z_pX13W2e-Q6H1K0ba45L9LstxKKShZsv9qS_w63qTXq320VZ7eS58tBJPgyXRL0QU8os7ig1HuwvbqKeBP7gPxjMv2QZDG4bwAwG6H92dx3zpycNRzBqGseUccN2T5zGMfbcYU-Hnsb7DgHErj6DyJkoPNngBVdiv9B6I6h5rXq8mpg9nUh62hGsu0hMNILJitT1Gfb7zUTMUE7coGjAPXshJp599PXD2VdX0OLp3KCmTCx0fK3sfc8nDbROzphr6IvJN_FsLTyBp24kbH3vkYb2mmnefNdN5qk_seZaGgfd19CNzN8JbqfQ1gfbEdZOQe1LSHsGtHM4-xLMuDe_eqKJlmhkf0ncuqgj3jDZzg1q1sAOfXTKT-S2xzt0-Hx-HsyRwdsGW1559wwVlszDy9MIuxD__I3VIsPEYi_uDzesO3QaYBeow-Dzv2dji3E) · [raw](https://github.com/Catalyst-Forge-LLC/forgetrail/blob/main/content/skills/forgetrail/SKILL_FACTS.md)
|
|
109
46
|
|
|
110
|
-
|
|
47
|
+
## Development
|
|
111
48
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
### Template-in-repo
|
|
118
|
-
|
|
119
|
-
1. Copy this folder as `_forgetrail/` (or keep it as a sibling and adjust paths in `INITIAL_PROMPT.md`).
|
|
120
|
-
2. Paste `INITIAL_PROMPT.md` into the first agent chat; fill bracketed placeholders.
|
|
121
|
-
3. Resume later with `CONTINUATION_PROMPT.md`.
|
|
122
|
-
|
|
123
|
-
### Optional patterns (when your brief needs them)
|
|
124
|
-
|
|
125
|
-
- **Seed / fixture JSON from any LLM:** [FORGETRAIL_LITE.md](content/FORGETRAIL_LITE.md) §4.3; also WORKFLOW.md Phase 2.
|
|
126
|
-
- **Live web search (Tavily, Brave, …):** [FORGETRAIL_LITE.md](content/FORGETRAIL_LITE.md) §4.4.
|
|
127
|
-
- **LLM-backed content (runtime / build-time / BYO-LLM):** [FORGETRAIL_LITE.md](content/FORGETRAIL_LITE.md) §7.1; local Ollama: §4.8 and [SYSTEM_HEALTH_CHECKS.md](content/SYSTEM_HEALTH_CHECKS.md).
|
|
128
|
-
- **URL import / markup drift:** Lite §7.2; [docs/TECHNICAL_REFERENCE.md](docs/TECHNICAL_REFERENCE.md).
|
|
129
|
-
- **Web app state: local vs accounts:** Lite §7 (A-local vs A-persistent).
|
|
130
|
-
- **Local PocketBase:** port in `.env`; version at install ([ONE_CLICK_DEV_SETUP.md](content/ONE_CLICK_DEV_SETUP.md)).
|
|
131
|
-
- **gstack:** ForgeTrail owns lifecycle; gstack owns sprint skills. WORKFLOW.md §1b.
|
|
132
|
-
- **Propagate lessons back:** [prompts/propagate-to-forgetrail.md](prompts/propagate-to-forgetrail.md); wrap protocol in WORKFLOW.md §1e.
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
## What your project looks like
|
|
137
|
-
|
|
138
|
-
After Phase 2, a typical app repo:
|
|
139
|
-
|
|
140
|
-
```
|
|
141
|
-
my-app/
|
|
142
|
-
.forgetrail/
|
|
143
|
-
workflow_tracking.json ← Live progress (AI-updated)
|
|
144
|
-
FORGETRAIL_LITE.md ← If you used the Try / Lite path
|
|
145
|
-
IDEAS.md
|
|
146
|
-
CONTEXT_PROMPT.md
|
|
147
|
-
docs/
|
|
148
|
-
GENESIS.md ← Optional pre-Phase-1 "what, not how" spec
|
|
149
|
-
PHASE_1_BRIEF.md
|
|
150
|
-
README.md
|
|
151
|
-
TODO.md
|
|
152
|
-
src/
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
Later phases add docs only when needed (`TECHNICAL_REFERENCE`, `DESIGN_SYSTEM`, `BRAND_AND_PRODUCT`, hardening docs, …).
|
|
156
|
-
|
|
157
|
-
---
|
|
158
|
-
|
|
159
|
-
## What's in the box
|
|
160
|
-
|
|
161
|
-
```
|
|
162
|
-
forgetrail/ ← clone folder; product name is ForgeTrail
|
|
163
|
-
RESUME.md ← Resume *this* methodology repo (not an app)
|
|
164
|
-
TRY_FORGETRAIL.md ← Human prove-it path (start here)
|
|
165
|
-
WORKFLOW.md ← 7-phase lifecycle
|
|
166
|
-
INITIAL_PROMPT.md ← App starter prompt (do not use on this repo)
|
|
167
|
-
CONTINUATION_PROMPT.md ← App resume prompt (do not use on this repo)
|
|
168
|
-
site/ ← forgetrail.dev (FilePress + Wrangler)
|
|
169
|
-
TRACKING_SCHEMA.md
|
|
170
|
-
update-log.md
|
|
171
|
-
content/
|
|
172
|
-
GENESIS_SPEC_PROMPT.md ← Paste into any LLM chat
|
|
173
|
-
FORGETRAIL_LITE.md ← Portable single-file protocol
|
|
174
|
-
examples/ ← Sample Genesis (Mars roster, fiction)
|
|
175
|
-
docs/ ← Phase templates (brief, SPEC_FEATURE_TEMPLATE, audits, …)
|
|
176
|
-
prompts/ ← Audits, marketing, propagate-to-forgetrail, …
|
|
177
|
-
mcp-server/ ← MCP server (see mcp-server/README.md)
|
|
178
|
-
specs/ ← ForgeTrail meta-specs (including NUX)
|
|
49
|
+
```bash
|
|
50
|
+
pnpm --dir mcp-server install
|
|
51
|
+
pnpm run mcp:build
|
|
52
|
+
pnpm site:dev
|
|
179
53
|
```
|
|
180
54
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
---
|
|
184
|
-
|
|
185
|
-
## Prerequisites
|
|
186
|
-
|
|
187
|
-
- **Try path:** any LLM chat + any file-reading coding agent. No Node/MCP required to start.
|
|
188
|
-
- **MCP:** Node.js to run the server; Cursor, Claude Desktop, Claude Code, Windsurf, or other MCP clients.
|
|
189
|
-
- **Lite / full greenfield (when the agent scaffolds):** Git, Node.js 20+, npm, pnpm (Lite §4.1). Phase 2 adds stack-specific checks (PocketBase, Ollama, Playwright, …) per [FORGETRAIL_LITE.md](content/FORGETRAIL_LITE.md) §4.1.2.
|
|
190
|
-
- **gstack (optional):** [gstack](https://github.com/garrytan/gstack) for sprint skills inside ForgeTrail phases.
|
|
191
|
-
|
|
192
|
-
---
|
|
193
|
-
|
|
194
|
-
## License and support
|
|
195
|
-
|
|
196
|
-
**Apache License 2.0.** See [LICENSE](LICENSE). Contribute via [CONTRIBUTING.md](CONTRIBUTING.md). Security: [SECURITY.md](SECURITY.md).
|
|
55
|
+
Site (FilePress + docs mount): `pnpm ship`.
|
|
197
56
|
|
|
198
|
-
|
|
57
|
+
Apache-2.0 · [Catalyst Forge LLC](https://catalystforge.com)
|
package/TRY_FORGETRAIL.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Prove ForgeTrail in one sitting: write a **what, not how** spec in any AI chat, drop it next to **ForgeTrail Lite**, and let your coding agent forge the path and keep the trail.
|
|
4
4
|
|
|
5
|
+
**Docs:** [forgetrail.dev/docs](https://forgetrail.dev/docs) (same recipe, plus CLI and MCP).
|
|
6
|
+
|
|
5
7
|
**You need:** any LLM chat (ChatGPT, Claude, Grok, a local Ollama UI, …) and any coding agent that can read files (Cursor, Claude Code, Codex, …).
|
|
6
8
|
|
|
7
9
|
**You do not need:** Node MCP setup, `pnpm run mcp:build`, or `forgetrail` on PATH (those are optional shortcuts below).
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Reserve an npm name with a throwaway 0.0.0 stub; the user always publishes
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Initial npm name hold
|
|
7
|
+
|
|
8
|
+
The **user always publishes**. Never run `npm publish`, `pnpm publish`, or `yarn npm publish`.
|
|
9
|
+
|
|
10
|
+
**Exception:** LocalHelm / LocalBerth `auth` can put a granular automation token in the **user** `~/.npmrc` (never in a repo). Only those tools may publish, and only when the operator asked (`localhelm publish <id> --apply`). A raw `npm publish` from any other repo is expected to fail (passkey / 2FA) — do not try it, and never print or copy the token.
|
|
11
|
+
|
|
12
|
+
When they want to grab an unscoped name before the package is real:
|
|
13
|
+
|
|
14
|
+
1. Do **not** publish from the app repo. That ships `dist/`, source maps, fixtures, or a `prepublishOnly` build.
|
|
15
|
+
2. Create a **throwaway directory outside git** (`mktemp -d`).
|
|
16
|
+
3. Write only:
|
|
17
|
+
- `package.json`: `name`, `version` `0.0.0`, `description` `"Name hold."`, `license`, `private: false`, `publishConfig.access: public`. No homepage, bin, files, deps, or repository.
|
|
18
|
+
- optional one-line `README.md`: `Name hold.`
|
|
19
|
+
4. Run `npm pack --dry-run` (expect 2–3 files). Show the listing and the exact `npm publish --access public` command for **them** to run in that directory.
|
|
20
|
+
5. Leave the stub in place until they publish, then they can delete it.
|
|
21
|
+
6. Leave the repo at `0.0.0`. The **first real release bumps** (0.0.1 or 0.1.0). `0.0.0` is spent.
|
|
22
|
+
|
|
23
|
+
This is a name stake, not a product release.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Brand voice and positioning-spine rules for all user-facing copy, marketing, and long-form narrative
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Writing Voice and Theme
|
|
7
|
+
|
|
8
|
+
Fill the bracketed placeholders once brand voice crystallizes (usually after several tone passes), then keep this rule always-applied so sessions audit copy against it instead of re-litigating tone. Methodology: ForgeTrail `docs/BRAND_AND_PRODUCT.md` → *Positioning spine (theme lock)*.
|
|
9
|
+
|
|
10
|
+
## The positioning spine
|
|
11
|
+
|
|
12
|
+
**[ONE SENTENCE: what the product supplies, and what it never claims about the user.]**
|
|
13
|
+
|
|
14
|
+
- The product supplies **[infrastructure / tooling / leverage — name it]**. It does **not** improve, transform, or elevate the person.
|
|
15
|
+
- **Banned:** person-transformation framing ("from [lesser] to [greater]", "makes you sound [status]"). For expert audiences, competence is assumed and demonstrated, never defended.
|
|
16
|
+
- Craft metaphors aim at the **materials**, or strengthen what already exists (temper, steel) — never create the person.
|
|
17
|
+
- **Assure the standard, never guarantee the outcome.** No result promises ([offers, interviews, rankings — name the domain's outcome]).
|
|
18
|
+
- Signature line(s): **[LOCKED SIGNATURE + where it may appear]**. Read every signature at skim speed; if the wrong noun can catch the blame or the claim, rewrite so the absence/gap carries it.
|
|
19
|
+
|
|
20
|
+
## Hard beats
|
|
21
|
+
|
|
22
|
+
- No anxiety-dwelling, panic, survival framing, or "you're falling behind" pressure in user-facing copy.
|
|
23
|
+
- **Reality-check beats are allowed** ([domain facts: long timelines, fixed budgets — name them]) when framed as **fact and terrain, never grievance**. Land every hard beat on agency, standard, or momentum.
|
|
24
|
+
|
|
25
|
+
## Register
|
|
26
|
+
|
|
27
|
+
- **[NAME THE REGISTER — e.g. polished Gen-X, plainspoken trade, clinical].** Fluid sentences over staccato fragment reveals; understated confidence over declarative punches; short-sentence pairs reserved for locked signatures.
|
|
28
|
+
- **Ban vague nouns** in marketing and narrative copy: "something," "stuff," "things" (fine in error strings). Name the thing.
|
|
29
|
+
- **Ban squish intensifiers:** "strongly," "deeply," "easily," "incredibly," "very." If the sentence needs the intensifier, rewrite the sentence.
|
|
30
|
+
|
|
31
|
+
## Named-person constraints (narratives)
|
|
32
|
+
|
|
33
|
+
If real people appear in origin/brand narratives, record their hard constraints here (employer safety, public roles, verb restrictions like "no founder verbs for X") and audit after every pass. Keep narrative locks in a constraints file next to the long-form (LOCKED FRAMING / ARC / VOICE pattern).
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
skill_facts_version: "0.1.0"
|
|
3
|
+
name: forgetrail
|
|
4
|
+
developer: Catalyst Forge
|
|
5
|
+
version: "0.3.0"
|
|
6
|
+
status: active
|
|
7
|
+
license: Apache-2.0
|
|
8
|
+
kind: cursor-skill
|
|
9
|
+
purpose: "Enforce the ForgeTrail 7-phase lifecycle and maintain .forgetrail/workflow_tracking.json as the system of record"
|
|
10
|
+
homepage: https://forgetrail.dev
|
|
11
|
+
repository: https://github.com/Catalyst-Forge-LLC/forgetrail
|
|
12
|
+
provenance:
|
|
13
|
+
source: https://github.com/Catalyst-Forge-LLC/forgetrail
|
|
14
|
+
publisher: Catalyst Forge
|
|
15
|
+
instructions_reach:
|
|
16
|
+
shell: explicit
|
|
17
|
+
network: implied
|
|
18
|
+
filesystem: read-write
|
|
19
|
+
tools_referenced:
|
|
20
|
+
- https://github.com/Catalyst-Forge-LLC/forgetrail/blob/main/mcp-server/TOOL_FACTS.md
|
|
21
|
+
- getPhaseGuidance
|
|
22
|
+
- runAudit
|
|
23
|
+
- searchLessons
|
|
24
|
+
- validateTracking
|
|
25
|
+
- suggestSubagentDecomposition
|
|
26
|
+
- getTemplate
|
|
27
|
+
- getNewProjectKickoff
|
|
28
|
+
- getResumeSessionInstructions
|
|
29
|
+
bundled_artifacts:
|
|
30
|
+
[]
|
|
31
|
+
egress:
|
|
32
|
+
telemetry: none
|
|
33
|
+
destinations: []
|
|
34
|
+
generated:
|
|
35
|
+
date: 2026-08-20
|
|
36
|
+
generator: hand-authored
|
|
37
|
+
credits:
|
|
38
|
+
generated_with: https://skillfacts.dev
|
|
39
|
+
built_by: "Catalyst Forge - https://www.catalystforge.com/"
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
# Skill Facts - forgetrail
|
|
43
|
+
|
|
44
|
+
| | |
|
|
45
|
+
|---|---|
|
|
46
|
+
| **Developer** | Catalyst Forge |
|
|
47
|
+
| **Version** | 0.3.0 |
|
|
48
|
+
| **Status** | active |
|
|
49
|
+
| **License** | Apache-2.0 |
|
|
50
|
+
| **Kind** | cursor-skill |
|
|
51
|
+
|
|
52
|
+
*Lifecycle playbook with explicit shell and read-write filesystem reach. Points at ForgeTrail MCP ToolFacts.*
|
|
53
|
+
|
|
54
|
+
## Purpose
|
|
55
|
+
|
|
56
|
+
Enforce the ForgeTrail 7-phase lifecycle and maintain .forgetrail/workflow_tracking.json as the system of record
|
|
57
|
+
|
|
58
|
+
## Provenance
|
|
59
|
+
|
|
60
|
+
| | |
|
|
61
|
+
|---|---|
|
|
62
|
+
| Source | https://github.com/Catalyst-Forge-LLC/forgetrail |
|
|
63
|
+
| Publisher | Catalyst Forge |
|
|
64
|
+
|
|
65
|
+
## Instructions reach
|
|
66
|
+
|
|
67
|
+
| | |
|
|
68
|
+
|---|---|
|
|
69
|
+
| Shell | explicit |
|
|
70
|
+
| Network | implied |
|
|
71
|
+
| Filesystem | read-write |
|
|
72
|
+
|
|
73
|
+
## Tools referenced
|
|
74
|
+
|
|
75
|
+
- https://github.com/Catalyst-Forge-LLC/forgetrail/blob/main/mcp-server/TOOL_FACTS.md
|
|
76
|
+
- getPhaseGuidance
|
|
77
|
+
- runAudit
|
|
78
|
+
- searchLessons
|
|
79
|
+
- validateTracking
|
|
80
|
+
- suggestSubagentDecomposition
|
|
81
|
+
- getTemplate
|
|
82
|
+
- getNewProjectKickoff
|
|
83
|
+
- getResumeSessionInstructions
|
|
84
|
+
|
|
85
|
+
## Bundled artifacts
|
|
86
|
+
|
|
87
|
+
(none)
|
|
88
|
+
|
|
89
|
+
## Egress
|
|
90
|
+
|
|
91
|
+
| | |
|
|
92
|
+
|---|---|
|
|
93
|
+
| Telemetry | none |
|
|
94
|
+
| Destinations | (none) |
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
*Generated with [SkillFacts](https://skillfacts.dev) · Built by [Catalyst Forge](https://www.catalystforge.com/)*
|
|
@@ -205,6 +205,26 @@ When the product produces **cover letters**, **outreach**, or other **persuasive
|
|
|
205
205
|
>
|
|
206
206
|
> 💡 **Lesson learned:** **Anti-self-importance and position-of-strength rules prevent grandiose and striving registers.** When generating outbound copy representing the user, explicitly instruct the LLM to write in a plain, confident, and professional tone. Ban grandiose framing of routine work, visionary self-positioning, analytical flattery, name-dropping by negation, performative specificity, and modifier stacking. Enforce a "position of strength" posture: ban mirroring the job description as proof of fit, delivering maxims/theses as quotable wisdom, branding ordinary habits as named methods, using striving/grind vocabulary, and using rhetorical scaffolding, self-narration, or clever self-authored aphorisms. Let the facts of what the user built carry the weight directly.
|
|
207
207
|
|
|
208
|
+
### Positioning spine (theme lock)
|
|
209
|
+
|
|
210
|
+
When brand copy has been through several tone passes and still drifts, stop editing lines and converge on a **single positioning spine**: one sentence stating what the product supplies and what it never claims about the user. Then codify it as an **always-apply agent rule** (e.g. `.cursor/rules/writing-voice.mdc`) so future sessions audit against it instead of re-litigating tone. Every marketing surface either serves the spine or gets rewritten.
|
|
211
|
+
|
|
212
|
+
> 📝 **Example:** An expert-audience product locked: "What's missing is never the person; it is the tooling available to them." Competence is assumed and demonstrated; the product supplies infrastructure that carries operational weight across months.
|
|
213
|
+
|
|
214
|
+
> 💡 **Lesson learned:** **Ban person-transformation framing for expert audiences.** Taglines shaped like "from [lesser status] to [greater status]" imply the user lacked the status before buying — the opposite of an infrastructure positioning, and quietly condescending to the exact buyer you want. If the brand uses a craft metaphor, aim it at the **materials** or pick a verb that strengthens what already exists (temper/steel metal that is already steel), never one that creates the person. Corollary: **assure the standard, never guarantee the outcome** — no offer/interview/result promises (a legal-safety rule as much as a tone rule).
|
|
215
|
+
|
|
216
|
+
> 💡 **Lesson learned:** **Signature lines must survive a fast read.** A punchy short-sentence signature can misparse at skim speed (e.g. "The raw material was never the problem. The foundry was." reads on a fast pass as blaming the foundry itself). Read every locked signature the way a skimmer would; if the wrong noun can attach to the blame or the claim, rewrite so the **absence** or the **gap** carries it ("What was missing was a foundry equal to it").
|
|
217
|
+
|
|
218
|
+
> 💡 **Lesson learned:** **Reality-check beats are allowed; grievance is not.** Hard domain facts (long timelines, life not pausing, fixed runways) build trust when framed as terrain that the product prices in, and read as fear-marketing when framed as complaint or dwelled on. Land every hard beat on agency, standard, or momentum — never on the user's anxiety.
|
|
219
|
+
|
|
220
|
+
> 💡 **Lesson learned:** **Staccato fragment cadence reads as LinkedIn-post voice.** ("Not the market. Not my record. The process.") For senior audiences, fold the punches into subordinate clauses and reserve short-sentence pairs for one or two locked signatures. In the same register pass, ban vague nouns ("something," "stuff") and squish intensifiers ("strongly," "deeply," "incredibly") from marketing prose — if a sentence needs the intensifier, the sentence is not done.
|
|
221
|
+
|
|
222
|
+
### Long-form origin narrative (constraints file)
|
|
223
|
+
|
|
224
|
+
A founder/origin narrative that goes through multiple refinement passes needs a **constraints file next to the narrative** (e.g. `ORIGIN_STORY_NOTES.md`) holding **LOCKED FRAMING** (hard constraints), the **ARC** (beat list), and **VOICE** rules. Without it, each pass re-litigates settled decisions and retired beats creep back. Record each pass as a dated addendum in the source spec so the "why" behind every lock survives the sessions that made it.
|
|
225
|
+
|
|
226
|
+
> 💡 **Lesson learned:** **People named in a narrative may carry constraints the copy must obey** — a current employer, a public role, a legal sensitivity. Write those down as **hard rules**, not tone preferences ("no founder/builder verbs for X," "the search is presented as past fact with no cause given"), and audit the full piece against them after every pass. A narrative that is compelling but gets a named person in trouble is a failed narrative.
|
|
227
|
+
|
|
208
228
|
### Assertive product voice (no hedging *can*)
|
|
209
229
|
|
|
210
230
|
Marketing, help, onboarding, and feature descriptions should state **what the product does** in the present tense with direct verbs — not tentative capability language.
|
package/docs/CONTEXT_PROMPT.md
CHANGED
|
@@ -295,7 +295,9 @@ _Proven patterns from this project that Claude should replicate when building ne
|
|
|
295
295
|
- **Factual grounding and veracity checks:** When generating tailored documents (cover letters, statements of interest, custom pitches) representing the user, always pass the full verbatim text of their source document of record (e.g. base resume) directly in the prompt to prevent the model from inventing credentials or metrics. Run a fast, cheap semantic veracity pass immediately after generation to flag ungrounded claims in the UI with exact excerpts, reasons, and suggested repairs. WHY: Prevents hallucinated claims from leaking into final submissions and establishes user trust.
|
|
296
296
|
- **Anti-self-importance and position-of-strength posture:** When generating outbound copy representing the user (such as cover letters or outreach), explicitly prompt the LLM to write in a plain, confident, and professional tone. Ban grandiose framing, visionary self-positioning, analytical flattery, name-dropping by negation, performative specificity, and modifier stacking. Enforce a "position of strength" posture: ban mirroring the job description as proof of fit, delivering maxims/theses as quotable wisdom, branding ordinary habits as named methods, using striving/grind vocabulary, and using rhetorical scaffolding, self-narration, or clever self-authored aphorisms. Let the facts of what was built carry the weight directly. WHY: Prevents the output from sounding like a typical "LLM-generated" brag sheet and establishes professional credibility.
|
|
297
297
|
- **Assertive product voice in copy modules:** When writing marketing, help, onboarding, or API prerequisite strings, describe **shipped capabilities** with direct present-tense verbs (`strengthens`, `suggests`, `keeps`) — not hedging **can** (`can strengthen`, `can suggest`). Reserve **can** for user options, factual extraction limits, or people. Grep `\bcan\b` after landing/how-it-works edits. WHY: Hedged capability copy undercuts premium positioning and drifts back in via LLM-generated strings if prompts use the same hedge.
|
|
298
|
+
- **Positioning spine as an always-apply rule file:** Once brand voice and theme crystallize (usually after several tone passes), write them into an always-apply agent rule (e.g. `.cursor/rules/writing-voice.mdc`): the one-sentence positioning spine, banned framings, register rules, and locked signature lines. Audit copy surfaces against the rule after marketing edits. WHY: Voice decisions made across many sessions evaporate without a rule file; each new session reinvents tone and reintroduces retired framings. See `docs/BRAND_AND_PRODUCT.md` → *Positioning spine (theme lock)*.
|
|
298
299
|
- **Progressive async UI: snapshot callbacks before close/unmount:** When a modal or panel calls `onClose()` (or unmounts) mid-flight but an async finalize step still needs parent callbacks (`onComplete`, `onFailed`, import hooks), **capture callback refs in locals before the first `await`**. Parent props can be stale after unmount. WHY: Silent finalize failures and “stuck importing” states when the initiating surface disappears while work continues.
|
|
300
|
+
- **npm name hold from a throwaway folder:** To reserve an unscoped name before the product exists, prepare `0.0.0` in a temp directory (`package.json` with `description: "Name hold."`, one-line README, no homepage/bin/deps). The **operator** runs `npm publish`. Agents never publish, except LocalHelm / LocalBerth after `auth` when the operator asked for a named `--apply`. A raw `npm publish` is expected to fail (passkey / 2FA). Token stays in user `~/.npmrc`, never in a repo. See `content/cursor-rules/npm-name-hold.mdc`. WHY: A repo `prepublishOnly` build ships `dist/` when all you wanted was the name; publishing is a human gate.
|
|
299
301
|
|
|
300
302
|
## Anti-Patterns to Avoid
|
|
301
303
|
|
|
@@ -309,6 +311,7 @@ _Things we tried that failed. Claude should NOT repeat these._
|
|
|
309
311
|
> - Don't zero out list or plan quotas to block **new** creation if that also hides existing records or breaks list/detail views. Preserve read/list headroom for legacy data; block creation with an explicit plan flag, feature gate, or server check instead.
|
|
310
312
|
> - Don't maintain a persistent free tier with non-zero limits. It creates a leaky bucket where trial users settle into free usage and never convert. Instead, expire accounts to zero limits after trial and offer a low-cost Hold tier for data preservation. The "expired" state with a retention window (e.g., 30 days) creates urgency without being punitive.
|
|
311
313
|
> - Don't bury usage counts only in billing/settings pages. Users hit limit errors with no warning. Place inline usage indicators adjacent to each feature's trigger so remaining capacity is visible before they act.
|
|
314
|
+
> - Don't sell expert-audience products with person-transformation taglines ("from [lesser status] to [greater status]", "makes you sound senior"). The buyer already holds the status; the product supplies infrastructure. Aim craft metaphors at the materials, and assure the standard rather than guarantee the outcome. See `docs/BRAND_AND_PRODUCT.md` → *Positioning spine (theme lock)*.
|
|
312
315
|
> - **Don't use a `fixed inset-0` backdrop div for click-outside detection when any ancestor has `backdrop-filter`.** The backdrop becomes scoped to the ancestor's bounds, not the viewport. Discovered when `<nav class="backdrop-blur-sm">` caused the menu backdrop to only cover the navbar, letting all page-content clicks pass through. Use the document `pointerdown` pattern instead (see Patterns to Follow).
|
|
313
316
|
> - **Don't delete parents before dependents when relations are required.** A 500 "record is part of a required relation" (common in BaaS like PocketBase) means a child still referenced a removed parent. Map referencing collections and delete leaf records first.
|
|
314
317
|
> - **Don't assume `deleteRule: null` means "everyone" in PocketBase.** It means superusers only. Set explicit delete rules in migrations/setup; otherwise production 403s masquerade as auth bugs.
|
|
@@ -318,6 +321,7 @@ _Things we tried that failed. Claude should NOT repeat these._
|
|
|
318
321
|
> - **Don't expose backend service names in user-facing error messages.** "Is PocketBase running?" or "Supabase connection failed" means nothing to users and leaks implementation details. Catch blocks in auth flows are the most visible — they're the first thing new users see when something goes wrong. Use plain-language alternatives: "Something went wrong. Check your connection and try again."
|
|
319
322
|
> - **Don't use `hostname.includes('brand.com')` (or full-URL `includes`) for security-ish host allow/deny.** Substring matches accept lookalikes and trip CodeQL incomplete-URL-substring alerts en masse. Use suffix-safe host helpers; never return `err.stack` or raw exception text in HTTP JSON to clients.
|
|
320
323
|
> - **Don't classify IP ranges by string prefix or exact equality.** `host === '127.0.0.1'` leaves the rest of `127/8`; string prefixes miss IPv4-mapped IPv6 (`::ffff:7f00:1`) and trailing-dot hosts (`localhost.`). Compare numerically after normalizing the host, and cover each blocked class with a test that fails against the old guard.
|
|
324
|
+
> - **Don't publish the app repo to reserve an npm name.** That is a product snapshot, not a stake. Use a throwaway `0.0.0` stub (`content/cursor-rules/npm-name-hold.mdc`).
|
|
321
325
|
> - **Don't parallelize many SDK list/read calls to the same collection through one client instance** without addressing library auto-cancellation (see Critical Patterns → PocketBase JS SDK). Symptom: aborted requests, empty nested arrays on list endpoints, data “missing” after refresh while single-record fetches still work.
|
|
322
326
|
> - **Don't apply page-load–era rate limits to SPAs without retuning.** Navigations fire parallel data fetches; limits that suit one-document-per-request stacks may starve a SPA. Raise general API caps and reserve tight limits for genuinely expensive endpoints (LLM, scraping, bulk export), tuned from real session traces.
|
|
323
327
|
> - **Don't duplicate policy numbers** (trial days, usage-period days, per-tier caps, trial download limits) across auth hooks, entitlements, export routes, and setup scripts. Extract named constants and one shared day-length helper; mirror literals in non-TS scripts only with an explicit sync comment pointing at the canonical module.
|
package/docs/NPM.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
You run `pnpm publish`. The gate does not log in or publish.
|
|
4
4
|
|
|
5
|
+
**Name hold (any new unscoped package):** do not publish the app repo. Prepare `0.0.0` in a throwaway folder (`package.json` + one-line README, description `Name hold.`, no homepage). **You** run `npm publish`. Agents never publish. Rule: `content/cursor-rules/npm-name-hold.mdc`. First real release bumps.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
5
9
|
Two public unscoped packages:
|
|
6
10
|
|
|
7
11
|
| Package | Version | From | What it is |
|
|
@@ -38,24 +42,28 @@ pnpm run pack:check
|
|
|
38
42
|
pnpm publish --dry-run --access public
|
|
39
43
|
pnpm publish --access public
|
|
40
44
|
|
|
41
|
-
# 3. MCP server
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
# 3. MCP server — cd in. Do not use `pnpm --dir mcp-server publish`.
|
|
46
|
+
# npm 12 treats leftover `--dir` tokens as extra package-specs and exits EUSAGE.
|
|
47
|
+
cd mcp-server
|
|
48
|
+
pnpm publish --access public
|
|
49
|
+
cd ..
|
|
44
50
|
```
|
|
45
51
|
|
|
46
52
|
`prepublishOnly` on the root re-runs the pack check. It refuses `private: true` and a tarball that includes `site/` or `specs/`.
|
|
47
53
|
|
|
54
|
+
The `Debugger listening` line on MCP `prepack` is Cursor attaching to a one-line `node -e`. It is harmless. Do not let it rewrite the publish command.
|
|
55
|
+
|
|
48
56
|
---
|
|
49
57
|
|
|
50
58
|
## After publish (verify)
|
|
51
59
|
|
|
52
60
|
```bash
|
|
53
|
-
#
|
|
54
|
-
|
|
55
|
-
|
|
61
|
+
# Prefer pnpm dlx. npm 12 `npx forgetrail --help` on Windows failed to spawn the bin.
|
|
62
|
+
pnpm dlx forgetrail@0.3.0 --help
|
|
63
|
+
pnpm dlx forgetrail@0.3.0 install --lite --dry-run
|
|
56
64
|
|
|
57
65
|
# MCP starts; needs content via FORGETRAIL_ROOT or a sibling forgetrail install
|
|
58
|
-
|
|
66
|
+
pnpm dlx forgetrail-mcp@0.2.2
|
|
59
67
|
```
|
|
60
68
|
|
|
61
69
|
Optional Cursor MCP (content from a `forgetrail` install, or set the path):
|
package/package.json
CHANGED
|
@@ -1,68 +1,69 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "forgetrail",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"private": false,
|
|
5
|
-
"description": "ForgeTrail: a persistent development system for building software with AI agents. CLI, Lite protocol, and methodology templates.",
|
|
6
|
-
"license": "Apache-2.0",
|
|
7
|
-
"type": "module",
|
|
8
|
-
"bin": {
|
|
9
|
-
"forgetrail": "./scripts/forgetrail-cli.mjs"
|
|
10
|
-
},
|
|
11
|
-
"files": [
|
|
12
|
-
"scripts/",
|
|
13
|
-
"content/",
|
|
14
|
-
"docs/",
|
|
15
|
-
"prompts/",
|
|
16
|
-
"WORKFLOW.md",
|
|
17
|
-
"TRACKING_SCHEMA.md",
|
|
18
|
-
"workflow_tracking.json",
|
|
19
|
-
"INITIAL_PROMPT.md",
|
|
20
|
-
"CONTINUATION_PROMPT.md",
|
|
21
|
-
"TRY_FORGETRAIL.md",
|
|
22
|
-
"README.md",
|
|
23
|
-
"LICENSE"
|
|
24
|
-
],
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
"mcp",
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
"
|
|
44
|
-
},
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
"
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "forgetrail",
|
|
3
|
+
"version": "0.4.1",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "ForgeTrail: a persistent development system for building software with AI agents. CLI, Lite protocol, and methodology templates.",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"bin": {
|
|
9
|
+
"forgetrail": "./scripts/forgetrail-cli.mjs"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"scripts/",
|
|
13
|
+
"content/",
|
|
14
|
+
"docs/",
|
|
15
|
+
"prompts/",
|
|
16
|
+
"WORKFLOW.md",
|
|
17
|
+
"TRACKING_SCHEMA.md",
|
|
18
|
+
"workflow_tracking.json",
|
|
19
|
+
"INITIAL_PROMPT.md",
|
|
20
|
+
"CONTINUATION_PROMPT.md",
|
|
21
|
+
"TRY_FORGETRAIL.md",
|
|
22
|
+
"README.md",
|
|
23
|
+
"LICENSE"
|
|
24
|
+
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"install:forgetrail": "node scripts/install-forgetrail.mjs",
|
|
27
|
+
"install:lite": "node scripts/install-forgetrail-lite.mjs",
|
|
28
|
+
"link:global": "node scripts/link-global.mjs",
|
|
29
|
+
"mcp": "node scripts/mcp-status.mjs dev",
|
|
30
|
+
"mcp:build": "node scripts/mcp-status.mjs build",
|
|
31
|
+
"mcp:status": "node scripts/mcp-status.mjs status",
|
|
32
|
+
"mcp:ping": "node scripts/mcp-status.mjs ping",
|
|
33
|
+
"mcp:cursor-config": "node scripts/mcp-status.mjs cursor-config",
|
|
34
|
+
"mcp:inspector": "node scripts/mcp-status.mjs inspector",
|
|
35
|
+
"ship": "pnpm --dir site run ship",
|
|
36
|
+
"site:dev": "pnpm --dir site dev",
|
|
37
|
+
"site:build": "pnpm --dir site run build",
|
|
38
|
+
"site:deploy": "pnpm --dir site run ship",
|
|
39
|
+
"pack:check": "node scripts/publish-gate.mjs",
|
|
40
|
+
"prepublishOnly": "node scripts/publish-gate.mjs"
|
|
41
|
+
},
|
|
42
|
+
"engines": {
|
|
43
|
+
"node": ">=20"
|
|
44
|
+
},
|
|
45
|
+
"keywords": [
|
|
46
|
+
"forgetrail",
|
|
47
|
+
"mcp",
|
|
48
|
+
"ai-agents",
|
|
49
|
+
"cursor",
|
|
50
|
+
"claude",
|
|
51
|
+
"methodology",
|
|
52
|
+
"lite"
|
|
53
|
+
],
|
|
54
|
+
"author": {
|
|
55
|
+
"name": "Catalyst Forge LLC",
|
|
56
|
+
"url": "https://catalystforge.com"
|
|
57
|
+
},
|
|
58
|
+
"repository": {
|
|
59
|
+
"type": "git",
|
|
60
|
+
"url": "git+https://github.com/Catalyst-Forge-LLC/forgetrail.git"
|
|
61
|
+
},
|
|
62
|
+
"bugs": {
|
|
63
|
+
"url": "https://github.com/Catalyst-Forge-LLC/forgetrail/issues"
|
|
64
|
+
},
|
|
65
|
+
"homepage": "https://forgetrail.dev",
|
|
66
|
+
"publishConfig": {
|
|
67
|
+
"access": "public"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -98,6 +98,7 @@ Run after meaningful implementation work **and** after substantive **documentati
|
|
|
98
98
|
| **`.cursor/rules/` git / commit policy** | e.g. `git-user-commits.mdc`, `commit-messages.mdc` — keep **this repo’s** `.cursor/rules/` aligned with your app when you propagate workflow changes: **end of each request**, stage only paths from that request and **commit** with message from **`git diff --staged`** (multi-line body by default); push remains explicit-only. |
|
|
99
99
|
| **Microcopy centralization completed or copy-module pattern adopted** | **`prompts/microcopy-centralization.md`**, **`docs/TECHNICAL_REFERENCE.md`** § User-facing copy, **`docs/CODE_QUALITY.md`** audit checklist, **`docs/BRAND_AND_PRODUCT.md`** duplication policy, **`docs/CONTEXT_PROMPT.md`**, **`.cursor/rules/user-facing-content.mdc`**, **`.cursor/rules/us-english.mdc`**, **`content/cursor-rules/`** mirrors — generalize patterns only, not app-specific strings. |
|
|
100
100
|
| **Assertive product voice / hedging *can* removed from capability copy** | **`.cursor/rules/user-facing-content.mdc`** (Assertive capability copy), **`docs/BRAND_AND_PRODUCT.md`** (We say / We don't say table), **`docs/CONTEXT_PROMPT.md`**, **`docs/CODE_QUALITY.md`** pre-launch grep, **`docs/TEST_PLAN.md`** §4.5; MCP **`cursor-rules/`** mirror. |
|
|
101
|
+
| **Brand theme / positioning spine crystallized** (voice rule file, banned framings, signature-line system, origin-narrative constraints) | **`docs/BRAND_AND_PRODUCT.md`** → *Positioning spine (theme lock)* + *Long-form origin narrative (constraints file)*; **`docs/CONTEXT_PROMPT.md`** pattern + anti-pattern; **`content/cursor-rules/writing-voice.mdc`** template. |
|
|
101
102
|
| **Structured eligibility or requirement fit** (education, clearance, license, work auth — taxonomy + extraction + badges + filters + LLM context) | **`docs/TECHNICAL_REFERENCE.md`** → *[Structured eligibility / requirement fit]* stub; **`docs/TEST_PLAN.md`** §4.6; **`docs/BRAND_AND_PRODUCT.md`** one-line declare-once lesson; do **not** copy domain-specific enums/regex. |
|
|
102
103
|
| **App-owned transactional email or documented deletion lifecycle** | Central outbound module (BaaS/auth SMTP vs product mail), env vars, webhook idempotency, DNS/SPF/DKIM; **TECHNICAL_REFERENCE** data-model subsection for cascade vs soft delete and orphan risks — also **DEPLOYMENT**, **TEST_PLAN**, **CONTEXT_PROMPT**, **pre-launch-audit**, **WORKFLOW** cross-checks. |
|
|
103
104
|
| **`docs/DEV_ESTIMATE.md` materially updated** | Inventory methodology (LOC, route modules), hour bands, or US cost scenarios → align ForgeTrail **`docs/DEV_ESTIMATE.md`** generalized placeholders and guidance. |
|
|
File without changes
|