Transform public GitHub repositories into portable, evidence-backed static presentation sites.
SilentForge reads README content, metadata, file trees, releases, and lightweight code signals, then emits self-contained HTML you can preview, zip, and deploy anywhere. Install from npm (npm install -g silentforge) or run instantly with npx silentforge. Use the reposite / silentforge CLI for one-shot generation, or the local Workbench for interactive preview and GitHub Pages deployment.
The pipeline is deterministic and source-bound—no fabricated sections. Optional Codex (preferred) or OpenAI planning can reorder chapters, but every claim traces back to extracted repository data.
中文文档 · Live demo — scroll-story site auto-built from this README on every push to main
- Overview
- Quick start
- Usage
- Examples
- How it works
- Features
- Requirements
- Installation and distribution
- Deploy to GitHub Pages
- GitHub authentication
- Workbench
- CLI reference
- Generated output
- Presentation modes and themes
- Internationalization
- Environment variables
- Design guarantees
- FAQ
- Development
- License
SilentForge targets teams and maintainers who need a credible, offline-capable project narrative without standing up a docs platform or hand-authoring a landing page from scratch.
| Surface | Role |
|---|---|
reposite init |
One-shot CLI generation to a local directory |
| Workbench | Local web UI with live job stream, diagnostics, preview, and ZIP export |
| Generated site | Plain HTML / CSS / JS / JSON—editable and hostable anywhere |
Both entry points share the same generation engine, so Preview, ZIP download, and CLI output are structurally identical.
A typical generated site includes a hero, features, visuals, usage commands, README deep-dives, tech stack, architecture diagram, and resource links. Browse the live demo to see this repository rendered end-to-end.
Requires Node.js 20+. Pick one install path:
| Path | When to use |
|---|---|
npx silentforge |
Try once—no install |
npm install -g silentforge |
Use reposite / silentforge daily |
| Build from source | Contribute or run unreleased commits |
# Generate a static presentation site (npx — no install)
npx silentforge init vercel/next.js
# Open the generated index.html (macOS example)
open vercel/next.js-site/index.html
# Launch the local Workbench UI
npx silentforge webOptional local preview after generation:
npx --yes serve "vercel/next.js-site"Typical workflows after Quick start:
# CLI — generate to a folder and open locally
npx silentforge init owner/repo
open owner/repo-site/index.html # macOS; adjust path on Linux/Windows
# Workbench — interactive preview, diagnostics, ZIP, deploy guide
npx silentforge web
# → http://127.0.0.1:4177/
# Custom output directory and locale
npx silentforge init owner/repo -o my-site --locale zh
# Optional AI-assisted chapter ordering (Codex login preferred; OPENAI_API_KEY as fallback)
codex login # once, if using local Codex
npx silentforge init owner/repo --ai
OPENAI_API_KEY=sk-… npx silentforge init owner/repo --aiPublish to GitHub Pages: generate in Workbench, open Deploy, copy the workflow YAML into .github/workflows/silentforge-pages.yml, enable Settings → Pages → GitHub Actions, then push to main. See Deploy to GitHub Pages.
Try SilentForge on well-documented public repositories:
| Repository | Best for | Command |
|---|---|---|
| openai/openai-node | Developer deck (install + usage) | npx silentforge init openai/openai-node |
| vercel/next.js | Architecture signals in a large monorepo | npx silentforge init vercel/next.js |
| tailwindlabs/tailwindcss | Visual README content | npx silentforge init tailwindlabs/tailwindcss |
| axios/axios | Compact library narrative | npx silentforge init axios/axios |
| microsoft/playwright | Docs-heavy project with releases | npx silentforge init microsoft/playwright |
See examples/README.md for more detail.
Live demo: SilentForge on GitHub Pages — live and auto-updated from this repository on every push to main (workflow). Open it to preview scroll-story chapters, extracted commands, and architecture signals before deploying your own repo.
flowchart LR
input[GitHub repository URL]
fetch[Fetch snapshot]
parse[Parse README and metadata]
analyze[Analyze codebase signals]
plan[Build presentation plan]
render[Render static site]
output[HTML CSS JS JSON ZIP]
input --> fetch --> parse --> analyze --> plan --> render --> output
- Ingest — Resolve
owner/repo, fetch repository metadata, README, releases, and file tree via the GitHub API. - Extract — Parse README structure (features, install, usage, FAQ, screenshots, sections) and derive a lightweight code wiki (stack, entry files, configs, module map, Mermaid diagram).
- Diagnose — Score repository readiness and surface gaps before publication.
- Plan — Select presentation mode, theme, and chapters (rule-based by default; optional Codex or OpenAI with schema validation).
- Emit — Write a self-contained static site with scroll-story navigation, detail pages, and bundled Mermaid runtime (no CDN dependency).
- Scroll-story presentation sites — sticky chapter navigation, detail routes, three themes (Dark Signal, Editorial Light, Blueprint), five narrative modes or auto-selection from repository signals
- Code wiki — detected stack, entry files, config signals, directory summaries, module map, and offline Mermaid architecture diagram
- Repository diagnostics — readiness score with strengths, gaps, and recommendations in Workbench Overview
- Local Workbench — paste a URL, stream generation over SSE, inspect Overview / Resources / Code Wiki / Preview, download ZIP, copy GitHub Pages workflow from Deploy; Settings dialog for mode, theme, chapters, and Codex-first AI
- Source-bound output — plain HTML, CSS, JS, and JSON; no consumer build step; Preview and ZIP share identical files
- Internationalization — Workbench and generated site chrome in EN / 中文; repository facts stay as extracted from the source repo
| Requirement | Notes |
|---|---|
| Node.js 20+ | Required for CLI and Workbench |
| Public GitHub repository | https://github.com/owner/repo or owner/repo shorthand |
GITHUB_TOKEN |
Optional; recommended for higher API rate limits (CLI env var or Workbench UI) |
codex login |
Optional; preferred AI backend for --ai when Codex CLI is installed and logged in |
OPENAI_API_KEY |
Optional fallback for AI-assisted presentation planning (--ai or Workbench checkbox) |
OPENAI_BASE_URL |
Optional OpenAI-compatible endpoint (e.g. gpt2cursor bridge) when using OPENAI_API_KEY |
Published on npm as silentforge. Requires Node.js 20+.
# One-shot generation (no install)
npx silentforge init owner/repo
# Workbench UI
npx silentforge web
# Global install — adds reposite + silentforge to your PATH
npm install -g silentforge
reposite init owner/repo
reposite web
# Project-local install (optional)
npm install silentforge
npx silentforge init owner/reponpm install -g fails with EACCES? On macOS/Linux, npm may lack permission to write symlinks under /usr/local/bin. Use npx silentforge instead, or see Global install permission errors below.
The reposite and silentforge commands both point to the same CLI entrypoint declared in package.json:
"bin": { "reposite": "./dist/cli.js", "silentforge": "./dist/cli.js" }git clone https://github.com/ingeniousfrog/SilentForge.git
cd SilentForge
npm install
npm run buildRun without installing the global command:
# One-shot site generation
node dist/cli.js init openai/openai-node
# Workbench (compiled)
node dist/cli.js web
# Developer loop (TypeScript directly via tsx)
npm run dev -- init openai/openai-node
npm run webInstall reposite onto your PATH:
npm link # from the repo root after npm run build
reposite --help
reposite init openai/openai-node
reposite webAlternatively, after npm run build:
npm install -g .Native installers are planned. Until then, distribution is build-from-source or npm link / global install as above. A packaged app will bundle the compiled dist/ output and launch reposite web locally—no separate Node install required on the user's machine.
reposite --help
reposite web
# open http://127.0.0.1:4177/Open <output-dir>/index.html after reposite init, or serve the folder with any static file server.
SilentForge publishes a static presentation site generated from the target repository itself—README, metadata, file tree, and code signals—not a hand-written marketing page. The Live demo is this product applied to this repository.
GitHub requires a manual Pages enablement before the first Actions deploy can succeed:
- Open your repository Settings → Pages → Build and deployment.
- Set Source to GitHub Actions (not "Deploy from a branch").
- Save.
Skipping step 2 causes the workflow to fail at configure-pages with Get Pages site failed, or the deploy job to return status 404. After enabling Pages, open Actions, select Deploy SilentForge presentation site, and Re-run failed jobs (or Run workflow).
Live now: https://ingeniousfrog.github.io/SilentForge/
.github/workflows/silentforge-pages.yml is already committed. On every push to main it:
- Checks out the repo and runs
npm ci && npm run build. - Generates a presentation site for
${{ github.repository }}intosite/. - Publishes
site/to GitHub Pages.
First-time setup (only if you fork or clone into a fresh repo without Pages enabled):
- Enable Pages: Settings → Pages → Source: GitHub Actions.
- Run Deploy SilentForge presentation site from Actions.
After the first successful deploy, future pushes to main regenerate and republish automatically.
- Complete the one-time prerequisite above.
- Copy
.github/workflows/silentforge-pages.ymlinto your repo—or generate locally in Workbench, open Deploy, and copy the workflow YAML. - Push to
mainor run the workflow manually from Actions.
Other repos use the Workbench Deploy workflow template with npx --yes silentforge@latest init ${{ github.repository }} -o site --locale en (requires silentforge >= 0.1.1 on npm). This repository builds from its own source with npm ci && npm run build so CI always matches the latest commit.
Expected URL pattern: https://<user>.github.io/<repo>/ (organization repos use the same path shape).
After Pages is live, add a README badge (also available from Workbench Overview):
[](https://YOUR_USER.github.io/YOUR_REPO/)SilentForge reads public repository data through the GitHub REST API (metadata, README, releases, file tree). Authentication is optional but recommended: unauthenticated requests share a low hourly limit (~60/hour/IP); an authenticated token raises the limit substantially (~5,000/hour).
The token is used only when calling api.github.com. It is never sent to OpenAI or any other third party.
| Method | Where | How |
|---|---|---|
| Workbench UI | Browser → your local Workbench server | Expand GitHub access (optional), paste a personal access token, optionally check Remember on this device |
GITHUB_TOKEN env var |
CLI and Workbench server fallback | export GITHUB_TOKEN=ghp_… before reposite init or reposite web |
--token flag |
CLI only | reposite init owner/repo --token ghp_… |
Workbench behavior:
- Token is submitted with the generation job to your local server (
POST /api/jobs). - It is kept in memory for that job only and is not returned by job status APIs.
- If Remember on this device is checked, the token is stored in browser
localStorage(silentforge.githubToken) for convenience—useful for personal machines and future desktop builds. - If the UI field is empty, the server falls back to
process.env.GITHUB_TOKEN(set when you started Workbench).
For public repositories, a classic PAT with default public read access is sufficient. Fine-grained tokens need Contents: Read-only (and Metadata: Read-only) on the target repository.
Start the local Workbench from source:
npm run webCustom host or port:
npm run web -- --host 127.0.0.1 --port 4188Run against the compiled CLI entrypoint:
npm run build && npm run web:dist- Appearance — Toggle Dark / Light in the header (defaults to system preference; persisted as
silentforge.uiThemeafter manual selection). - Locale — Switch EN / 中文 (persisted as
silentforge.locale; affects Workbench copy and the next generation job). - GitHub token (optional) — Expand GitHub access (optional) if you hit rate limits or generate frequently. Token stays on your machine; see GitHub authentication.
- Settings — Open the Settings dialog to configure output mode, theme, chapters, and optional AI-assisted structure (Codex status badge, OpenAI key/base URL for the server-side job). Settings are saved when you click Generate.
- Target — Paste a public GitHub URL or
owner/reposhorthand and click Generate. - Inspect — Follow the generation stream; review Overview, Resources, Code Wiki, and Preview (opens automatically on completion).
- Export — Download the ZIP from the tab bar, open Deploy for GitHub Pages steps, or use Back to home to start a new target.
Workbench Settings → Output settings control the generated site only—not the Workbench shell:
| Control | Effect |
|---|---|
| Mode | Narrative structure (auto, developer deck, architecture map, visual showcase, compact story) |
| Theme | Generated page palette (auto, Dark Signal, Editorial Light, Blueprint) |
| Chapters | Include or omit section types when matching repository content exists |
Optional AI-assisted structure arranges extracted repository data with local Codex when logged in, otherwise with OpenAI when OPENAI_API_KEY is set. Facts remain source-bound; the pipeline falls back to local rules on failure or validation errors.
Generate a static presentation site from a repository.
reposite init https://github.com/openai/openai-node
reposite init openai/openai-node| Option | Description |
|---|---|
-o, --output <dir> |
Output directory (default: <repo-name>-site) |
--ai |
Enable AI-assisted structure (Codex first when logged in, OpenAI env fallback, then local rules) |
--mode <mode> |
auto, developer-deck, architecture-map, visual-showcase, compact-story |
--theme <theme> |
auto, signal-dark, editorial-light, blueprint |
--chapters <kinds> |
Comma-separated chapter kinds (see Presentation modes and themes) |
--locale <locale> |
Generated site UI language: en (default) or zh |
--token <token> |
GitHub token (falls back to GITHUB_TOKEN) |
Examples:
# AI-assisted planning (Codex preferred after `codex login`)
reposite init openai/openai-node --ai
# OpenAI API fallback
OPENAI_API_KEY=your_key reposite init openai/openai-node --ai
# gpt2cursor-compatible bridge
OPENAI_BASE_URL=http://127.0.0.1:8787/v1 OPENAI_API_KEY=g2c_… reposite init openai/openai-node --ai
# Explicit presentation options
reposite init openai/openai-node \
--mode developer-deck \
--theme signal-dark \
--chapters features,usage,architecture \
--locale zh \
--token "$GITHUB_TOKEN"Run the local Workbench server.
reposite web
reposite web --host 127.0.0.1 --port 4177reposite init writes a self-contained directory:
| Path | Purpose |
|---|---|
index.html |
Scroll-story entry with sticky chapter navigation |
assets/site.css |
Theme-aware presentation styles |
assets/site.js |
Chapter navigation, progress tracking, Mermaid bootstrap |
assets/mermaid.js |
Bundled Mermaid runtime (offline-capable) |
details/*.html |
Installation, usage, architecture, releases, README detail pages |
data/site.json |
Structured repository model and final presentation plan |
README.md |
Brief note on opening or deploying the generated site |
Content sources (never fabricated):
- README: title, summary, features, install/usage, FAQ, screenshots, links, long-form sections
- GitHub metadata: stars, topics, license, releases, default branch, language, homepage
- Code wiki: project structure, stack detection, entry files, config files, module map, Mermaid diagram
- Readiness diagnostics (also visible in Workbench Overview)
| Mode | Best for |
|---|---|
auto |
Let SilentForge infer structure from README, screenshots, and codebase signals |
developer-deck |
API/library projects with install and usage emphasis |
architecture-map |
Systems with strong structural or module signals |
visual-showcase |
Projects with screenshots and visual README content |
compact-story |
Minimal narrative for small or early-stage repositories |
| Theme ID | Label | Character |
|---|---|---|
signal-dark |
Dark Signal | Default dark developer-tool palette |
editorial-light |
Editorial Light | Light editorial layout with serif headings |
blueprint |
Blueprint | Engineering grid background |
Set via Workbench Output settings or --theme on the CLI. auto follows the selected presentation mode.
features, visuals, usage, readme-insights, technology, architecture, resources
The hero chapter is always included. Enabled chapters without matching repository content are omitted.
| Surface | Localized? | Mechanism |
|---|---|---|
| Workbench UI | Yes — EN / 中文 | Header locale capsule (silentforge.locale) |
| Workbench appearance | Yes — Dark / Light | Header theme capsule (silentforge.uiTheme; system default until overridden) |
| Generated site chrome | Yes — nav, labels, footers, diagnostics | --locale / Workbench locale at generation time |
| README and repository facts | No | Always shown as extracted from the source repository |
Switching Workbench locale does not retroactively translate past job events; it affects the UI and the next generation run.
| Variable | Purpose |
|---|---|
GITHUB_TOKEN |
GitHub API authentication when the Workbench UI token field is empty, or for CLI runs without --token |
CODEX_PATH |
Optional path to the Codex CLI binary |
CODEX_MODEL |
Optional Codex model override (-m) |
OPENAI_API_KEY |
Optional AI presentation planning fallback (--ai or Workbench checkbox) |
OPENAI_BASE_URL |
Optional OpenAI-compatible endpoint (e.g. gpt2cursor bridge) |
OPENAI_MODEL |
Override OpenAI/Codex model (default: gpt-5.5) |
SILENTFORGE_AI_TIMEOUT_MS |
AI planning timeout in milliseconds (default: 60000 for Codex, 15000 for OpenAI API) |
Copy .env.example for a commented starter template. On Windows, local Codex via PTY requires node-pty; macOS/Linux can fall back to the script command when PTY is unavailable.
Workbench-local preferences (browser localStorage, not environment variables): silentforge.locale, silentforge.uiTheme, silentforge.githubToken (when "Remember on this device" is enabled).
| Principle | Behavior |
|---|---|
| Source-bound | Claims trace to extracted repository data |
| No filler | Empty sections are omitted, not padded with placeholders |
| Editable artifacts | Plain HTML, CSS, JavaScript, and JSON—no proprietary runtime |
| Single artifact path | Preview, ZIP, and CLI output share identical files |
| Local-first | CLI and Workbench run on your machine; GitHub Pages is an optional publish target |
| Graceful AI fallback | Rule-based planning when Codex/OpenAI is unavailable or validation fails |
No for occasional public repos. A personal access token helps when you hit API rate limits (~60 requests/hour unauthenticated vs ~5,000/hour authenticated).
If npm install -g silentforge fails with EACCES: permission denied, symlink ... -> /usr/local/bin/reposite, npm cannot write global bin links to a system directory. This is common on macOS—not a SilentForge bug.
Easiest: skip global install and use npx silentforge init … or npx silentforge web (Quick start).
Recommended for daily use: point npm’s global prefix to a directory you own:
mkdir -p ~/.npm-global
npm config set prefix ~/.npm-global
# add to ~/.zshrc or ~/.bashrc:
export PATH="$HOME/.npm-global/bin:$PATH"Then run npm install -g silentforge again. Using nvm, fnm, or volta also avoids /usr/local permission issues.
Avoid sudo npm install -g unless you understand the ownership trade-offs.
No—it is a generated presentation site built from this repository by SilentForge itself. Use it to preview output quality and chapter layout, not as a separate marketing site. Forks or fresh clones still need the one-time Pages setup.
Yes. Download the ZIP or upload the output folder to Vercel, Cloudflare Pages, Netlify, or any static host. Workbench Deploy includes copy-paste commands.
The current release targets public repositories. Private repo support is planned.
No. Sections without repository evidence are omitted. Optional AI may reorder chapters but must cite extracted signals; failures fall back to local rules.
npm test # unit tests
npm run test:coverage # coverage report
npm run dev -- init owner/repo # CLI via tsx
npm run web # Workbench via tsxProject layout (selected):
src/
analyzer/ Codebase signal extraction
commands/ CLI init command
github/ Repository snapshot fetching
i18n/ EN / zh message catalogs
presentation/ Planning (rules + optional Codex/OpenAI)
readme/ README parsing
site/ Static site generation
workbench/ Local server, job store, UI
Apache-2.0 — see LICENSE.


