forge-dev 0.1.4__tar.gz → 0.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. forge_dev-0.2.1/.release-please-manifest.json +3 -0
  2. {forge_dev-0.1.4 → forge_dev-0.2.1}/CHANGELOG.md +20 -0
  3. forge_dev-0.2.1/PKG-INFO +181 -0
  4. forge_dev-0.2.1/README.md +152 -0
  5. forge_dev-0.2.1/forge_core/cli.py +660 -0
  6. {forge_dev-0.1.4 → forge_dev-0.2.1}/forge_core/editor_bridge.py +162 -71
  7. {forge_dev-0.1.4 → forge_dev-0.2.1}/forge_core/models.py +26 -1
  8. {forge_dev-0.1.4 → forge_dev-0.2.1}/forge_core/phases/coherence.py +1 -1
  9. {forge_dev-0.1.4 → forge_dev-0.2.1}/forge_core/phases/intake.py +118 -65
  10. {forge_dev-0.1.4 → forge_dev-0.2.1}/forge_core/registry.py +31 -6
  11. {forge_dev-0.1.4 → forge_dev-0.2.1}/pyproject.toml +1 -1
  12. forge_dev-0.1.4/.release-please-manifest.json +0 -3
  13. forge_dev-0.1.4/PKG-INFO +0 -271
  14. forge_dev-0.1.4/README.md +0 -242
  15. forge_dev-0.1.4/forge_core/cli.py +0 -968
  16. {forge_dev-0.1.4 → forge_dev-0.2.1}/.github/workflows/publish.yml +0 -0
  17. {forge_dev-0.1.4 → forge_dev-0.2.1}/.github/workflows/release-please.yml +0 -0
  18. {forge_dev-0.1.4 → forge_dev-0.2.1}/.gitignore +0 -0
  19. {forge_dev-0.1.4 → forge_dev-0.2.1}/.release-please-config.json +0 -0
  20. {forge_dev-0.1.4 → forge_dev-0.2.1}/claude_skill/SKILL.md +0 -0
  21. {forge_dev-0.1.4 → forge_dev-0.2.1}/forge_core/__init__.py +0 -0
  22. {forge_dev-0.1.4 → forge_dev-0.2.1}/forge_core/agents/__init__.py +0 -0
  23. {forge_dev-0.1.4 → forge_dev-0.2.1}/forge_core/auditor.py +0 -0
  24. {forge_dev-0.1.4 → forge_dev-0.2.1}/forge_core/detector.py +0 -0
  25. {forge_dev-0.1.4 → forge_dev-0.2.1}/forge_core/phases/__init__.py +0 -0
  26. {forge_dev-0.1.4 → forge_dev-0.2.1}/forge_core/phases/context.py +0 -0
  27. {forge_dev-0.1.4 → forge_dev-0.2.1}/forge_core/standards/api-first-design.yaml +0 -0
  28. {forge_dev-0.1.4 → forge_dev-0.2.1}/forge_core/standards/microservice-packaging.yaml +0 -0
  29. {forge_dev-0.1.4 → forge_dev-0.2.1}/forge_core/standards/observability.yaml +0 -0
  30. {forge_dev-0.1.4 → forge_dev-0.2.1}/forge_core/standards/security-baseline.yaml +0 -0
  31. {forge_dev-0.1.4 → forge_dev-0.2.1}/forge_core/standards/type-safety.yaml +0 -0
  32. {forge_dev-0.1.4 → forge_dev-0.2.1}/forge_core/templates/__init__.py +0 -0
  33. {forge_dev-0.1.4 → forge_dev-0.2.1}/forge_core/utils/__init__.py +0 -0
  34. {forge_dev-0.1.4 → forge_dev-0.2.1}/mcp_server/__init__.py +0 -0
  35. {forge_dev-0.1.4 → forge_dev-0.2.1}/mcp_server/server.py +0 -0
  36. {forge_dev-0.1.4 → forge_dev-0.2.1}/references/implementation-phases.md +0 -0
  37. {forge_dev-0.1.4 → forge_dev-0.2.1}/setup.sh +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.2.1"
