2026-02-12 17:18:15 -06:00
# Xcode 26.3
2026-02-20 17:33:23 -06:00
> Give Xcode's AI agent a brain that remembers.
2026-02-12 17:18:15 -06:00
Xcode 26.3 supports [agentic coding ](https://developer.apple.com/documentation/xcode/giving-agentic-coding-tools-access-to-xcode ) with full MCP (Model Context Protocol) integration. Vestige plugs directly into Xcode's Claude Agent, giving it persistent memory across every coding session.
**Vestige is the first cognitive memory server for Xcode.**
---
2026-02-20 17:33:23 -06:00
## Quick Start (30 seconds)
2026-02-12 17:18:15 -06:00
2026-02-20 17:33:23 -06:00
### 1. Install Vestige
2026-02-12 17:18:15 -06:00
```bash
2026-02-20 17:33:23 -06:00
curl -L https://github.com/samvallad33/vestige/releases/latest/download/vestige-mcp-aarch64-apple-darwin.tar.gz | tar -xz
sudo mv vestige-mcp vestige vestige-restore /usr/local/bin/
2026-02-12 17:18:15 -06:00
```
2026-02-20 17:33:23 -06:00
### 2. Add to your Xcode project
2026-02-12 17:18:15 -06:00
2026-02-20 17:33:23 -06:00
Create a `.mcp.json` file in your project root:
2026-02-12 17:18:15 -06:00
```bash
2026-02-20 17:33:23 -06:00
cat > /path/to/your/project/.mcp.json < < 'EOF'
2026-02-12 17:18:15 -06:00
{
2026-02-20 17:33:23 -06:00
"mcpServers": {
"vestige": {
"type": "stdio",
"command": "/usr/local/bin/vestige-mcp",
"args": [],
"env": {
"PATH": "/usr/local/bin:/usr/bin:/bin"
}
2026-02-12 17:18:15 -06:00
}
}
}
2026-02-20 17:33:23 -06:00
EOF
2026-02-12 17:18:15 -06:00
```
2026-02-20 17:33:23 -06:00
Or use the setup script:
2026-02-12 17:18:15 -06:00
2026-02-20 17:33:23 -06:00
```bash
curl -sSL https://raw.githubusercontent.com/samvallad33/vestige/main/scripts/xcode-setup.sh -o xcode-setup.sh
bash xcode-setup.sh
2026-02-12 17:18:15 -06:00
```
### 3. Restart Xcode
2026-02-20 17:33:23 -06:00
Quit Xcode completely (Cmd+Q) and reopen your project.
2026-02-12 17:18:15 -06:00
### 4. Verify
feat: v2.0.4 "Deep Reference" — cognitive reasoning engine + 10 bug fixes
New features:
- deep_reference tool (#22): 8-stage cognitive reasoning pipeline with FSRS-6
trust scoring, intent classification (FactCheck/Timeline/RootCause/Comparison/
Synthesis), spreading activation expansion, temporal supersession, trust-weighted
contradiction analysis, relation assessment, dream insight integration, and
algorithmic reasoning chain generation — all without calling an LLM
- cross_reference (#23): backward-compatible alias for deep_reference
- retrieval_mode parameter on search (precise/balanced/exhaustive)
- get_batch action on memory tool (up to 20 IDs per call)
- Token budget raised from 10K to 100K on search + session_context
- Dates (createdAt/updatedAt) on all search results and session_context lines
Bug fixes (GitHub Issue #25 — all 10 resolved):
- state_transitions empty: wired record_memory_access into strengthen_batch
- chain/bridges no storage fallback: added with edge deduplication
- knowledge_edges dead schema: documented as deprecated
- insights not persisted from dream: wired save_insight after generation
- find_duplicates threshold dropped: serde alias fix
- search min_retention ignored: serde aliases for snake_case params
- intention time triggers null: removed dead trigger_at embedding
- changelog missing dreams: added get_dream_history + event integration
- phantom Related IDs: clarified message text
- fsrs_cards empty: documented as harmless dead schema
Security hardening:
- HTTP transport CORS: permissive() → localhost-only
- Auth token panic guard: &token[..8] → safe min(8) slice
- UTF-8 boundary fix: floor_char_boundary on content truncation
- All unwrap() removed from HTTP transport (unwrap_or_else fallback)
- Dream memory_count capped at 500 (prevents O(N²) hang)
- Dormant state threshold aligned (0.3 → 0.4)
Stats: 23 tools, 758 tests, 0 failures, 0 warnings, 0 unwraps in production
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 16:15:01 -05:00
Type `/context` in the Agent panel. You should see `vestige` listed with 23 tools.
2026-02-12 17:18:15 -06:00
---
2026-02-20 17:33:23 -06:00
## Why `.mcp.json` instead of the global config?
2026-02-12 17:18:15 -06:00
2026-02-20 17:33:23 -06:00
Xcode 26.3's Claude Agent has a feature gate (`claudeai-mcp` ) that blocks custom MCP servers configured in the global config at `~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig/.claude` .
2026-02-12 17:18:15 -06:00
2026-02-20 17:33:23 -06:00
**Project-level `.mcp.json` files bypass this gate entirely.** This is the method that actually works. Drop the file in your project root and Xcode loads it on the next session.
2026-02-12 17:18:15 -06:00
2026-02-20 17:33:23 -06:00
> **Important:** Xcode runs agents in a sandboxed environment that does **not** inherit your shell configuration (`.zshrc`, `.bashrc`, etc.). You **must** use absolute paths for the `command` field.
2026-02-12 17:18:15 -06:00
---
## What Vestige Does for Xcode
| Without Vestige | With Vestige |
|-----------------|--------------|
| Every session starts from zero | Agent recalls your architecture, patterns, and preferences |
| Re-explain SwiftUI conventions each time | Agent knows your conventions from day one |
| Bug fixes are forgotten | Agent remembers past fixes and avoids regressions |
| No context between Xcode and other IDEs | Shared memory across Xcode, Cursor, VS Code, and more |
2026-02-20 17:33:23 -06:00
| AI hallucinations persist forever | Agent detects and self-corrects bad memories |
2026-02-12 17:18:15 -06:00
### Example Workflows
**Architecture decisions:**
> "Remember: we chose Observation framework over Combine for state management because it's simpler and Apple-recommended for iOS 17+."
**Bug documentation:**
> The agent fixes a Core Data migration crash? Vestige automatically stores the fix. Next time it encounters a migration issue, it remembers the solution.
2026-02-20 17:33:23 -06:00
**Proactive reminders:**
> The agent surfaces your pending deadlines, hackathon dates, and concert tickets — right inside Xcode's Agent panel.
**Self-correcting memory:**
> The agent traces a hallucinated detail back to a specific memory, identifies it as wrong, and deletes it autonomously.
2026-02-12 17:18:15 -06:00
**Cross-IDE memory:**
> Fix a backend bug in VS Code. Open the iOS app in Xcode. The agent already knows about the API change because Vestige shares memory across all your tools.
---
2026-02-20 17:33:23 -06:00
## Add Vestige to Every Project
Run the setup script with `a` to install into all detected projects:
```bash
curl -sSL https://raw.githubusercontent.com/samvallad33/vestige/main/scripts/xcode-setup.sh -o xcode-setup.sh
bash xcode-setup.sh
```
Or manually drop `.mcp.json` into any project:
```bash
# From inside your project directory
cat > .mcp.json < < 'EOF'
{
"mcpServers": {
"vestige": {
"type": "stdio",
"command": "/usr/local/bin/vestige-mcp",
"args": [],
"env": {
"PATH": "/usr/local/bin:/usr/bin:/bin"
}
}
}
}
EOF
```
### Per-project isolated memory
To give each project its own memory database:
```json
{
"mcpServers": {
"vestige": {
"type": "stdio",
"command": "/usr/local/bin/vestige-mcp",
"args": ["--data-dir", "/Users/you/Developer/MyApp/.vestige"],
"env": {
"PATH": "/usr/local/bin:/usr/bin:/bin"
}
}
}
}
```
---
2026-02-12 17:18:15 -06:00
## Tips
### Use a CLAUDE.md for proactive memory
Place a `CLAUDE.md` in your project root to make the agent use Vestige automatically:
```markdown
## Memory
At the start of every session:
1. Search Vestige for this project's context
2. Recall architecture decisions and coding patterns
3. Save important decisions and bug fixes without being asked
```
See [CLAUDE.md templates ](../CLAUDE-SETUP.md ) for a full setup.
### Embedding model cache
2026-02-20 17:33:23 -06:00
The first time Vestige runs, it downloads the embedding model (~130MB). In Xcode's sandboxed environment, the cache location is:
2026-02-12 17:18:15 -06:00
```
~/Library/Caches/com.vestige.core/fastembed
```
2026-02-20 17:33:23 -06:00
If the download fails behind a corporate proxy, pre-download by running `vestige-mcp` once from your terminal.
2026-02-12 17:18:15 -06:00
---
## Troubleshooting
< details >
< summary > "vestige" not showing in /context< / summary >
2026-02-20 17:33:23 -06:00
1. Make sure `.mcp.json` is in your **project root** (same directory as `.xcodeproj` or `Package.swift` ):
```bash
ls -la /path/to/project/.mcp.json
```
2. Verify the binary path is correct and absolute:
2026-02-12 17:18:15 -06:00
```bash
ls -la /usr/local/bin/vestige-mcp
```
2026-02-20 17:33:23 -06:00
3. Check that `.mcp.json` is valid JSON:
2026-02-12 17:18:15 -06:00
```bash
2026-02-20 17:33:23 -06:00
cat /path/to/project/.mcp.json | python3 -m json.tool
2026-02-12 17:18:15 -06:00
```
2026-02-20 17:33:23 -06:00
4. Fully quit and restart Xcode (Cmd+Q, not just close window).
2026-02-12 17:18:15 -06:00
2026-02-20 17:33:23 -06:00
5. Check debug logs:
2026-02-12 17:18:15 -06:00
```bash
2026-02-20 17:33:23 -06:00
cat ~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig/debug/latest | grep -i vestige
2026-02-12 17:18:15 -06:00
```
2026-02-20 17:33:23 -06:00
2026-02-12 17:18:15 -06:00
< / details >
< details >
2026-02-20 17:33:23 -06:00
< summary > "Agent has been closed" or "Your request couldn't be completed"< / summary >
2026-02-12 17:18:15 -06:00
2026-02-20 17:33:23 -06:00
This is a known issue with Xcode 26.3's Claude Agent that can happen independently of MCP configuration.
2026-02-12 17:18:15 -06:00
2026-02-20 17:33:23 -06:00
**Nuclear fix:** Delete the agent config and let Xcode recreate it:
```bash
mv ~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig \
~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig.bak
2026-02-12 17:18:15 -06:00
```
2026-02-20 17:33:23 -06:00
Then restart Xcode and sign back into Claude in Settings > Intelligence.
2026-02-12 17:18:15 -06:00
2026-02-20 17:33:23 -06:00
< / details >
< details >
< summary > Global .claude config not loading MCP servers< / summary >
Xcode 26.3 has a feature gate (`claudeai-mcp` ) that may block custom MCP servers from the global config file at `~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig/.claude` .
**Solution:** Use project-level `.mcp.json` instead. This bypasses the gate. See the [Quick Start ](#quick-start-30-seconds ) above.
2026-02-12 17:18:15 -06:00
< / details >
< details >
< summary > Embedding model fails to download< / summary >
The first run downloads ~130MB. If Xcode's sandbox blocks the download:
1. Run `vestige-mcp` once from your terminal to cache the model
2. The cache at `~/Library/Caches/com.vestige.core/fastembed` will be available to the sandboxed instance
Behind a proxy:
```bash
HTTPS_PROXY=your-proxy:port vestige-mcp
```
2026-02-20 17:33:23 -06:00
2026-02-12 17:18:15 -06:00
< / details >
---
## Also Works With
Vestige uses the MCP standard — the same memory works across all your tools:
| IDE | Guide |
|-----|-------|
| Claude Code | [Setup ](../CONFIGURATION.md#claude-code-one-liner ) |
2026-04-05 18:50:57 +03:00
| Codex | [Setup ](./codex.md ) |
2026-02-12 17:18:15 -06:00
| Claude Desktop | [Setup ](../CONFIGURATION.md#claude-desktop-macos ) |
| Cursor | [Setup ](./cursor.md ) |
| VS Code (Copilot) | [Setup ](./vscode.md ) |
| JetBrains | [Setup ](./jetbrains.md ) |
| Windsurf | [Setup ](./windsurf.md ) |
Your AI remembers everything, everywhere.
---
< p align = "center" >
< a href = "../../README.md" > Back to README< / a >
< / p >