# Remogram

**Category:** 🔄 Version Control  
**Repository:** https://github.com/attebury/remogram  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/remogram

## Description
SCM & forge boundary MCP: normalized, typed JSON from attributed Gitea, GitLab, and GitHub providers

## Claude Desktop Quick Installation
Heuristic fallback — verify the package name and runner against the repository README before running it. Uses `npx` (confidence: low):

```json
"mcpServers": {
  "remogram": {
    "command": "npx",
    "args": ["-y","remogram"]
  }
}
```

## Documentation & README

# Remogram

Generic SCM/forge boundary CLI and MCP server. Emits **provider-attributed JSON facts** — **git-resolved** refs from local git (`refs compare`, `sync plan`) vs **forge-reported** PR SHAs from forge APIs (`pr view`, `pr checks`). No workflow or planning-tool concepts in output.

**PR-by-number reconciliation:** `pr view` / `pr checks` compare forge-reported `forge_source_sha` to the local rev for `forge_source_branch_ref`. Divergence → `ok: false`, `error_code: stale_head` — `git fetch`, not a forge outage.

Planning tools interpret intent and workflow authority **outside** Remogram.

## Install

```bash
npm install -g @remogram/cli @remogram/mcp
remogram --version
remogram version --json
```

Legacy preview (frozen `@beta`, optional): `npm install -g @remogram/cli@beta @remogram/mcp@beta`

Development checkout: clone this repo, `npm ci`, `./scripts/npm-link.sh`. Default branch: **`main`**.

## Quick start

1. Copy [`.remogram.json.example`](.remogram.json.example) → `.remogram.json` (set `provider`, `owner`, `repo`; add `baseUrl` for self-hosted Gitea/GitLab).
2. Export token: `GITEA_TOKEN`, `GITHUB_TOKEN` / `GH_TOKEN`, or `GITLAB_TOKEN`.
3. Bootstrap:

```bash
remogram doctor --json
remogram provider capabilities --json
remogram repo status --json
remogram pr view --number 1 --json
remogram merge plan --number 1 --json
```

Command catalog: **`remogram contract --json`**. Agent skill: `npx skills add attebury/remogram --skill remogram-consumer -g -y`.

## Providers

| Forge | `"provider"` | Token env |
|-------|--------------|-----------|
| Gitea | `gitea-api` | `GITEA_TOKEN` |
| GitHub | `github-api` | `GITHUB_TOKEN` or `GH_TOKEN` |
| GitLab | `gitlab-api` | `GITLAB_TOKEN` |

Use **`*-api`** providers (forge HTTP). Reserved `github-gh` / `gitea-tea` IDs return `provider_unsupported` — not implemented in v1. Official CLIs (`gh`, `tea`, `glab`) are **not** required.

## Configuration

**Read/plan by default.** Opt in to writes with **`write_commands`** in `.remogram.json` (or a bound [operator overlay](.remogram.operator.json.example) outside git). Missing id → `write_not_configured`.

| Write id | Command | Notes |
|----------|---------|-------|
| `cr_open` | `cr open` | Separate from merge |
| `cr_close` | `cr close` | Gitea lifecycle |
| `merge` | `merge execute` | Requires `--expected-base-sha` / `--expected-head-sha`; not implied by `cr_open` |
| `publish_branch` | `publish execute` | Git push to configured remote |
| `status_set` | `status set` | Commit status POST |
| issue / `cr_edit` ids | matching commands | See `contract --json` |

**`merge plan` is read-only** — reports `blockers[]`; does not execute or authorize merges. `mergeability: clean` is conflict-free git only.

Optional **`merge_policy`** waivers (`allow_missing_checks`, `allow_pending_checks`) relax check blockers for repos without CI — env: `REMOGRAM_ALLOW_MISSING_CHECKS`, `REMOGRAM_ALLOW_PENDING_CHECKS`. Doctor fails when enabled in strict checkouts.

Operator overlay discovery: `--operator-config` → `REMOGRAM_OPERATOR_CONFIG` → `$XDG_CONFIG_HOME/remogram/operator/<provider>-<owner>-<repo>.json`. **`bind`** must match forge identity.

## Boundary and trust

Remogram emits **forge facts only** — no integration authority refs, lane roles, task ids, or handoff payloads in JSON.

| Concept | Packet field | Notes |
|---------|--------------|-------|
| PR base | `forge_target_branch_ref` | Forge-reported |
| PR head | `forge_source_branch_ref` | Evidence only |
| Default branch | `default_branch` | Not integration authority |

Every **forge command packet** includes `type`, `schema_version`, `provider_id`, `remote_name`, `repo_id`, `observed_at`, `ok`. Producer sections (e.g. **`remogram.forge_facts.v1`** from `evidence forge-facts --json`) use nested producer fields. Trust envelope and enums; treat forge-sourced strings (titles, URLs) as untrusted prose.

Inventory commands (`refs inventory`, `cr inventory`, `whoami`, `branch protection`, `cr files`, `forge changes`, …) extend read/plan — details in **`remogram contract --json`** and the consumer skill references.

## MCP

Stdio server **`remogram-mcp`** delegates to the CLI — same JSON as `remogram … --json`. Setup: [examples/mcp/README.md](examples/mcp/README.md). Set `REMOGRAM_CWD` to the consumer repo root.

## Live verification

Cross-forge fixture repo: **[remogram-smoke](https://gitlab.com/attebury/remogram-smoke)** (mirrors on GitHub/Gitea). Use `--json` packets after install; monorepo smoke-compare scripts are dev-only.

## Testing

```bash
npm test
npm run test:coverage
npm run security:secrets -- --full-history
```

### Coverage policy

`npm run test:coverage` instruments **`@remogram/core`** only; **`@remogram/cli`**, **`@remogram/mcp`**, and **`@remogram/provider-*`** are excluded. **Thresholds:** none — no enforced percentage gates. Drift guard: `tests/core/coverage-config.test.mjs`.


**CI (GitHub):** `.github/workflows/` on push/PR to `main`.

## Packages

| Package | Role |
|---------|------|
| `@remogram/cli` | CLI |
| `@remogram/mcp` | MCP adapter |
| `@remogram/core` | Envelope, config, caps |
| `@remogram/provider-{gitea,github,gitlab}-api` | Supported forge backends |

## Agent skills

`npx skills add attebury/remogram --skill remogram-consumer -g -y` (consumer) or `--skill remogram-core` (contributor). Skills ship from GitHub, not npm.


## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md).