3
+ }
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.1](https://github.com/luiskcr/forge/compare/v0.2.0...v0.2.1) (2026-04-12)
4
+
5
+
6
+ ### Features
7
+
8
+ * teach CLAUDE.md and skill to handle stack conflicts explicitly ([1414623](https://github.com/luiskcr/forge/commit/141462333a918c24c928fd1dce32f25ff4ba3062))
9
+
10
+ ## [0.2.0](https://github.com/luiskcr/forge/compare/v0.1.4...v0.2.0) (2026-04-12)
11
+
12
+
13
+ ### ⚠ BREAKING CHANGES
14
+
15
+ * removes forge status, journal, standards, upgrade, assess, mcps, sync, audit, and the context/brief/config command groups. Forge is now a 3-command compliance agent.
16
+
17
+ ### Features
18
+
19
+ * brief command group with schema validation and context cross-check ([4e0496a](https://github.com/luiskcr/forge/commit/4e0496a301e18eb1df115d98c9d37653d13d0bfe))
20
+ * collapse CLI to init/check/intake; file-based workflow ([623712e](https://github.com/luiskcr/forge/commit/623712eac2631505f2e8e99de007f45149496ca4))
21
+ * ship standards and upgrade the intake prompt ([cf69a78](https://github.com/luiskcr/forge/commit/cf69a782c6f5c47be4874c1cd1dbe673c5cf5735))
22
+
3
23
  ## [0.1.4](https://github.com/luiskcr/forge/compare/v0.1.3...v0.1.4) (2026-04-12)
4
24
 
5
25
 
@@ -0,0 +1,181 @@
1
+ Metadata-Version: 2.4
2
+ Name: forge-dev
3
+ Version: 0.2.1
4
+ Summary: AI-Native Development Workflow Engine
5
+ Author: NaiaTech
6
+ License-Expression: MIT
7
+ Keywords: ai,development,mcp,scaffold,workflow
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Programming Language :: Python :: 3.11
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Topic :: Software Development :: Code Generators
14
+ Requires-Python: >=3.11
15
+ Requires-Dist: click>=8.1.0
16
+ Requires-Dist: gitpython>=3.1.0
17
+ Requires-Dist: httpx>=0.27.0
18
+ Requires-Dist: jinja2>=3.1
19
+ Requires-Dist: mcp>=1.0.0
20
+ Requires-Dist: pydantic>=2.0
21
+ Requires-Dist: pyyaml>=6.0
22
+ Requires-Dist: rich>=13.0
23
+ Provides-Extra: dev
24
+ Requires-Dist: mypy>=1.10; extra == 'dev'
25
+ Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
26
+ Requires-Dist: pytest>=8.0; extra == 'dev'
27
+ Requires-Dist: ruff>=0.4; extra == 'dev'
28
+ Description-Content-Type: text/markdown
29
+
30
+ # Forge — Compliance Agent for AI-Assisted Development
31
+
32
+ Forge is a **compliance agent** for teams building software with AI code editors (Claude Code, Cursor, Copilot, Windsurf). It does not write code, plan features, or generate scaffolding — your AI editor already does that better. What Forge does is keep the editor *in check*: it captures your stack decisions, standards, patterns, and regulatory constraints in one place, and delivers them to the editor through the files it already reads (`CLAUDE.md`, `.claude/skills/`, `.cursorrules`, etc.).
33
+
34
+ The editor decides *what* to build and *how*. Forge enforces the *rules that must hold*.
35
+
36
+ > ⚠️ **Alpha (0.x)** — commands and file layouts may still change between releases.
37
+
38
+ ## What Forge actually does
39
+
40
+ - **Captures** project-level decisions in `.forge/context.yaml` (cloud, stack, database, auth, IaC, regulatory).
41
+ - **Detects** the stack of an existing repo from `package.json`, `pyproject.toml`, `main.bicep`, `docker-compose.yml`, `.github/workflows/`, etc. Anything it can't detect is marked `unspecified` so the AI editor can fill it in.
42
+ - **Ships** opinionated standards (security, observability, type-safety, api-first, microservice-packaging) that get injected into `CLAUDE.md`.
43
+ - **Generates** `CLAUDE.md`, a Claude Code skill, and a discovery prompt from all of the above. Every session of your AI editor reads this automatically.
44
+ - **Maintains** a `.forge/journal.md` where the AI editor appends project-specific learnings across sessions.
45
+ - **Validates** everything is internally consistent with a single `forge check` command.
46
+ - **Normalizes** a requirement document (PRD, user story, conversation) into a structured brief via `forge intake`.
47
+
48
+ ## What Forge does NOT do
49
+
50
+ - Plan features or produce implementation plans. That is Claude's job.
51
+ - Write or scaffold code, infrastructure, migrations, auth flows, or tests.
52
+ - Run code audits by itself. Your editor reads the standards from `CLAUDE.md` and checks files as it edits them.
53
+ - Call LLMs. Forge is pure Python and file I/O; the intelligence is in your editor.
54
+ - Replace `~/.claude/CLAUDE.md` global preferences. Forge only owns per-project files.
55
+
56
+ ## Installation
57
+
58
+ Forge is published on PyPI as `forge-dev`. The recommended way is [`uv`](https://github.com/astral-sh/uv), which manages its own Python and isolates CLI tools automatically:
59
+
60
+ ```bash
61
+ curl -LsSf https://astral.sh/uv/install.sh | sh # one-time: install uv
62
+ uv tool install forge-dev
63
+ forge --version
64
+ ```
65
+
66
+ <details>
67
+ <summary>Alternatives: <code>pipx</code>, <code>pip</code>, or from source</summary>
68
+
69
+ ```bash
70
+ pipx install forge-dev
71
+ # or
72
+ pip install forge-dev
73
+ # or
74
+ git clone https://github.com/luiskcr/forge.git && cd forge && pip install -e ".[dev]"
75
+ ```
76
+
77
+ </details>
78
+
79
+ Requires Python ≥ 3.11. If you use `uv`, it will download a compatible Python automatically.
80
+
81
+ ### Updating
82
+
83
+ ```bash
84
+ uv tool upgrade forge-dev # or: pipx upgrade forge-dev / pip install --upgrade forge-dev
85
+ ```
86
+
87
+ > **Note for macOS users on Tahoe (macOS 26):** the Homebrew bottles for `python@3.13` / `python@3.14` currently ship a broken `pyexpat` module that breaks `pip`, `pipx`, and `venv`. If you hit `Symbol not found: _XML_SetAllocTrackerActivationThreshold`, use `uv` — it bundles its own Python and avoids the issue.
88
+
89
+ ## The 3 commands
90
+
91
+ | Command | What it does |
92
+ |---|---|
93
+ | `forge init` | Create or refresh the project. Detects stack, generates `CLAUDE.md`, `.claude/skills/forge/SKILL.md`, and — if anything is unclear — a `.forge/discovery_prompt.md` the editor uses to fill in the gaps. |
94
+ | `forge check` | Validate current state. Reports context completeness, brief ↔ context consistency, and registry health. Exits non-zero on critical issues. |
95
+ | `forge intake <file>` | Turn a requirement document into `.forge/intake_prompt.md`. The prompt tells the AI editor to produce `.forge/brief.yaml` in the required schema, cross-checking it against `.forge/context.yaml`. |
96
+
97
+ That's the whole surface. Everything else is file-based: edit `.forge/context.yaml`, `.forge/brief.yaml`, `.forge/journal.md`, or `~/.forge/user/standards/*.yaml` with your editor's Write/Edit tool, then run `forge init` to refresh `CLAUDE.md`.
98
+
99
+ ## Typical flow
100
+
101
+ ```bash
102
+ # 1. In a brand-new project
103
+ mkdir my-app && cd my-app
104
+ forge init
105
+ # → asks a few questions (mission, type, cloud, IaC, ...) if this is a greenfield repo
106
+ # → creates .forge/, CLAUDE.md, .claude/skills/forge/SKILL.md
107
+
108
+ # 2. In an existing project
109
+ cd existing-repo
110
+ forge init
111
+ # → detects backend/frontend/cloud/database/auth/IaC/CI-CD from config files
112
+ # → writes .forge/discovery_prompt.md listing fields it could not detect
113
+ # → open Claude Code / Cursor and ask it to "resolve the Forge discovery prompt"
114
+ # the editor reads .forge/discovery_prompt.md, explores the repo, edits
115
+ # .forge/context.yaml directly, and runs forge init to refresh CLAUDE.md
116
+
117
+ # 3. You have a requirement doc
118
+ forge intake requirements.md
119
+ # → writes .forge/intake_prompt.md for the AI editor
120
+ # → the editor produces .forge/brief.yaml (YAML matching the ForgeBrief schema)
121
+ # → run forge check to validate it against context
122
+
123
+ # 4. Before every commit / at the end of a session
124
+ forge check
125
+ # ✓ context — all fields resolved
126
+ # ✓ brief — consistent with context
127
+ # ✓ standards — 5 core, 2 user
128
+ # All good.
129
+ ```
130
+
131
+ ## How the editor knows about Forge
132
+
133
+ When you run `forge init`, two files are written that your AI editor reads automatically:
134
+
135
+ - **`CLAUDE.md`** at the repo root — contains the full set of standards, stack rules, patterns, journal entries, and self-audit instructions. Claude Code reads this at the start of every session.
136
+ - **`.claude/skills/forge/SKILL.md`** — a Claude Code skill that fires whenever the editor is about to write or modify code. It tells the editor: read `CLAUDE.md`, respect every rule, append learnings to `.forge/journal.md`, and run `forge check` before declaring work complete.
137
+
138
+ Your editor does not need any new tool or MCP server to use Forge — it just reads the files Forge writes.
139
+
140
+ ## Repository layout Forge creates
141
+
142
+ ```
143
+ project/
144
+ ├── CLAUDE.md ← editor instructions (do not edit manually)
145
+ ├── .claude/skills/forge/SKILL.md ← Claude Code skill
146
+ └── .forge/
147
+ ├── context.yaml ← stack, cloud, auth, regulatory decisions
148
+ ├── brief.yaml ← (optional) normalized requirement
149
+ ├── journal.md ← project-specific learnings the editor appends
150
+ ├── discovery_prompt.md ← (appears when fields are unresolved)
151
+ ├── intake_prompt.md ← (appears after forge intake)
152
+ └── overrides/
153
+ └── README.md ← drop project-specific standard overrides here
154
+ ```
155
+
156
+ And globally:
157
+
158
+ ```
159
+ ~/.forge/
160
+ ├── core/standards/ ← standards shipped with the installed forge_dev wheel
161
+ └── user/
162
+ ├── config.yaml ← your personal defaults (all `unspecified` until you set them)
163
+ ├── standards/*.yaml ← standards you've added manually
164
+ ├── patterns/*.yaml ← approved patterns
165
+ ├── anti-patterns/*.yaml ← prohibited patterns
166
+ └── mcps.yaml ← your MCP registry
167
+ ```
168
+
169
+ ## MCP server (experimental)
170
+
171
+ Forge also exposes an MCP server mirroring the CLI, so editors that speak MCP can invoke Forge operations as tools:
172
+
173
+ ```bash
174
+ python -m mcp_server.server
175
+ ```
176
+
177
+ The MCP surface is currently larger than the CLI (it exposes the old commands too). A minimal 3-tool version matching the CLI surface is on the roadmap.
178
+
179
+ ## License
180
+
181
+ MIT
@@ -0,0 +1,152 @@
1
+ # Forge — Compliance Agent for AI-Assisted Development
2
+
3
+ Forge is a **compliance agent** for teams building software with AI code editors (Claude Code, Cursor, Copilot, Windsurf). It does not write code, plan features, or generate scaffolding — your AI editor already does that better. What Forge does is keep the editor *in check*: it captures your stack decisions, standards, patterns, and regulatory constraints in one place, and delivers them to the editor through the files it already reads (`CLAUDE.md`, `.claude/skills/`, `.cursorrules`, etc.).
4
+
5
+ The editor decides *what* to build and *how*. Forge enforces the *rules that must hold*.
6
+
7
+ > ⚠️ **Alpha (0.x)** — commands and file layouts may still change between releases.
8
+
9
+ ## What Forge actually does
10
+
11
+ - **Captures** project-level decisions in `.forge/context.yaml` (cloud, stack, database, auth, IaC, regulatory).
12
+ - **Detects** the stack of an existing repo from `package.json`, `pyproject.toml`, `main.bicep`, `docker-compose.yml`, `.github/workflows/`, etc. Anything it can't detect is marked `unspecified` so the AI editor can fill it in.
13
+ - **Ships** opinionated standards (security, observability, type-safety, api-first, microservice-packaging) that get injected into `CLAUDE.md`.
14
+ - **Generates** `CLAUDE.md`, a Claude Code skill, and a discovery prompt from all of the above. Every session of your AI editor reads this automatically.
15
+ - **Maintains** a `.forge/journal.md` where the AI editor appends project-specific learnings across sessions.
16
+ - **Validates** everything is internally consistent with a single `forge check` command.
17
+ - **Normalizes** a requirement document (PRD, user story, conversation) into a structured brief via `forge intake`.
18
+
19
+ ## What Forge does NOT do
20
+
21
+ - Plan features or produce implementation plans. That is Claude's job.
22
+ - Write or scaffold code, infrastructure, migrations, auth flows, or tests.
23
+ - Run code audits by itself. Your editor reads the standards from `CLAUDE.md` and checks files as it edits them.
24
+ - Call LLMs. Forge is pure Python and file I/O; the intelligence is in your editor.
25
+ - Replace `~/.claude/CLAUDE.md` global preferences. Forge only owns per-project files.
26
+
27
+ ## Installation
28
+
29
+ Forge is published on PyPI as `forge-dev`. The recommended way is [`uv`](https://github.com/astral-sh/uv), which manages its own Python and isolates CLI tools automatically:
30
+
31
+ ```bash
32
+ curl -LsSf https://astral.sh/uv/install.sh | sh # one-time: install uv
33
+ uv tool install forge-dev
34
+ forge --version
35
+ ```
36
+
37
+ <details>
38
+ <summary>Alternatives: <code>pipx</code>, <code>pip</code>, or from source</summary>
39
+
40
+ ```bash
41
+ pipx install forge-dev
42
+ # or
43
+ pip install forge-dev
44
+ # or
45
+ git clone https://github.com/luiskcr/forge.git && cd forge && pip install -e ".[dev]"
46
+ ```
47
+
48
+ </details>
49
+
50
+ Requires Python ≥ 3.11. If you use `uv`, it will download a compatible Python automatically.
51
+
52
+ ### Updating
53
+
54
+ ```bash
55
+ uv tool upgrade forge-dev # or: pipx upgrade forge-dev / pip install --upgrade forge-dev
56
+ ```
57
+
58
+ > **Note for macOS users on Tahoe (macOS 26):** the Homebrew bottles for `python@3.13` / `python@3.14` currently ship a broken `pyexpat` module that breaks `pip`, `pipx`, and `venv`. If you hit `Symbol not found: _XML_SetAllocTrackerActivationThreshold`, use `uv` — it bundles its own Python and avoids the issue.
59
+
60
+ ## The 3 commands
61
+
62
+ | Command | What it does |
63
+ |---|---|
64
+ | `forge init` | Create or refresh the project. Detects stack, generates `CLAUDE.md`, `.claude/skills/forge/SKILL.md`, and — if anything is unclear — a `.forge/discovery_prompt.md` the editor uses to fill in the gaps. |
65
+ | `forge check` | Validate current state. Reports context completeness, brief ↔ context consistency, and registry health. Exits non-zero on critical issues. |
66
+ | `forge intake <file>` | Turn a requirement document into `.forge/intake_prompt.md`. The prompt tells the AI editor to produce `.forge/brief.yaml` in the required schema, cross-checking it against `.forge/context.yaml`. |
67
+
68
+ That's the whole surface. Everything else is file-based: edit `.forge/context.yaml`, `.forge/brief.yaml`, `.forge/journal.md`, or `~/.forge/user/standards/*.yaml` with your editor's Write/Edit tool, then run `forge init` to refresh `CLAUDE.md`.
69
+
70
+ ## Typical flow
71
+
72
+ ```bash
73
+ # 1. In a brand-new project
74
+ mkdir my-app && cd my-app
75
+ forge init
76
+ # → asks a few questions (mission, type, cloud, IaC, ...) if this is a greenfield repo
77
+ # → creates .forge/, CLAUDE.md, .claude/skills/forge/SKILL.md
78
+
79
+ # 2. In an existing project
80
+ cd existing-repo
81
+ forge init
82
+ # → detects backend/frontend/cloud/database/auth/IaC/CI-CD from config files
83
+ # → writes .forge/discovery_prompt.md listing fields it could not detect
84
+ # → open Claude Code / Cursor and ask it to "resolve the Forge discovery prompt"
85
+ # the editor reads .forge/discovery_prompt.md, explores the repo, edits
86
+ # .forge/context.yaml directly, and runs forge init to refresh CLAUDE.md
87
+
88
+ # 3. You have a requirement doc
89
+ forge intake requirements.md
90
+ # → writes .forge/intake_prompt.md for the AI editor
91
+ # → the editor produces .forge/brief.yaml (YAML matching the ForgeBrief schema)
92
+ # → run forge check to validate it against context
93
+
94
+ # 4. Before every commit / at the end of a session
95
+ forge check
96
+ # ✓ context — all fields resolved
97
+ # ✓ brief — consistent with context
98
+ # ✓ standards — 5 core, 2 user
99
+ # All good.
100
+ ```
101
+
102
+ ## How the editor knows about Forge
103
+
104
+ When you run `forge init`, two files are written that your AI editor reads automatically:
105
+
106
+ - **`CLAUDE.md`** at the repo root — contains the full set of standards, stack rules, patterns, journal entries, and self-audit instructions. Claude Code reads this at the start of every session.
107
+ - **`.claude/skills/forge/SKILL.md`** — a Claude Code skill that fires whenever the editor is about to write or modify code. It tells the editor: read `CLAUDE.md`, respect every rule, append learnings to `.forge/journal.md`, and run `forge check` before declaring work complete.
108
+
109
+ Your editor does not need any new tool or MCP server to use Forge — it just reads the files Forge writes.
110
+
111
+ ## Repository layout Forge creates
112
+
113
+ ```
114
+ project/
115
+ ├── CLAUDE.md ← editor instructions (do not edit manually)
116
+ ├── .claude/skills/forge/SKILL.md ← Claude Code skill
117
+ └── .forge/
118
+ ├── context.yaml ← stack, cloud, auth, regulatory decisions
119
+ ├── brief.yaml ← (optional) normalized requirement
120
+ ├── journal.md ← project-specific learnings the editor appends
121
+ ├── discovery_prompt.md ← (appears when fields are unresolved)
122
+ ├── intake_prompt.md ← (appears after forge intake)
123
+ └── overrides/
124
+ └── README.md ← drop project-specific standard overrides here
125
+ ```
126
+
127
+ And globally:
128
+
129
+ ```
130
+ ~/.forge/
131
+ ├── core/standards/ ← standards shipped with the installed forge_dev wheel
132
+ └── user/
133
+ ├── config.yaml ← your personal defaults (all `unspecified` until you set them)
134
+ ├── standards/*.yaml ← standards you've added manually
135
+ ├── patterns/*.yaml ← approved patterns
136
+ ├── anti-patterns/*.yaml ← prohibited patterns
137
+ └── mcps.yaml ← your MCP registry
138
+ ```
139
+
140
+ ## MCP server (experimental)
141
+
142
+ Forge also exposes an MCP server mirroring the CLI, so editors that speak MCP can invoke Forge operations as tools:
143
+
144
+ ```bash
145
+ python -m mcp_server.server
146
+ ```
147
+
148
+ The MCP surface is currently larger than the CLI (it exposes the old commands too). A minimal 3-tool version matching the CLI surface is on the roadmap.
149
+
150
+ ## License
151
+
152
+ MIT