Skip to content

Repository files navigation

revcon

Centralized editor configurations for RevealUI projects. Configs are symlinked into target projects — edits propagate instantly, nothing gets committed to target repos.

Quick Start

# Link first-party fleet policy only (default editor: revealui)
./link.sh --target ~/revealfleet/revealui --profile revealfleet

# Explicitly opt into all adapters, base configs only (no profile)
./link.sh --target ~/revealfleet/revforge --editor all

# Link a single editor
./link.sh --target ~/revealfleet/revealui --profile revealui --editor zed

# Preview without changes
./link.sh --dry-run --target ~/revealfleet/revealui --profile revealfleet

# Remove symlinks
./unlink.sh --target ~/revealfleet/revealui

# List available profiles
./link.sh --list

# Full flag reference for any script
./link.sh --help

Structure

revcon/
├── base/                          # Universal configs (all projects)
│   ├── cursor/
│   │   ├── .cursorignore
│   │   ├── environment.json
│   │   └── snippets/
│   └── zed/
│       └── settings.json
├── profiles/                      # Per-project overrides (layered on base)
│   └── revealui/
│       ├── cursor/
│       │   ├── .cursorrules
│       │   ├── config.json
│       │   ├── mcp-config.json
│       │   ├── rules.md
│       │   ├── commands/
│       ├── workflows/             # Shared manual Markdown references
│       └── zed/
│           └── tasks.json
├── harnesses/                     # AI harness content (generated by @revealui/harnesses)
│   ├── manifest.json              # Machine-readable index of all definitions
│   ├── rules/                     # Canonical definitions by tier
│   │   ├── oss/                   #   MIT — available to all
│   │   └── pro/                   #   Commercial — require license
│   ├── commands/
│   ├── agents/
│   ├── skills/                    # INTENTIONAL tier bodies (oss/pro); not SKILL.md
│   └── generators/                # Pre-rendered, ready to copy
│       ├── claude-code/           #   → .claude/
│       └── cursor/                #   → .cursor/rules/
├── link.sh                        # Create symlinks + gitignore
└── unlink.sh                      # Remove symlinks

Skill multi-copy (GAP-358)

Shared RevealUI skills ship on three surfaces that must stay byte-identical:

Role Path
Canonical (edit here) profiles/revealui/claude/skills/<name>/SKILL.md
Lockstep copy profiles/revealui/agents/skills/<name>/SKILL.md
Lockstep copy harnesses/generators/claude-code/.claude/skills/<name>/SKILL.md
# After editing a shared skill under profiles/revealui/claude/skills/:
bash scripts/sync-skill-copies.sh
bash scripts/check-skill-lockstep.sh   # also a CI job: "Skill multi-copy lockstep"

