Skip to main content

A CLI wrapper that scaffolds new projects using AI coding tools with your conventions baked in.

Project description

ProjectForge

Run projectforge --name atlas --stack fastapi --description "Customer support API" --verify and get a working starter repository shaped by your conventions—not just a pile of generated files. ProjectForge scaffolds Python and TypeScript projects through Claude Code, Google Antigravity CLI, or Codex CLI, then installs, checks, and verifies the result.

A live scaffold usually takes minutes rather than seconds because providers write code and Forge runs the generated project's checks. Duration varies by stack and provider; forge --dry-run previews the complete plan instantly and makes no provider call.

The result includes the project, its development commands, and local evidence showing what was requested, which conventions and providers were used, and whether verification actually passed.

Python 3.12+

ProjectForge terminal scaffold walkthrough

Command name: current source installs projectforge as the preferred command and keeps forge as a compatibility alias. Use projectforge if Foundry's Ethereum forge is already on your PATH; shell command names cannot disambiguate the two tools.

This README documents ProjectForge v0.6.0.

What you get

  • Interactive and flag-driven scaffolding for seven Python and TypeScript stacks.
  • Metadata-aware install, lint, type-check, build, test, and health verification.
  • A generated README, development setup, and stack-specific starter structure.
  • Zero-provider-call prompt previews with --dry-run.
  • Failure recovery with --resume instead of paying to rerun completed phases.

Why trust the output

  • Forge shows the complete prompt before execution and uses bounded provider workspaces by default.
  • forge doctor checks installation and authentication without a model call or credential output.
  • Provider-default models remain in control unless you deliberately request an override.
  • Convention layers are deterministic and recorded with source hashes.
  • Blanket provider bypass requires two explicit unsafe flags.
  • Atomic progress, failure classification, and resume contracts preserve partial work safely.
  • .forge/ records distinguish “provider finished” from “generated project verified.”

Supported stacks

Stack Identifier Aliases
Next.js + React nextjs next, react
FastAPI fastapi api
FastAPI + AI/LLM fastapi-ai ai, llm
Next.js + FastAPI monorepo both fullstack, monorepo
Python CLI python-cli cli, typer
TypeScript package ts-package npm-package, library
Python worker python-worker worker, service

See the stack guide for generated structures and commands.

Requirements

  • Python 3.12 or 3.13. CI covers both versions on Ubuntu and macOS.
  • uv for the GitHub install route.
  • At least one installed and authenticated provider CLI for live generation. Preview does not need a provider.

Use the current source

The Antigravity behavior documented below is available from the current repository checkout:

git clone https://github.com/Schramm2/projectforge.git
cd projectforge
uv sync --dev
./forge --version
./forge --help

Run ./forge from the checkout anywhere this guide shows forge.

Install the latest published release

Install the PyPI distribution with uv or pipx:

uv tool install matt-projectforge
# or
pipx install matt-projectforge
projectforge --version
projectforge --help

Or install from the supported Homebrew tap:

brew install schramm2/tap/projectforge
projectforge --version

ProjectForge is the product, repository, and Homebrew formula name. PyPI required the distinct matt-projectforge distribution name because projectforge was too similar to an existing project. projectforge is the preferred command, forge remains a short compatibility alias, and ubundiforge remains only the Python import namespace for compatibility.

Install and authenticate a provider

Provider credentials stay inside the provider's own CLI. Forge does not install a provider, collect a token, or print account identity.

Provider Official setup Provider-owned login Forge readiness
Claude Code Install claude auth login Deterministic status check
Codex CLI Install codex login Deterministic status check
Google Antigravity CLI Install (source) Run agy; follow the official usage and sign-in flow in the browser or over SSH agy models check; no model prompt or quota usage

After provider login, run:

forge doctor
forge doctor --json

A live scaffold requires one provider reported as ready. Missing optional providers do not block the run. For Antigravity, Forge checks agy --version and agy models. The latter verifies the saved Google session without sending a prompt or printing account identity. If sign-in is needed, run agy, complete the provider-owned browser flow, exit with /exit, and rerun forge doctor. Remote SSH sessions display an authorization URL and code flow instead of opening a browser.

Preview first

This command creates no project, starts no provider process, and makes no model call:

forge --dry-run \
  --name atlas \
  --stack fastapi \
  --description "Customer support API" \
  --no-docker \
  --no-open

Review the target, phase routing, provider-default versus overridden models, approval mode, convention-source summary, and prompt content. Add --verbose to display full source paths and hashes. An exported prompt can contain private conventions; treat it as sensitive.

Run safely

Use the same requirements for the live run:

forge \
  --name atlas \
  --stack fastapi \
  --description "Customer support API" \
  --no-docker \
  --approval-mode safe \
  --no-open \
  --verify

safe is the default. Before the first call, Forge shows the workspace, providers, model behavior, remaining provider CLI invocations, a numeric duration range, the last measured duration for the same stack, per-provider quota context, a rough cost range, execution strategy, and demo and verification limits. Live execution sends the assembled brief, conventions, and selected context to the provider. The provider may edit the target workspace, install dependencies, run commands, use allowed network access, and consume quota.

--approval-mode plan uses a read-only provider mode but still makes provider calls. --approval-mode unsafe --allow-unsafe disables provider approval or sandbox boundaries and should only be used inside an external isolation boundary you control.

For Antigravity specifically, safe mode uses headless --print, accept-edits, and its terminal sandbox. Workspace file edits can proceed, while commands that are not allowed by Antigravity's permission policy may be denied in non-interactive print mode. Forge uses --dangerously-skip-permissions only for the explicitly consented unsafe mode.

