);
};
-
diff --git a/docs/features/repositories.md b/docs/features/repositories.md
index 216bcea..a338ffd 100644
--- a/docs/features/repositories.md
+++ b/docs/features/repositories.md
@@ -12,7 +12,7 @@ Git repositories are managed within projects. You can create bare repositories f
2. Click the **"New Repository"** button
3. Fill in the form:
- **Name**: Repository name (required)
- - **Remote URL**: For cloning (optional)
+ - **Owner** and **Repository**: For SSH cloning from `git.commumedia.org`
- **Mirror Clone**: Toggle for mirror clones
4. Click **"Create Repository"**
@@ -25,12 +25,12 @@ Creates a new bare git repository. Use this for:
#### Clone from Remote
-Enter a git URL to clone from:
-- `https://github.com/user/repo.git`
-- `git@github.com:user/repo.git`
-- `https://gitlab.com/user/repo.git`
+Enter the repository owner and name to clone from `git.commumedia.org` over SSH:
+- `owner`: `alice`
+- `repository`: `demo`
+- Resulting SSH URL: `git@git.commumedia.org:alice/demo.git`
-**Smart URL Parsing:** If you paste a browser URL (like `https://github.com/user/repo/tree/main`), the system will automatically suggest the correct git URL.
+**Advanced fallback:** If needed, you can still paste a full git URL and the system will suggest the correct clone URL.
#### Mirror Clone
diff --git a/openspec/changes/git-repo-ssh-clone-check/.openspec.yaml b/openspec/changes/git-repo-ssh-clone-check/.openspec.yaml
new file mode 100644
index 0000000..4a1c677
--- /dev/null
+++ b/openspec/changes/git-repo-ssh-clone-check/.openspec.yaml
@@ -0,0 +1,2 @@
+schema: spec-driven
+created: 2026-05-22
diff --git a/openspec/changes/git-repo-ssh-clone-check/design.md b/openspec/changes/git-repo-ssh-clone-check/design.md
new file mode 100644
index 0000000..5829d65
--- /dev/null
+++ b/openspec/changes/git-repo-ssh-clone-check/design.md
@@ -0,0 +1,45 @@
+## Context
+
+The current repository creation flow already supports cloning remote repositories via `remote_url` and can normalize pasted browser URLs. However, the UI asks for a full URL, which is awkward for the fixed provider `git.commumedia.org`. The requested behavior is to enter `owner` and `repo`, check whether the repository exists, and clone only if it does.
+
+## Goals / Non-Goals
+
+**Goals:**
+- Accept SSH-only `owner` and `repo` inputs for cloning from `git.commumedia.org`
+- Verify repository existence before clone
+- Preserve full URL paste as a fallback path
+- Preserve blank repository creation
+- Reuse the existing repository create endpoint and shared dialog
+
+**Non-Goals:**
+- Supporting multiple git providers
+- Adding a remote repository discovery API
+- Supporting HTTPS clone flow for the new structured path
+- Changing repository storage or clone behavior beyond preflight validation
+
+## Decisions
+
+**1. Provider assumption**
+- Hardcode `git.commumedia.org` for the structured clone path
+- Build SSH URLs as `git@git.commumedia.org:{owner}/{repo}.git`
+
+**2. Existence check**
+- Use `git ls-remote` on the constructed SSH URL before cloning
+- If the command fails, surface a repository-not-found/inaccessible error and do not clone
+
+**3. UI structure**
+- Keep the shared repository creation dialog as the single entry point
+- In clone mode, collect `owner` and `repo` instead of asking for a full URL
+- Keep an advanced paste-URL fallback for existing behavior and browser URL parsing
+- Keep blank repository creation available in the same dialog
+
+**4. Backend behavior**
+- Reuse `POST /projects/{project_id}/repositories`
+- Add preflight logic before the existing `git clone --mirror`
+- Leave the database schema unchanged
+
+## Risks / Trade-offs
+
+**[Risk] SSH auth may still fail even if the repo exists** → Mitigation: preflight error should be explicit and user-facing.
+**[Risk] Command availability** → Mitigation: reuse the same `git` dependency already required for cloning.
+**[Risk] UI complexity** → Mitigation: keep the dialog shared and minimal, with fallback URL paste.
diff --git a/openspec/changes/git-repo-ssh-clone-check/proposal.md b/openspec/changes/git-repo-ssh-clone-check/proposal.md
new file mode 100644
index 0000000..66e512c
--- /dev/null
+++ b/openspec/changes/git-repo-ssh-clone-check/proposal.md
@@ -0,0 +1,25 @@
+## Why
+
+Repository creation already supports cloning from a remote URL, but the current UI only accepts a full URL. For the common fixed-provider case (`git.commumedia.org`), users should be able to enter `owner` and `repo` and have the app verify the repository exists before cloning. If the repository does not exist, the app should surface a clear error. Existing blank repository creation must remain available.
+
+## What Changes
+
+- Change the shared repository create dialog to support an SSH-only clone form with `owner` and `repo`
+- Build the clone target as `git@git.commumedia.org:{owner}/{repo}.git`
+- Preflight clone targets with `git ls-remote` before cloning
+- Return a clear error when the repository is missing or inaccessible
+- Keep the current full URL paste flow as an advanced fallback
+- Keep blank repository creation as a fallback option
+
+## Capabilities
+
+### Modified Capabilities
+
+- `git-repo`: Repository creation UX and clone validation reuse the existing create endpoint and clone path
+
+## Impact
+
+- Frontend: `repository-create-dialog.tsx`, `git-repositories.tsx`, `repositories-settings-tab.tsx`
+- Backend: `git_repositories.py` create endpoint clone preflight
+- Docs: repository creation guidance must reflect SSH-only owner/repo input
+- Tests: add coverage for SSH repo existence checks and fallback URL behavior
diff --git a/openspec/changes/git-repo-ssh-clone-check/tasks.md b/openspec/changes/git-repo-ssh-clone-check/tasks.md
new file mode 100644
index 0000000..542c7b6
--- /dev/null
+++ b/openspec/changes/git-repo-ssh-clone-check/tasks.md
@@ -0,0 +1,22 @@
+## 1. Backend - SSH Existence Check
+
+- [ ] 1.1 Add `git ls-remote` preflight to repository creation in `git_repositories.py`
+- [ ] 1.2 Build SSH clone URL from `owner` and `repo` for `git.commumedia.org`
+- [ ] 1.3 Return a clear error when the repository is missing or inaccessible
+
+## 2. Frontend - Structured Clone Form
+
+- [ ] 2.1 Update `RepositoryCreateDialog` clone mode to accept `owner` and `repo`
+- [ ] 2.2 Keep advanced full-URL paste flow and blank repository fallback
+- [ ] 2.3 Reuse the shared dialog from repository settings and repositories page
+
+## 3. Validation and Docs
+
+- [ ] 3.1 Update repository docs to explain SSH-only owner/repo input
+- [ ] 3.2 Add tests for success, missing repo, and URL fallback behavior
+
+## 4. Quality Gates
+
+- [ ] 4.1 Run backend and frontend targeted tests
+- [ ] 4.2 Run frontend typecheck and lint where applicable
+- [ ] 4.3 Commit and push changes
diff --git a/openspec/changes/git-repo-working-clones/design.md b/openspec/changes/git-repo-working-clones/design.md
new file mode 100644
index 0000000..beb0c80
--- /dev/null
+++ b/openspec/changes/git-repo-working-clones/design.md
@@ -0,0 +1,33 @@
+## Context
+
+Repository creation currently produces mirrored bare repos for any remote clone and bare repos for blank creations. The workspace, file browser, commit editor, and git toolbar are built around a working-tree repository model, so users can hit 400s when they try to sync or when the repo has no usable branch state.
+
+## Goals
+
+- Create working clones for remote repositories
+- Create working repos with an initial branch for blank repositories
+- Preserve the existing repository create endpoint and shared UI flow
+- Keep fetch/pull/push aligned with a normal local clone
+
+## Decisions
+
+1. Clone mode
+- Use `git clone` without `--mirror`
+- Keep the existing remote URL preflight and URL parsing behavior
+
+2. Blank repositories
+- Initialize with `git init -b main` when supported
+- Fall back to `git init` plus `git symbolic-ref HEAD refs/heads/main` if needed
+
+3. Branch state
+- Treat `main` as the initial branch name for blank repos
+- Make branch listing and current-branch helpers tolerate unborn `HEAD`
+
+4. Pull behavior
+- Prefer the current branch when no explicit branch is supplied
+- Do not force `origin ` if the branch is unborn or already tracked by the current checkout
+
+## Risks
+
+- Some older git versions may not support `git init -b`; the backend should fall back cleanly
+- Existing blank repos created under the old bare model may still require migration or cleanup outside this change
diff --git a/openspec/changes/git-repo-working-clones/proposal.md b/openspec/changes/git-repo-working-clones/proposal.md
new file mode 100644
index 0000000..c62e06f
--- /dev/null
+++ b/openspec/changes/git-repo-working-clones/proposal.md
@@ -0,0 +1,17 @@
+## Why
+
+The current repository creation flow creates mirrored bare repositories for clone-based repos. That breaks the workspace model because the UI and file editing features expect a normal working clone with an initial branch, remote tracking, and pull/fetch behavior that works from a checked-out branch.
+
+## What Changes
+
+- Create clone-based repositories as normal working clones instead of mirrors
+- Initialize blank repositories as working clones with an initial branch when needed
+- Ensure newly created repos have a usable current branch for workspace browsing and commits
+- Update pull semantics to use the current tracked branch when available
+- Keep fetch behavior available for remote-synced repositories
+
+## Impact
+
+- Backend: repository creation and git control helpers
+- Backend tests: clone, pull, and empty-repo branch behavior
+- Frontend: no intentional UX change beyond sync behavior becoming reliable
diff --git a/openspec/changes/git-repo-working-clones/tasks.md b/openspec/changes/git-repo-working-clones/tasks.md
new file mode 100644
index 0000000..3d60a7d
--- /dev/null
+++ b/openspec/changes/git-repo-working-clones/tasks.md
@@ -0,0 +1,19 @@
+## 1. Backend - Repository Creation
+
+- [x] 1.1 Switch clone-based repository creation from mirror clones to normal working clones
+- [x] 1.2 Initialize blank repositories with a default branch name
+- [x] 1.3 Preserve remote preflight and clear error handling
+
+## 2. Backend - Git Sync Helpers
+
+- [x] 2.1 Update pull behavior to use the current tracked branch when available
+- [x] 2.2 Make branch helpers tolerate unborn HEAD in blank repos
+
+## 3. Tests
+
+- [x] 3.1 Add unit coverage for clone creation and blank repo initialization
+- [x] 3.2 Add coverage for pull behavior on working clones and blank repos
+
+## 4. Quality Gates
+
+- [ ] 4.1 Run targeted API tests