# f0rge

A git forge that lives in your repository.

Issues, pull requests, tasks, labels, milestones, a wiki, CI, releases and
merges — stored as plain files under `.forge/`, committed with your code.
No server, no database, no account. The CLI is gh-shaped; the files are the
truth.

This repository is its own forge. Every issue, PR, merge, CI run and release
you can read in `.forge/` was made with f0rge itself.

## Install

Linux x86_64, prebuilt:

```sh
base=https://f0rge.gl0w.world/releases/v4.20
curl -LO \
  "$base/f0rge-v4.20-linux-x86_64.tar.gz"
mkdir -p ~/.local/bin
tar -xzf f0rge-v4.20-linux-x86_64.tar.gz
install -m 755 \
  f0rge-v4.20/f0rge ~/.local/bin/f0rge
f0rge --version   # f0rge 4.20.0
```

From source (stable Rust):

```sh
git clone https://f0rge.gl0w.world/repo.git
cd repo
cargo install --locked --path .
```

## Sixty seconds

```sh
cd your-repo
f0rge init
f0rge issue create --title "first issue" --body "plain files, committed"
f0rge issue list
f0rge ci run
f0rge --skill
```

Read `.forge/` with git; edit with the CLI, or edit the files and commit.
`f0rge --skill` is the agent contract.

## What is in the box

- `issue`, `pr`, `task`, `label`, `milestone` — entities with numbers,
  comments, state.
- `wiki` — docs in the repo, edited in place.
- `ci` — executable scripts in `.forge/ci/steps/`, filename order, first
  failure fails.
- `release` — notes plus optional build scripts; artifacts are built at the
  tag and hashed into the notes.
- `merge` — CI-gated patch application in a scratch worktree; prints
  conflicts, never resolves them.
- `init` — idempotent skeleton.
- `--json` / `--jq` — machine output; prose is never parsed.

## Design

- Files are truth. Git is the undo log.
- Never delete: close or archive.
- One repo, one forge; no server to run.
- PRs are branches. Merge gates the patch and never touches main; you
  integrate and delete the branch.

## License

AGPL-3.0-or-later. The gl0w name and seal are not part of the license.
