warpdotdev/warp · error
All private repositories in an environment must belong to th
Error message
All private repositories in an environment must belong to the same owner. Found multiple owners: {}.\nIf you need support for private repos from multiple owners, please submit a GitHub issue. What it means
Thrown during the auth check in auth_repos_then_execute when more than one distinct owner appears among private repositories in a single environment create/update. The server-side constraint (enforced client-side here) is that all private repos attached to one environment must share a single owner; the owners are collected from statuses with is_public == false and the combined list is printed in the error. The message explicitly points to GitHub issues for multi-owner support.
Source
Thrown at app/src/ai/agent_sdk/environment.rs:587
private_repo_owners.insert(status.owner.clone());
} else {
has_public_auth_gaps = true;
}
}
UserRepoAuthStatusEnum::UserNotConnectedToGithub => {
eprintln!("User not connected to GitHub");
has_blocking_private_issues = true;
break;
}
}
}
// Check that all private repos have the same owner
if private_repo_owners.len() > 1 {
let owners_str = private_repo_owners.into_iter().collect::<Vec<_>>().join(", ");
ctx.terminate_app(
warpui::platform::TerminationMode::ForceTerminate,
Some(Err(anyhow::anyhow!(
"All private repositories in an environment must belong to the same owner. Found multiple owners: {}.\nIf you need support for private repos from multiple owners, please submit a GitHub issue.",
owners_str
))),
);
return;
}
if !has_blocking_private_issues {
// No blocking issues with private repos.
// Public repos without auth can proceed with warnings.
if has_public_auth_gaps {
for status in &response.statuses {
if status.is_public
&& matches!(
status.status,
UserRepoAuthStatusEnum::NoInstallationOrAccessForRepo
)
{View on GitHub (pinned to e72fd7aacb)
Solutions
- Split the environments so each contains private repos from only one owner
- Drop the extra-owner private repos from the command and add them to a second environment
- Use public repos where possible — public repos do not count toward the single-owner constraint (they only produce warnings)
- If you genuinely need multi-owner private repos, upvote/file the GitHub issue referenced in the error message
Example fix
# before warp environment create --name dev --repo orgA/private-one --repo orgB/private-two # after warp environment create --name dev-a --repo orgA/private-one warp environment create --name dev-b --repo orgB/private-two
Defensive patterns
Strategy: validation
Validate before calling
// Rust: pre-validate single-owner constraint for private repos before create
fn check_single_private_owner(repos: &[(String, String)], is_private: impl Fn(&str, &str) -> bool) -> Result<(), String> {
let mut owners = std::collections::HashSet::new();
for (o, r) in repos {
if is_private(o, r) { owners.insert(o.clone()); }
}
match owners.len() {
0 | 1 => Ok(()),
_ => Err(format!("multiple private owners: {}", owners.into_iter().collect::<Vec<_>>().join(", "))),
}
} Type guard
fn all_private_repos_same_owner(repos: &[GithubRepo], owners: impl Fn(&GithubRepo) -> bool) -> bool {
let distinct: HashSet<_> = repos.iter().map(owners).collect();
distinct.len() <= 1
} Prevention
- Group private repos by owner — one environment per owner
- Keep public repos separate in planning; they never trigger this constraint
- Audit existing environments before updates that add cross-owner private repos
- Automate the owner-set check in wrapper scripts around create/update
When it happens
Trigger: `warp environment create --repo orgA/private-one --repo orgB/private-two` (or mixing a private user repo with a private org repo) where both private repos pass auth — private_repo_owners ends with 2+ entries and the command force-terminates before creating anything.
Common situations: Merging tooling from a personal account and an employer org into one environment; aggregating private repos from two different organizations; refactoring an existing multi-owner environment during update (adding a repo from another owner).
Related errors
- Invalid repo format: '{}'. Expected format: 'owner/repo'
- Failed to fetch list of base images
- Failed to fetch images: {err}
- Exceeded maximum number of authorization attempts ({}). Plea
- GitHub authorization failed. Please try again.
AI-assisted analysis of warpdotdev/warp@e72fd7aacb (2026-08-16).
Data as JSON: /api/errors/34b51d8dbcf47a4e.
Report an issue: GitHub.