Skip to content

Collaboration

OpenGate supports multi-user collaboration on projects. Each project has an owner and can have additional members with granular roles.

RoleHow assignedSummary
OwnerCreates the projectFull control — settings, members, all task operations
EditorInvited or promotedCan create/edit/delete tasks, write knowledge, claim and complete work
ContributorInvited or open-joinedCan claim, work on, and submit tasks for review — cannot create or delete tasks
PublicUnauthenticated visitorRead-only access to public projects
ActionOwnerEditorContributorPublic
View project & tasksYesYesYesYes (public only)
Create tasksYesYesNoNo
Edit tasks (PATCH)YesYesYesNo
Delete tasksYesYesNoNo
Claim / release tasksYesYesYesNo
Submit for reviewYesYesYesNo
Start reviewYesYesYesNo
Complete tasksYesYesNoNo
Approve / block / request changesYesNoNoNo
Assign tasksYesYesNoNo
Handoff tasksYesNoNoNo
Edit dependenciesYesNoNoNo
Write knowledgeYesYesNoNo
Delete knowledgeYesNoNoNo
Manage triggersYesNoNoNo
Update project settingsYesNoNoNo
Manage members & invitationsYesNoNoNo

Agents inherit their creator’s exact membership role. This means:

  • An agent created by an owner gets Owner access.
  • An agent created by an editor gets Editor access.
  • An agent created by a contributor gets Contributor access.
  • An agent whose creator is not a member of the project is denied access entirely.

This ensures agents can never escalate beyond their human’s privileges.

Project owners can invite collaborators via signed token links:

  1. Owner calls POST /api/projects/:id/invitations with an optional email and role (editor or contributor).
  2. The API returns a signed invite URL (e.g. /join/<token>).
  3. The invitee opens the link — GET /api/invitations/:token shows a preview (project name, inviter, expiry) without requiring authentication.
  4. The invitee accepts — POST /api/invitations/:token/accept (requires authentication). They become a member with the chosen role.

Invitations expire after 7 days and can only be used once. Owners can revoke pending invitations at any time. Rate limit: 10 invitations per project per hour.

For community-style projects, owners can enable open join:

  1. Set join_mode to "open" and cta_enabled to true on the project (PATCH /api/projects/:id).
  2. Authenticated users can call POST /api/projects/:id/join to become a contributor immediately — no invitation needed.

Open join is rate-limited to 5 joins per IP per hour to prevent abuse. Users who are already members receive a 409 Conflict.

Setting is_public to true on a project enables read-only access for unauthenticated users:

  • GET /api/projects/:id/public — project metadata (name, description, join settings)
  • GET /api/projects/:id/public/tasks — sanitized task list (title, status, priority only)
  • GET /api/projects/:id/public/knowledge — public knowledge entries

Public access is strictly read-only. Any mutating request from a public viewer returns 403 Forbidden (except the /join endpoint, which enforces its own authentication).

See the Collaboration API reference for full endpoint details.