The form appeared only when nothing was configured, so once a token was saved there was no way back to it — a member who mistyped theirs, or anyone rotating one, had nowhere to go. On a single-user machine that is an annoyance; on a company one it is the ordinary case, because every member has a token of their own to set. Uses the route pair the platform already generates for every plugin, so this needed no platform change. A plug icon beside the open-in-new-tab button, as a real Link rather than a button, because it is navigation and should be cmd-clickable. Saving returns to the frame — otherwise you are left looking at the form you just submitted, which reads as nothing having happened. The two halves were already right: the panel shows only the token field when isOwner is false, and getResolvedServiceCredentials gives a member the owner's URL with their OWN secret, never the owner's.
Gitea
Your own Gitea inside Officer — repositories, issues and pull requests, rendered as the real thing rather than a copy of it.
What you get
Gitea's own web interface, in an Officer panel. Not a reimplementation: the actual application, proxied through Officer so it stays signed in, with an open in a new tab button for anything the frame handles badly.
Requirements
A Gitea instance Officer can reach.
Setup
Install the plugin, open /gitea, and set the instance URL and an API token in the connection panel. Then sign in to Gitea inside the frame, once — the frame shows your Gitea account, not the owner's.
The stored token is used only for the small things around the frame. Everything you see in it is your own session.
For agents
This plugin ships an affordance: use plain git for clone, fetch, pull and push; use tea for pull
requests, issues, comments and releases. tea is logged in as you, with your permissions.
Permissions
One permission, gitea, grantable per role like any other app permission. Each account reaches its own
Gitea identity.