As an organization administrator, I want to manage teams and members so that I can organize access and collaboration across the organization.
Design
Command Interface
# Organization commands
qctl org show
qctl org settings
qctl org usage
# Team management
qctl team list
qctl team create platform-eng --description "Platform Engineering"
qctl team show platform-eng
qctl team delete platform-eng
# Member management
qctl team member list platform-eng
qctl team member add platform-eng james.maes@acme.com
qctl team member remove platform-eng james.maes@acme.com
qctl team member invite platform-eng alice@external.com --role developer
# App ownership
qctl team app assign platform-eng orders-api
qctl team app unassign platform-eng orders-api
qctl team app list platform-eng
$ qctl org show
Organization: ACME Corp
ID: org_abc123
Plan: Enterprise
Created: 2025-06-15
Usage:
Teams: 3 / unlimited
Members: 8 / unlimited
Apps: 7 / unlimited
Deployments (month): 156 / unlimited
Owners:
cto@acme.com
$ qctl team list
NAME MEMBERS APPS DESCRIPTION
platform-eng 3 3 Platform Engineering
frontend 2 2 Frontend Development
data 1 2 Data & Analytics
$ qctl team show platform-eng
Team: Platform Engineering
ID: team_xyz789
Created: 2025-07-01
Created by: james.maes@acme.com
Members (3):
NAME EMAIL ROLE JOINED
James Maes james.maes@acme.com admin 2025-07-01
Alice Smith alice.smith@acme.com developer 2025-07-15
Bob Jones bob.jones@acme.com developer 2025-08-01
Apps (3):
NAME ENVIRONMENTS
orders-api dev, staging, prod
inventory-api dev, staging, prod
gateway dev, staging, prod
$ qctl team member invite platform-eng alice@external.com --role developer
Invitation sent to alice@external.com
Role: developer
Expires: 2026-01-10 (7 days)
Pending invitations:
alice@external.com - developer - expires 2026-01-10
Invitation Flow
┌──────────────────────────────────────────────────────────────┐
│ Member Invitation Flow │
├──────────────────────────────────────────────────────────────┤
│ │
│ 1. Admin invites user │
│ qctl team member invite team alice@external.com │
│ │ │
│ ▼ │
│ 2. Voyage sends invitation email │
│ [Accept Invitation] button with unique token │
│ │ │
│ ▼ │
│ 3. User clicks link, creates account or links SSO │
│ │ │
│ ▼ │
│ 4. User added to team with specified role │
│ Audit event recorded │
│ │
└──────────────────────────────────────────────────────────────┘
API Integration
GET /v1/org
GET /v1/org/usage
PUT /v1/org/settings
GET /v1/teams
POST /v1/teams
GET /v1/teams/{teamId}
DELETE /v1/teams/{teamId}
GET /v1/teams/{teamId}/members
POST /v1/teams/{teamId}/members
DELETE /v1/teams/{teamId}/members/{userId}
POST /v1/teams/{teamId}/invitations
GET /v1/teams/{teamId}/apps
POST /v1/teams/{teamId}/apps
DELETE /v1/teams/{teamId}/apps/{appId}
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
User Story
As an organization administrator, I want to manage teams and members so that I can organize access and collaboration across the organization.
Design
Command Interface
Organization Hierarchy
Output Format
Invitation Flow
API Integration
Files to Create/Modify
qctl-core/src/main/java/io/qrun/qctl/core/org/OrgCommand.javaqctl-core/src/main/java/io/qrun/qctl/core/org/ShowCommand.javaqctl-core/src/main/java/io/qrun/qctl/core/org/UsageCommand.javaqctl-core/src/main/java/io/qrun/qctl/core/team/TeamCommand.javaqctl-core/src/main/java/io/qrun/qctl/core/team/ListCommand.javaqctl-core/src/main/java/io/qrun/qctl/core/team/CreateCommand.javaqctl-core/src/main/java/io/qrun/qctl/core/team/ShowCommand.javaqctl-core/src/main/java/io/qrun/qctl/core/team/MemberCommand.javaqctl-core/src/main/java/io/qrun/qctl/core/team/AppCommand.javaqctl-core/src/main/java/io/qrun/qctl/core/team/InviteCommand.javaqctl-core/src/main/java/io/qrun/qctl/core/model/Organization.javaqctl-core/src/main/java/io/qrun/qctl/core/model/Team.javaqctl-core/src/main/java/io/qrun/qctl/core/model/Member.javaqctl-core/src/main/java/io/qrun/qctl/core/model/Invitation.javaImplementation Tasks
Acceptance Criteria