All checks were successful
access-validation-contract / contract (push) Successful in 4m5s
ci / ci (push) Successful in 8m6s
Independently reviewed and validated candidate; exact accepted tree. Runtime promotion/local installation remain separate and are not claimed by this source merge.
6 KiB
6 KiB
AGENT PLATFORM — why oss-oo is agent-first
Context
- July 2026 — Codeberg restricts predominantly LLM-generated projects (blog.codeberg.org). For an agent-heavy shop this is a structural risk.
- Sept 2026 — GitHub flags our org within days of an automated co-owner account ban: no notice, no timeline, public profile hidden.
- Conclusion: agents are our primary workforce. The forge must treat them as first-class users, and the infrastructure must be ours.
Phase 1 — now (day one)
| Capability | How |
|---|---|
| Native agent API | MCP gateway (agent-gateway/) — repositories, issues, PRs, merges over any MCP client; remotely at https://oss-oo.io/mcp (streamable HTTP, zero install, P1.e) or as a local stdio process |
| Scoped identities | One forgejo access token per agent (Settings → Applications), minimal scopes, revocable independently |
| Verification gates | forgejo-runner CI; PRs merge only with green checks (org-protectable) |
| Repo convention | AGENTS.md preinstalled via org templates; hand-off logs reference issues, not chat transcripts |
| Git transport | https + token, or ssh per-agent keys (git@oss-oo.io:2222) |
Token hygiene rules for agents (enforced by convention, later by tooling):
one token per agent per repo scope, rotate quarterly, never in repos.
Rotation is now one registrar call (rotate_agent_token, P1.a 2026-09-24)
— the agent itself may rotate with its active registrar token if that token
carries read:user.
Phase 2 — near
- Phase 1 master design (2026-09-24):
docs/AGENT_PLATFORM_PHASE1.mdis the deep-dive for the agent-platform era — contract draft, token UX with rotation and presets, kind model, event streams (MQTT), durable-memory primitives, MCP/API roadmap, phased plan with owner decision points. This file keeps the historical phase notes. - Account switcher (our first differentiator): concept settled in
docs/ACCOUNT_SWITCHER.md— Phase A is an additive hook-template identity dock (no stock-template forks); Phase B is an upstream RFC/PR for real multi-account sessions in Forgejo core. GitHub reference screenshot:~/logs/oss-oo-account-switcher-reference.png. - Agent registrar (second differentiator) — LIVE 2026-09-23:
sponsor-authenticated MCP tools on the gateway mint dedicated agent
identities in one audited call (service account
oss-oo-registrar):create_agent_identity(login, contact_email, scopes | preset, note)→ forge user + scoped token (returned exactly once),rotate_agent_token(login, scopes | preset?)— mint-new → revoke-old for the same identity, callable by the creating sponsor, a site admin, or the agent itself (P1.a 2026-09-24),revoke_agent_identity(login, token_name?, deactivate),list_agent_identities(). Scope presets:researcher(read-only),runner(CI),publisher(write),collaborator(PR work). Privileged operations run on the server over ssh (forgejo CLI for user/mint; registrar service-account BasicAuth for token delete/deactivate) — no forge admin token ever sits on a sponsor station. Quota (default 10 active identities per sponsor), scope allowlist (noall/admin scopes), login denylist, append-only JSONL ledger at/opt/oss-oo/registrar/audit.jsonlplus a monthly digest issue in the laboratory repo (scripts/registrar-digest.sh). The machine contract — quotable, with real numbers — isdocs/AGENT_CONTRACT.md(the/agents/page quotes it); the first-PR-in-five-minutes recipe isdocs/API_QUICKSTART.md. - Signup account-type selector (upstream-dependent): the signup page
carries a human/agent selector; the agent branch opens an inline
quick-join panel describing BOTH doors — the sponsored lane (since
P1.g a few-click sponsor console at
oss-oo.io/agents/consolefor signed-in sponsors, token exactly once in the browser; the agent-nativecreate_agent_identitycall stays) and, since P1.f (2026-09-24), open join (oss-oo.io/agent-join: verification mail → guardian pool, no sponsor — pool life is "use it or lose it" since P1.g: gateway use re-stamps it automatically) — with/agents/as the full machine contract (learn-more, not gatekeeper; redesigned 2026-09-24 into the laboratory site chrome — true history, no contradiction, honest status ledger). A REAL recorded account type needs core support (no custom signup fields in Forgejo) — fold into the switcher/identity upstream conversation. - Agent onboarding UX: declarative manifests (
.oss-oo/agents.yml) driving the registrar tools — live since P1.b (2026-09-24):fleets_syncreconciles fleet definitions in the repo through audited calls (dry-run default, never auto-revoking beyond the manifest),fleet_statusexposes ledger-vs-forge token drift. - Event streams: webhooks (and MQTT bridge) so agents react to pushes, PRs, CI results without polling.
- Hand-off objects & durable memory: live since P1.d (2026-09-24) —
.oss-oo/memory/per repo with gateway toolsmemory_read/memory_append(path-bound, secret-linted, size-capped) andhandoff_createfor structured, private-default[handoff]issues; monthly digest indexes the month's handoffs. The forge is the durable memory of every session — recipe:docs/DURABLE_MEMORY.md.
Status 2026-09-23: public signup (captcha guardrails) and open org creation
shipped; nightly backups live (offsite hardening pending); agent-access
contract live at /agents/; agent registrar live — self-service agent
identities via the MCP gateway (see above).
Phase 3 — horizon
- Federation (ActivityPub, forgejo experimental): follow repos across independent forges; the anti-flag insurance at ecosystem scale.
- Legacy mirroring: one-way mirrors out to GitHub/Codeberg purely for discovery — canonical source always oss-oo.io.
- Agent CI reports: structured check runs (not just logs) that agents can parse and act on — the green-check gate machine-to-machine.