Demo mode is enabled by default so generated startup should not require real service credentials. It does not remove the provider CLI's own authentication requirement.

Verify the result

Forge writes these project-local records:

File Evidence
.forge/progress.json Prompt hashes, attempts, durations, failure category, and resume state
.forge/scaffold.json Requested facts, routing, models, approval mode, and convention hashes
.forge/conventions-snapshot.md Exact replay input; potentially private
.forge/verification.json Redacted commands, working directories, timeouts, exits, endpoints, and remediation

The dashboard reports Project Ready only when required verification passes. If verification was disabled or skipped, the honest result is Project Created; a failed check requires attention. For high-confidence delivery, rerun the generated project's recorded commands independently.

A generated Python project can declare bounded health settings:

[tool.forge.verification]
health_endpoints = ["/healthz", "/readyz"]
health_startup_timeout = 20
health_request_timeout = 4

Health paths remain localhost-only and timeout values are bounded by Forge.

Resume a failed scaffold

Do not delete partial output or blindly restart. Fix the provider problem, then repeat the original command with --resume:

forge \
  --name atlas \
  --stack fastapi \
  --description "Customer support API" \
  --no-docker \
  --approval-mode safe \
  --no-open \
  --verify \
  --resume

Forge checks the original name, stack, routing, prompt hashes, and approval mode. It preserves completed phases and retries incomplete ones. Contract drift is rejected rather than silently mixing two scaffolds.

Manage conventions

Effective precedence is bundled defaults, selected user profile, ~/.forge/conventions.md, then project-local .forge/conventions.md. Later layers have higher precedence.

forge conventions init team
forge conventions import ./AGENTS.md --name imported-team
forge conventions list
forge conventions select team
forge conventions inspect --stack fastapi --json
forge conventions preview --stack fastapi
forge conventions validate --stack fastapi
forge conventions edit team

Imports must be Markdown, are size-bounded, and reject credential-shaped content. Repository maintainers use the separate forge admin conventions command for bundled convention sources.

Other commands

forge                         # Interactive scaffold
forge doctor                  # Readiness diagnostics, no model call
forge stats                   # Local scaffold analytics
forge stats --repair          # Quarantine recognizable legacy pytest artifacts
forge check                   # Read-only convention audit
forge check --fix             # Add supported missing convention files
forge evolve auth --dry-run   # Preview an existing-project change
forge evolve auth             # Apply it in safe mode
forge replay --dry-run        # Preview from recorded manifest/snapshot
forge replay --diff           # Replay and compare in safe mode

Run root or subcommand --help immediately before scripting a command; live help is the runtime contract.

Agent skill

The release archive includes skills/forge-scaffold/SKILL.md; the wheel installs the same files under ubundiforge/skills/forge-scaffold/. The skill teaches agents to discover live Forge behavior, preview with zero calls, preserve safe approval boundaries, and verify durable evidence without hard-coded release or model catalogs. Its behavioral evidence is in the maintainer record.

Security, privacy, and support

Read Security and Privacy before using private conventions or unsafe mode. Report vulnerabilities through SECURITY.md; use GitHub Issues for ordinary bugs.

Upgrade or uninstall

See the 0.4.1 migration guide before upgrading.

uv tool upgrade matt-projectforge
# or
brew upgrade schramm2/tap/projectforge

Uninstall the application with the matching package manager:

uv tool uninstall matt-projectforge
# or
brew uninstall projectforge

User-owned config, profiles, snapshots, and local history under ~/.forge/ are not removed. Back them up or move that directory separately if you no longer need them.

Documentation

Development

uv sync --dev
uv run python scripts/scan_safety.py
uv run python scripts/check_docs.py
uv run ruff check src/ubundiforge tests
uv run pytest
uv build

The import namespace remains ubundiforge for compatibility. See AGENTS.md and the maintainer docs before changing release behavior.

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

matt_projectforge-0.6.0.tar.gz (8.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

matt_projectforge-0.6.0-py3-none-any.whl (168.5 kB view details)

Uploaded Python 3

File details

Details for the file matt_projectforge-0.6.0.tar.gz.

File metadata

  • Download URL: matt_projectforge-0.6.0.tar.gz
  • Upload date:
  • Size: 8.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for matt_projectforge-0.6.0.tar.gz
Algorithm Hash digest
SHA256 b61a96ef62aa86bf4ad675d271790466c5f74e9c345ab3a53c4e499621a6876e
MD5 6028114642bdd07c45bf8d90cb466062
BLAKE2b-256 426c9650be89654ffbe57c8d7ee890e7e71b9a3444bf6f9c17d291ca7914c56c

See more details on using hashes here.

Provenance

The following attestation bundles were made for matt_projectforge-0.6.0.tar.gz:

Publisher: release-homebrew.yml on Schramm2/projectforge

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file matt_projectforge-0.6.0-py3-none-any.whl.

File metadata

File hashes

Hashes for matt_projectforge-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ca526e1f175ae9494bb992599e5cd9038389d36d3fa654b40e4e6530c6cec183
MD5 da1da43f13971666f1ed7b93299c4bf6
BLAKE2b-256 bf5dd8662c6ca876669a98b696540530adf7cd6bae8d7291dba2468ea0359183

See more details on using hashes here.

Provenance

The following attestation bundles were made for matt_projectforge-0.6.0-py3-none-any.whl:

Publisher: release-homebrew.yml on Schramm2/projectforge

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page