* fix: stabilize validation and tests on Windows * test: add Windows smoke coverage for skill activation * refactor: make setup_web script CommonJS * fix: repair aegisops-ai frontmatter * docs: add when-to-use guidance to core skills * docs: add when-to-use guidance to Apify skills * docs: add when-to-use guidance to Google and Expo skills * docs: add when-to-use guidance to Makepad skills * docs: add when-to-use guidance to git workflow skills * docs: add when-to-use guidance to fp-ts skills * docs: add when-to-use guidance to Three.js skills * docs: add when-to-use guidance to n8n skills * docs: add when-to-use guidance to health analysis skills * docs: add when-to-use guidance to writing and review skills * meta: sync generated catalog metadata * docs: add when-to-use guidance to Robius skills * docs: add when-to-use guidance to review and workflow skills * docs: add when-to-use guidance to science and data skills * docs: add when-to-use guidance to tooling and automation skills * docs: add when-to-use guidance to remaining skills * fix: gate bundle helper execution in Windows activation * chore: drop generated artifacts from contributor PR * docs(maintenance): Record PR 457 sweep Document the open issue triage, PR supersedence decision, local verification, and source-only cleanup that prepared PR #457 for re-running CI. --------- Co-authored-by: sickn33 <sickn33@users.noreply.github.com>
122 lines
3.6 KiB
Markdown
122 lines
3.6 KiB
Markdown
---
|
|
name: conductor-setup
|
|
description: Configure a Rails project to work with Conductor (parallel coding agents)
|
|
allowed-tools: Bash(chmod *), Bash(bundle *), Bash(npm *), Bash(script/server)
|
|
context: fork
|
|
risk: unknown
|
|
source: community
|
|
metadata:
|
|
author: Shpigford
|
|
version: "1.0"
|
|
---
|
|
|
|
Set up this Rails project for Conductor, the Mac app for parallel coding agents.
|
|
|
|
## When to Use
|
|
|
|
- You need to configure a Rails project so it runs correctly inside Conductor workspaces.
|
|
- The project should support parallel coding agents with isolated ports, Redis settings, and shared secrets.
|
|
- You want the standard `conductor.json`, `bin/conductor-setup`, and `script/server` scaffolding for a Rails repo.
|
|
|
|
# What to Create
|
|
|
|
## 1. conductor.json (project root)
|
|
|
|
Create `conductor.json` in the project root if it doesn't already exist:
|
|
|
|
```json
|
|
{
|
|
"scripts": {
|
|
"setup": "bin/conductor-setup",
|
|
"run": "script/server"
|
|
}
|
|
}
|
|
```
|
|
|
|
## 2. bin/conductor-setup (executable)
|
|
|
|
Create `bin/conductor-setup` if it doesn't already exist:
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
set -e
|
|
|
|
# Symlink .env from repo root (where secrets live, outside worktrees)
|
|
[ -f "$CONDUCTOR_ROOT_PATH/.env" ] && ln -sf "$CONDUCTOR_ROOT_PATH/.env" .env
|
|
|
|
# Symlink Rails master key
|
|
[ -f "$CONDUCTOR_ROOT_PATH/config/master.key" ] && ln -sf "$CONDUCTOR_ROOT_PATH/config/master.key" config/master.key
|
|
|
|
# Install dependencies
|
|
bundle install
|
|
npm install
|
|
```
|
|
|
|
Make it executable with `chmod +x bin/conductor-setup`.
|
|
|
|
## 3. script/server (executable)
|
|
|
|
Create the `script` directory if needed, then create `script/server` if it doesn't already exist:
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
|
|
# === Port Configuration ===
|
|
export PORT=${CONDUCTOR_PORT:-3000}
|
|
export VITE_RUBY_PORT=$((PORT + 1000))
|
|
|
|
# === Redis Isolation ===
|
|
if [ -n "$CONDUCTOR_WORKSPACE_NAME" ]; then
|
|
HASH=$(printf '%s' "$CONDUCTOR_WORKSPACE_NAME" | cksum | cut -d' ' -f1)
|
|
REDIS_DB=$((HASH % 16))
|
|
export REDIS_URL="redis://localhost:6379/${REDIS_DB}"
|
|
fi
|
|
|
|
exec bin/dev
|
|
```
|
|
|
|
Make it executable with `chmod +x script/server`.
|
|
|
|
## 4. Update Rails Config Files
|
|
|
|
For each of the following files, if they exist and contain Redis configuration, update them to use `ENV.fetch('REDIS_URL', ...)` or `ENV['REDIS_URL']` with a fallback:
|
|
|
|
### config/initializers/sidekiq.rb
|
|
If this file exists and configures Redis, update it to use:
|
|
```ruby
|
|
redis_url = ENV.fetch('REDIS_URL', 'redis://localhost:6379/0')
|
|
```
|
|
|
|
### config/cable.yml
|
|
If this file exists, update the development adapter to use:
|
|
```yaml
|
|
development:
|
|
adapter: redis
|
|
url: <%= ENV.fetch('REDIS_URL', 'redis://localhost:6379/1') %>
|
|
```
|
|
|
|
### config/environments/development.rb
|
|
If this file configures Redis for caching, update to use:
|
|
```ruby
|
|
config.cache_store = :redis_cache_store, { url: ENV.fetch('REDIS_URL', 'redis://localhost:6379/0') }
|
|
```
|
|
|
|
### config/initializers/rack_attack.rb
|
|
If this file exists and configures a Redis cache store, update to use:
|
|
```ruby
|
|
Rack::Attack.cache.store = ActiveSupport::Cache::RedisCacheStore.new(url: ENV.fetch('REDIS_URL', 'redis://localhost:6379/0'))
|
|
```
|
|
|
|
# Implementation Notes
|
|
|
|
- **Don't overwrite existing files**: Check if conductor.json, bin/conductor-setup, and script/server exist before creating them. If they exist, skip creation and inform the user.
|
|
- **Rails config updates**: Only modify Redis-related configuration. If a file doesn't exist or doesn't use Redis, skip it gracefully.
|
|
- **Create directories as needed**: Create `script/` directory if it doesn't exist.
|
|
|
|
# Verification
|
|
|
|
After creating the files:
|
|
1. Confirm all Conductor files exist and scripts are executable
|
|
2. Run `script/server` to verify it starts without errors
|
|
3. Check that Rails configs properly reference `ENV['REDIS_URL']` or `ENV.fetch('REDIS_URL', ...)`
|