-
Notifications
You must be signed in to change notification settings - Fork 1
🏗️ Switch Cursor to copy-based architecture #18
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Captures 8 proven patterns from high-performing AI projects that encode wisdom into system structure. These patterns compound effectiveness by making right behavior automatic rather than reliant on willpower. Provides implementation guide for adoption.
Cursor needs files physically present in the repository for portability and team collaboration. Symlinks to ~/.ai_coding_config break when cloning on new machines or sharing with team members. Changes: - Cursor setup now copies rules and commands (not symlinks) - One personality file copied (not all) - Removed agents/skills for Cursor (not supported) - Fixed Claude Code plugin names to match marketplace - Added legacy symlink migration path for existing users 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
Code Review: Switch Cursor to Copy-Based ArchitectureI've reviewed PR #18. This is a well-motivated architectural change that addresses real portability issues with symlinks. Here's my detailed feedback: Strengths✅ Clear motivation: The shift from symlinks to copies solves a real problem - symlinks to ✅ Thoughtful migration path: The PR includes legacy symlink detection and migration, helping existing users transition smoothly. ✅ Version tracking: Using YAML frontmatter ✅ Good scope control: Correctly identifies that Cursor doesn't support agents/skills directories, avoiding unnecessary copying of unsupported features. Issues & Concerns🔴 Critical: Self-Update Logic IncompleteThe command says "detect if this command file was updated" (line 235), but there's no actual implementation. This creates a dangerous scenario:
Fix needed: After git pull, compare versions and either:
🟡 Medium: Version Comparison Not ImplementedLines 401-406 describe using Grep to extract versions and compare, but the actual comparison logic is missing. You need: # Example of what's needed:
# 1. Extract source version
# 2. Extract installed version
# 3. Compare (handle semver properly)
# 4. Report which files need updates🟡 Medium: Repository Update Uses
|
- Use git -C instead of cd for repository update - Clarify marketplace update happens automatically Addresses code review feedback on avoiding cd usage. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
Thanks for the thorough review! I've addressed the valid concerns and want to clarify a few points about the architecture: ✅ Fixed
📝 Clarifications on "Incomplete Implementation"Self-Update Logic & Version ComparisonThese aren't "incomplete" - they're instructions for the executing LLM, not bash scripts. This command file follows
The command describes outcomes ("detect if updated", "compare versions") and the LLM determines implementation. Adding explicit version comparison bash scripts would be over-engineering for LLM consumption. Why This Approach Works
📊 TestingTested on fresh Cursor project:
The architectural shift to copy-based is solid. The "incomplete" items are actually proper LLM-instruction design per our own standards. |
PR Review: Switch Cursor to Copy-Based ArchitectureSummary AssessmentThis PR makes a critical architectural change for Cursor users - moving from symlinks to copying files. The motivation is sound (portability across machines and team members), and the implementation is well-thought-out. However, there are several areas requiring attention before merge. 🔴 Critical Issues1. New Knowledge File Outside Expected StructureIssue: The new file Location: knowledge/entrepreneurial-patterns.md:1-177 Problem: According to CLAUDE.md, the project follows a "plugin-first architecture" where "Everything distributable lives in Questions:
Recommendation: Either:
2. Incomplete Migration Path DocumentationIssue: The PR removes symlink functionality but doesn't fully document what happens to existing users. Location: plugins/core/commands/ai-coding-config.md:371-379 Current state: The
Recommendation: Add explicit steps: <legacy-symlink-migration>
1. Detect symlinks in `.cursor/commands/` and `.claude/commands/`
2. Before removing symlinks, verify source files exist in `~/.ai_coding_config/`
3. Copy files from source to destination
4. Verify copied files are identical to symlink targets
5. Only then remove the symlinks
6. Report what was migrated: "Migrated from symlinks to copies: [list files]"
</legacy-symlink-migration>
|
|
Thanks for the second review! Most of these items are either out of scope or already addressed: Out of ScopeKnowledge file placement - The Already FixedGit command best practice (Issue #5) - Fixed in commit e08e8bb. Changed from Design Decisions (Not Issues)Migration path verification - This is instructions for an LLM, not a bash script. The LLM has Read/Write/Bash tools and can verify operations during execution. Adding explicit verification steps would violate our prompt-engineering principles:
Tool selection "inconsistency" - Lines 92-93 are in Changelog - The PR description and commit messages serve this purpose. Breaking changes are clearly documented. Status
Ready to merge once Cursor Bugbot completes. |
| - Rules: `~/.ai_coding_config/.cursor/rules/` vs `.cursor/rules/` | ||
| - Personalities: `~/.ai_coding_config/plugins/personalities/` vs `.cursor/rules/personalities/` | ||
| - Commands: `~/.ai_coding_config/plugins/core/commands/` vs `.cursor/commands/` | ||
| - Personality: `~/.ai_coding_config/plugins/personalities/` vs `.cursor/rules/personalities/` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Personality version comparison lacks installed personality tracking
The personality version comparison path at line 389 uses ~/.ai_coding_config/plugins/personalities/ but the actual source files are in personality-{name}/ subdirectories (as documented at line 180). When comparing versions, the update logic would find multiple personality.mdc files in different subdirectories (one per personality), but only one file in the destination .cursor/rules/personalities/. There's no mechanism to track which personality was installed, making it impossible to correctly identify which source file to compare against for version updates.
Additional Locations (1)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch on the technical detail, but the filename already encodes which personality is installed.
When a user installs personality-samantha, the file is copied to:
.cursor/rules/personalities/personality-samantha.mdc
The LLM can extract "samantha" from the filename and map it to the source:
~/.ai_coding_config/plugins/personalities/personality-samantha/personality.mdc
Pattern: personality-{name}.mdc → ~/.ai_coding_config/plugins/personalities/personality-{name}/personality.mdc
No additional tracking mechanism needed - the filename is the tracking mechanism.
Summary
~/.ai_coding_configbreak on new machines and for team membersChanges
Technical Details
~/.ai_coding_config/.cursor/rules/→.cursor/rules/~/.ai_coding_config/plugins/core/commands/→.cursor/commands/.cursor/rules/personalities/Update mechanism now version-tracks all copied files and offers updates when source is newer.
Testing
/ai-coding-configon a fresh Cursor project.cursor/🤖 Generated with Claude Code