Skip to content

Commit 7f7dd5c

Browse files
authored
Merge pull request #523 from xmtplabs/release/1.1.0-promote
Release 1.1.0: promote dev to main
2 parents 2088382 + 22860e4 commit 7f7dd5c

362 files changed

Lines changed: 33866 additions & 4254 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/agents/swiftui-specialist.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ Button(action: { /* action */ }) {
5454
## Design System
5555

5656
The project uses custom colors and components:
57-
- Colors: `colorBackgroundPrimary`, `colorTextPrimary`, `colorBubble`, etc.
57+
- Colors: `colorBackgroundSurfaceless`, `colorTextPrimary`, `colorBubble`, etc.
5858
- Components: `AvatarView`, shared views in `Convos/Shared Views/`
5959
- Check `Convos/Design System/` for design tokens
6060

.claude/commands/build.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,15 @@ Build, launch in simulator, and notify when running:
3434

3535
1. Check if `.claude/.simulator_id` file exists in the project root
3636
- If yes, read the simulator ID from it (this is the session's dedicated simulator)
37-
- If no, check if `.convos-task` file exists:
38-
- If yes, read `SIMULATOR_NAME` from it and find its UUID in the simulator list
39-
- If the simulator doesn't exist yet, suggest running `/setup` first
40-
- If neither file exists, select a new simulator (see below)
37+
- If no, try to find or create the session's simulator:
38+
a. Check if `.convos-task` file exists → read `SIMULATOR_NAME` from it
39+
b. Otherwise derive from branch: run `git branch --show-current`, sanitize (replace `/` and special chars with `-`, lowercase), prefix with `convos-` (e.g., `jarod/push-notifications``convos-jarod-push-notifications`)
40+
c. Look for that simulator in the list — if it exists, use it
41+
d. If it doesn't exist, suggest running `/setup` first
4142

4243
2. Call `mcp__XcodeBuildMCP__list_sims` to get all available simulators
4344

44-
3. Select a simulator that is NOT already booted:
45+
3. If no dedicated simulator was found or created, select a simulator that is NOT already booted:
4546
- Look for iOS 26.0 simulators (latest OS)
4647
- Find simulators that do NOT have `[Booted]` next to them
4748
- Prefer iPhone models in this order: iPhone 17 Pro, iPhone 17 Pro Max, iPhone Air, iPhone 17

.claude/commands/setup.md

Lines changed: 59 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,69 @@
11
# Setup
22

3-
Initialize the Claude Code session for a convos-task worktree.
3+
Initialize the Claude Code session for any branch or worktree — creates a dedicated simulator and configures build defaults.
44

55
## Purpose
66

7-
This command sets up the iOS simulator and XcodeBuildMCP session defaults when working in a `convos-task` worktree. It ensures the session has a dedicated simulator for builds and testing.
7+
This command sets up an iOS simulator and XcodeBuildMCP session defaults so `/build` and `/build --run` work correctly. It works in any context:
8+
- **convos-task worktrees**: Uses the task config from `.convos-task`
9+
- **Regular branches**: Derives the simulator name from the current git branch
10+
- **Main repo**: Works on any branch, no special setup required
811

912
## When to Run
1013

14+
- At the start of any new session when working on a feature branch
1115
- Automatically suggested at session start when `.convos-task` file exists
1216
- Can be run manually anytime to reset or verify the setup
1317

1418
## Instructions
1519

16-
### Step 1: Check for Task Configuration
20+
### Step 1: Determine Simulator Name
1721

18-
1. Read the `.convos-task` file in the project root
19-
2. If it doesn't exist, inform the user this isn't a convos-task worktree and exit
20-
3. Extract `TASK_NAME` and `SIMULATOR_NAME` from the file
22+
Check for configuration in this order:
2123

22-
### Step 2: Create Simulator if Needed
24+
1. **`.convos-task` file exists**: Read `TASK_NAME` and `SIMULATOR_NAME` from it
25+
2. **No `.convos-task` file**: Derive from the current git branch:
26+
- Run `git branch --show-current` to get the branch name
27+
- Sanitize the branch name: replace `/` and special characters with `-`, lowercase it
28+
- Simulator name: `convos-<sanitized-branch-name>`
29+
- Example: branch `jarod/push-notifications` → simulator `convos-jarod-push-notifications`
30+
- Special case: if on `main` or `master`, use `convos-main`
31+
32+
### Step 2: Run Project Setup
33+
34+
Run `Scripts/setup.sh` with `CI=true` to install dependencies without modifying git hooks or Xcode defaults:
35+
36+
```bash
37+
CI=true Scripts/setup.sh
38+
```
39+
40+
This ensures SwiftLint, SwiftFormat, and other dependencies are installed.
41+
42+
### Step 3: Create Simulator if Needed
2343

2444
1. Use `mcp__XcodeBuildMCP__list_sims` to check if the simulator already exists
2545
2. If the simulator doesn't exist:
2646
- Find a base iPhone simulator to clone from (prefer iPhone 17 Pro, iPhone 17 Pro Max, or latest available)
2747
- Use bash to clone it: `xcrun simctl clone "BASE_SIM_NAME" "SIMULATOR_NAME"`
2848
3. Get the simulator's UUID from the list
2949

30-
### Step 3: Set XcodeBuildMCP Session Defaults
50+
### Step 4: Set XcodeBuildMCP Session Defaults
3151

3252
Call `mcp__XcodeBuildMCP__session-set-defaults` with:
33-
- `simulatorName`: The task's simulator name (e.g., "convos-my-feature")
53+
- `simulatorName`: The simulator name (e.g., "convos-push-notifications")
3454
- `projectPath`: Path to `Convos.xcodeproj`
3555
- `scheme`: "Convos (Dev)" (default scheme)
3656
- `useLatestOS`: true
3757

38-
### Step 4: Save Simulator ID for Session
58+
### Step 5: Save Simulator ID for Session
3959

4060
Write the simulator UUID to `.claude/.simulator_id` for use by `/build` command.
4161

42-
### Step 5: Report Setup Complete
62+
### Step 6: Report Setup Complete
4363

4464
Inform the user:
4565
```
46-
✅ Session setup complete for task: TASK_NAME
66+
✅ Session setup complete
4767
4868
📱 Simulator: SIMULATOR_NAME (UUID)
4969
🔧 XcodeBuildMCP defaults configured
@@ -53,31 +73,46 @@ Inform the user:
5373
Ready to build! Use /build or /build --run
5474
```
5575

56-
## Example Flow
76+
## Example Flows
5777

78+
**In a convos-task worktree:**
5879
```
5980
User: /setup
60-
Claude: Checking for task configuration...
61-
Found .convos-task: TASK_NAME=push-notifications, SIMULATOR_NAME=convos-push-notifications
81+
Claude: Found .convos-task: TASK_NAME=push-notifications, SIMULATOR_NAME=convos-push-notifications
82+
Running Scripts/setup.sh...
83+
✅ All dependencies installed
84+
Simulator convos-push-notifications exists (A1B2C3D4-...)
85+
Setting XcodeBuildMCP defaults...
86+
87+
✅ Session setup complete
6288
63-
Checking if simulator exists...
64-
Simulator not found, creating from iPhone 17 Pro...
65-
Created simulator: convos-push-notifications (A1B2C3D4-...)
89+
📱 Simulator: convos-push-notifications (A1B2C3D4-...)
90+
🔧 XcodeBuildMCP defaults configured
91+
📁 Project: Convos.xcodeproj
92+
🎯 Scheme: Convos (Dev)
93+
```
6694

67-
Setting XcodeBuildMCP session defaults...
95+
**On a regular branch (no .convos-task):**
96+
```
97+
User: /setup
98+
Claude: No .convos-task found. Deriving from branch name...
99+
Branch: jarod/retry-errors → Simulator: convos-jarod-retry-errors
100+
Running Scripts/setup.sh...
101+
✅ All dependencies installed
102+
Cloning iPhone 17 Pro → convos-jarod-retry-errors...
103+
Created simulator: convos-jarod-retry-errors (E5F6G7H8-...)
104+
Setting XcodeBuildMCP defaults...
68105
69-
✅ Session setup complete for task: push-notifications
106+
✅ Session setup complete
70107
71-
📱 Simulator: convos-push-notifications
108+
📱 Simulator: convos-jarod-retry-errors (E5F6G7H8-...)
72109
🔧 XcodeBuildMCP defaults configured
73110
📁 Project: Convos.xcodeproj
74111
🎯 Scheme: Convos (Dev)
75-
76-
Ready to build! Use /build or /build --run
77112
```
78113

79114
## Error Handling
80115

81-
- If `.convos-task` doesn't exist: "This directory doesn't have a task configuration. Run `convos-task new <name>` to create a task."
82116
- If simulator creation fails: Show the error and suggest checking available simulators with `xcrun simctl list devices`
83117
- If no base simulator found: "No iPhone simulator found to clone. Install iOS Simulator runtimes in Xcode."
118+
- If `Scripts/setup.sh` fails: Show the error output and suggest running it manually

.claude/settings.local.json

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"permissions": {
3+
"allow": [
4+
"Bash(xcpretty:*)",
5+
"Bash(gt submit:*)",
6+
"Bash(timeout 60 swift test:*)",
7+
"Bash(git add:*)",
8+
"mcp__graphite__run_gt_cmd",
9+
"Bash(git merge:*)",
10+
"Bash(gt add:*)",
11+
"Bash(gt continue:*)",
12+
"Bash(gt log:*)"
13+
]
14+
},
15+
"enableAllProjectMcpServers": true,
16+
"enabledMcpjsonServers": [
17+
"XcodeBuildMCP",
18+
"ios-simulator",
19+
"xmtp-docs",
20+
"graphite",
21+
"notion",
22+
"linear"
23+
]
24+
}

0 commit comments

Comments
 (0)