harnesses/skills/oss|pro/*.md are a different intentional shape (harness package bodies without profile frontmatter). They are not lockstepped against profile SKILL.md files.

How It Works

  1. link.sh creates real directories (.zed/, .cursor/) in the target project
  2. Individual config files are symlinked from base/ into those directories
  3. --profile is repeatable. Profiles overlay on top of base/ in the order given, and later profiles override earlier ones on filename collisions (base → first --profile → second --profile → ...):
    ./link.sh --target ~/revealfleet/revealui --profile revealfleet --profile revealui
    The canonical fleet profile is revealfleet. ./link.sh --list names a deprecated alias when one still resolves to that profile.
  4. Editor-written state (cache, chat history) stays in the real directory, not here
  5. .gitignore is updated so symlinked dirs are never committed

Copy Mode (materialized, git-tracked)

Symlinks are untracked, so fresh clones, CI runners, and git worktrees of a target repo see none of the distributed config. For repos that need the config to travel with the repo, use copy mode:

./link.sh --target ~/revealfleet/revealui --profile revealfleet --profile revealui --editor claude --mode copy

Copy mode materializes real files instead of symlinks, writes a deterministic <dot_dir>/.revcon-manifest.json (per-file profile source + sha256), and does NOT add a .gitignore entry: the target repo tracks the copies and gates drift with a lockstep check against the manifest (revealui: pnpm validate:rules-lockstep). Re-running with unchanged profiles is a no-op. Edits belong in the profile, never in the copy; re-apply to converge.

status.sh verifies materialized dirs against both the manifest (local edits) and the current profile sources (stale copies). unlink.sh removes copies whose hash still matches the manifest and keeps locally modified files.

Adding a Profile

mkdir -p profiles/revforge/cursor profiles/revforge/zed
# Add project-specific configs (MCP servers, tasks, rules, etc.)

Personal Opt-Out

The product ships configs for every supported editor. To skip editors you don't personally use, or to layer in a private profile that never enters this repo, two supported configuration mechanisms are available. Linking defaults to first-party .revealui; use --editor all to opt into every adapter. Status and unlink default to inspecting all managed trees, including existing vendor projections.

Skip editors

# Per-invocation
./link.sh --target ~/revealfleet/foo --profile revealui --editor all --skip cursor

# Default for your machine — set in ~/.bashrc / ~/.zshrc
export REVCON_SKIP_EDITORS=cursor

# Multiple skips
export REVCON_SKIP_EDITORS=cursor,vscode

--skip and REVCON_SKIP_EDITORS apply to link.sh, unlink.sh, and status.sh.

Private profiles

Point REVCON_PRIVATE_PROFILES_DIR at any directory outside this repo. Profile names there are searched first; in-repo profiles act as fallback.

export REVCON_PRIVATE_PROFILES_DIR=~/private/revcon-profiles

mkdir -p ~/private/revcon-profiles/joshua/{zed,claude}
# Drop your proprietary configs (rules, MCP servers, custom commands) under that tree.
# Same layout as profiles/<name>/<editor>/.

./link.sh --target ~/revealfleet/foo --profile joshua --editor all
# Resolves to ~/private/revcon-profiles/joshua/, NOT this repo.

./link.sh --list shows both in-repo and private profiles, with (private) markers on the latter. unlink.sh knows to remove symlinks pointing into the private dir as well, and status.sh reports them as private:<rel-path> sources.

Supported Editors

Editor Dot-dir Status
RevealUI .revealui/content/ First-party default
Claude .claude/ Optional third-party projection
Cursor .cursor/ Full support
Zed .zed/ Full support
VS Code .vscode/ Placeholder

A selected native editor fails clearly when no native files exist, including empty profile directories; it never falls back to Claude sources. The product revealui profile currently contains vendor overlays, so use the native revealfleet profile for fleet policy and the maintained revealui-harnesses manager for product definitions. Request vendor overlays explicitly.

--editor revealui is the default and writes native content from profiles/<profile>/revealui/. Vendor adapters require explicit --editor NAME or --editor all. Claude projects native content into .claude/; native sources win same-path collisions and unique explicit Claude-only overlays remain. Other adapters use base/<editor>/ and profiles/<profile>/<editor>/; agents writes .agents/. These do not link harnesses/*, which ships separately via the revealui-harnesses CLI. See Harnesses Content.

Harnesses Content

The harnesses/ directory contains AI coding rules, commands, agents, and skills generated from the canonical content layer in @revealui/harnesses. This is the distribution target for content pull:

# Pull OSS rules into a RevealUI project (Claude Code format)
revealui-harnesses content pull --generator claude-code --tier oss

# Pull all rules (requires Pro license)
revealui-harnesses content pull --generator claude-code --tier all

create-revealui automatically pulls OSS rules during project scaffolding.

To regenerate after updating definitions:

cd ~/revealfleet/revealui
node packages/harnesses/dist/cli.js content export --output ~/revealfleet/revcon/harnesses

OSS vs Pro

Tier Contents License
OSS (18) biome, database, monorepo, tailwind, testing, safety, etc. MIT
Pro (11) agent dispatch, debugging, TDD, code review, db-migrate, etc. Commercial

Pro definitions are visible in the repo but the CLI validates a license key before installing them.

Branch protection

main and test are protected: changes land via PR, and commits must be signed (a verified signature is required on protected branches). Configure commit signing locally before pushing.

Version

This repo has no package.json, so its version is tracked in the root VERSION file. Current: 0.2.0.

License

MIT

Shared workflow references

profiles/<profile>/workflows/**/*.md is the canonical editor-neutral manual reference contract. link.sh explicitly maps it to workflows/ inside each supported adapter directory: .cursor, .zed, .vscode, .claude, .agents. These adapters can open/read a named Markdown file; this contract does not claim automatic discovery, rule loading, slash commands, or workflow execution. Open or explicitly ask the assistant to read the installed document. Adapter commands and executable automation remain in their existing editor overlays. All five adapters support this manual consumption; selecting/skipping an adapter includes/excludes its references with its other content.

Precedence is base editor content, then for each selected profile in order its shared references followed by its editor overlay. Later profiles win. Shared workflow directories must contain readable Markdown files; dangling sources and other file types fail rather than silently omitting guidance.

The RevealUI canonical document moved from profiles/revealui/cursor/workflows/WORKFLOWS.md to profiles/revealui/workflows/WORKFLOWS.md; Cursor's installed path stays the same. Reapplying migrates old managed symlinks (including dangling links) and unmodified manifest-listed copies to the canonical source. Unrecorded files, foreign symlinks and locally modified copies are preserved and cause an error. Copy manifests record the shared canonical source; existing status verification, copy lockstep and confined unlink operate on these entries normally. Unlink keeps modified copies. Use the normal unlink lifecycle before switching a workflow copy installation to symlink mode; this prevents a stale copy manifest from masking link status.

First-party fleet policy

Fleet policy is owned in profiles/revealfleet/revealui/rules/. Materialize first-party policy without vendor output:

./link.sh --target /path/to/project --profile revealfleet --editor revealui --mode copy
./status.sh --target /path/to/project --editor revealui --verify

This writes .revealui/content/rules/ and .revealui/.revcon-manifest.json with content/rules/... keys and native profile source hashes. Claude is an optional third-party projection requested with --editor claude; native policy wins collisions while unique Claude-only profile files are retained. Do not hand-copy or edit installed policy. Edit its owning profile and use the maintained materializer.

About

RevCon: editor and agent-rule configs for RevealUI projects. Part of the RevealFleet family.

Topics

Resources

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages