Fork freely & keep them all intimately close to upstream.
Spoon is a self-hostable maintenance cockpit for forks. It watches upstream, understands your fork-only changes, opens threads when decisions are needed, and helps keep your managed forks close without asking you to support them alone.
Upstream moved
Spoon checks default branches and compares the fork network.
Raw upstream ahead
3 commits
Fork-only work
5 commits
Status
Needs thread
usesend-authentik
usesend/usesend -> gibbyb/usesend
Forking should start a relationship, not a support burden.
Spoon keeps watching the upstream project after the fork. When upstream moves, it decides whether your fork can fast-forward, needs a maintenance thread, or should ignore changes that no longer matter to your version. Forking a project should not mean supporting it alone.
Spoon keeps the conversation going
A fork is not a one-time split. Spoon keeps the fork and upstream in conversation by turning maintenance into visible, reviewable threads instead of surprise drift.
- 01
Create the Spoon
Register the upstream project, your GitHub fork, default branches, clone URLs, and any extra remotes you want visible.
- 02
Watch upstream
Spoon intermittently checks the upstream default branch and compares it against the current fork state.
- 03
Auto-sync clean drift
If the fork has no custom commits and upstream moved, Spoon can fast-forward the fork without turning it into a chore.
- 04
Open a thread when it matters
If your fork has custom commits, Spoon creates a durable maintenance thread instead of guessing.
- 05
Resolve with context
Review commits, changed files, pull requests, fork-only work, ignored upstream changes, and workspace output together.
- 06
Ship through draft PRs
When code is needed, OpenCode works in an isolated workspace and hands changes back as a draft PR.
The maintenance cockpit for forks you actually care about.
Custom work should not mean permanent drift. Spoon keeps the operational picture clear from the first upstream check to the final draft PR.
Spoon dashboards
See drift, fork-only commits, pull requests, clone URLs, extra remotes, threads, activity, and settings for each managed fork.
Thread-first maintenance
Every review, conflict, ignore decision, and requested code change has a durable conversation attached to it.
Effective drift
Spoon shows raw upstream state and the effective maintenance state after intentional ignore decisions.
OpenCode workspaces
Open a file tree, browser editor, diff view, job logs, command panel, and thread context when a fork needs code.
Provider-owned AI
Use encrypted provider profiles: API-key providers run through OpenCode, and Codex login profiles run through the Codex CLI.
Draft PR handoff
Agent work becomes a branch and draft pull request. Spoon does not auto-merge custom forks behind your back.
Spoon knows when to sync, when to thread, and when to stay out of the way.
No fork-only commits + upstream ahead
Auto-syncThe fork is still close enough to fast-forward.
Fork-only commits + upstream ahead
Create threadSpoon reviews whether upstream affects custom work.
Merge conflicts
Open workspaceResolve in an isolated worker and ship a draft PR.
Irrelevant upstream changes
Ignore intentionallyRecord why those commits no longer matter to this fork.
Threads keep the whole maintenance conversation in one place.
Upstream changed, a fork drifted, a conflict appeared, or you asked for a code change. Spoon puts the reasoning, messages, workspace, artifacts, and draft PR handoff in the same thread.
Thread: Upstream auth changes landed
Source: upstream update
system
Spoon found 3 upstream commits after 8f3a2c1.
assistant
These touch auth callback handling and package scripts. Your fork has Authentik-only changes in the same area.
user
Open a review PR and preserve Authentik as the only provider.
Latest job
OpenCode workspace active
Model/provider
Codex profile
PR target
fork:main
Workspace logs, diffs, checks, and the final PR stay attached to the thread.
When a thread needs code, open a real workspace.
Spoon can expose project secrets as process env, optionally materialize an env file, run configured checks, and refuse to commit `.env*` files. The result is reviewable code, not a mystery patch.
Files
01export const authProviders = [02 Authentik({03 issuer: env.AUTHENTIK_ISSUER,04 clientId: env.AUTHENTIK_CLIENT_ID,05 }),06];+ Authentik provider
- GitHub provider fallback
Diff stays attached to the thread before the draft PR opens.
Thread
Preserve Authentik as the only provider.
I found the provider wiring and updated the env example.
Checks
Self-hosted because the fork is yours.
Your fork can have local commits, private deploy settings, Gitea mirrors, CI experiments, and emergency GitHub edits. Spoon keeps that relationship with upstream visible without taking ownership away from you.
Your GitHub App
GitHub remains the active source of truth for forks, branches, compares, and draft PRs.
Your providers
AI provider profiles, API keys, and Codex auth JSON stay encrypted and selected by you.
Your secrets
Project secrets are per Spoon, redacted in logs, and refused from commits when materialized.
Your workflow
Local commits, Gitea mirrors, CI changes, and direct GitHub edits are expected parts of the loop.
Fork the project. Keep the relationship.
Create your first Spoon, connect GitHub, and let upstream maintenance become a visible thread instead of a lonely recurring chore.