crabbuild/compass/plans

Claude Code and agent skill by crabbuild/compass

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Install

npx vskill@latest install crabbuild/compass/plans

SKILL.md

Native Compass skill implementation plan

For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.

Goal: Make compass install create and manage a new skill named compass whose content may borrow from Graphify but uses only native Compass commands and artifacts.

Architecture: Add one canonical Agent Skills package under crates/compass-cli/assets/compass-skill/. Keep platform routing in install_commands.rs, but point every platform at the canonical package and rename every generated integration from Graphify to Compass. Replace Python parity tests with native black-box contracts that inspect isolated installation trees.

Tech stack: Rust 2024, Cargo integration tests, embedded Markdown assets, serde_json, Agent Skills SKILL.md

Global constraints

  • The installed skill frontmatter name is exactly compass
  • Installed skill directories end in /skills/compass
  • Installed content uses compass, /compass, compass-out/, and COMPASS_*
  • Installed content contains no graphify, graphifyy, GRAPHIFY_*, or graphify-out
  • Graphify installations remain unchanged during Compass install and uninstall
  • compass uninstall --purge removes compass-out/ but preserves graphify-out/
  • The supported platform set remains unchanged
  • Installer writes remain atomic through compass_files::write_text_atomic
  • No Python runtime or Graphify package becomes a Compass skill dependency

File map

  • Create crates/compass-cli/assets/compass-skill/SKILL.md: canonical native skill workflow
  • Create crates/compass-cli/assets/compass-skill/references/*.md: native command guidance loaded on demand
  • Create crates/compass-cli/assets/compass-integrations/*.md: always-on platform registrations and Kilo command
  • Modify crates/compass-cli/src/install_commands.rs: Compass ownership, destinations, hooks, plugins, install and uninstall behavior
  • Replace crates/compass-cli/tests/install_cli.rs: native installer lifecycle and content contracts
  • Modify crates/compass-cli/tests/compass_product.rs: product-level help and stale-brand assertions
  • Modify README.md: document native skill registration
Task 1: Establish failing native installer contracts

Files:

  • Replace: crates/compass-cli/tests/install_cli.rs
  • Test: crates/compass-cli/tests/install_cli.rs

Interfaces:

  • Consumes: CARGO_BIN_EXE_compass
  • Produces: InstallFixture::run(&[&str]) -> Result<Output, Box<dyn Error>>, directory_tree(&Path) -> Result<BTreeMap<PathBuf, Vec<u8>>, Box<dyn Error>>, and the native installation acceptance contract
  • [ ] Step 1: Replace the Python parity fixture with an isolated Compass fixture

Use the native executable and isolated HOME, USERPROFILE, and project directories:

rust
struct InstallFixture {
_directory: TempDir,
project: PathBuf,
home: PathBuf,
}
impl InstallFixture {
fn new() -> Result<Self, Box<dyn Error>> {
let directory = tempfile::tempdir()?;
let project = directory.path().join("project");
let home = directory.path().join("home");
fs::create_dir_all(&project)?;
fs::create_dir_all(&home)?;
Ok(Self {
_directory: directory,
project,
home,
})
}
fn run(&self, arguments: &[&str]) -> Result<Output, Box<dyn Error>> {
Ok(Command::new(env!("CARGO_BIN_EXE_compass"))
.args(arguments)
.current_dir(&self.project)
.env("HOME", &self.home)
.env("USERPROFILE", &self.home)
.env_remove("CLAUDE_CONFIG_DIR")
.env_remove("CODEX_HOME")
.output()?)
}
}
fn directory_tree(root: &Path) -> Result<BTreeMap<PathBuf, Vec<u8>>, Box<dyn Error>> {
fn visit(
root: &Path,
directory: &Path,
output: &mut BTreeMap<PathBuf, Vec<u8>>,
) -> Result<(), Box<dyn Error>> {
let mut entries = fs::read_dir(directory)?.collect::<Result<Vec<_>, _>>()?;
entries.sort_by_key(fs::DirEntry::file_name);
for entry in entries {
let path = entry.path();
if path.is_dir() {
visit(root, &path, output)?;
} else if path.is_file() {
output.insert(path.strip_prefix(root)?.to_path_buf(), fs::read(path)?);
}
}
Ok(())
}
let mut output = BTreeMap::new();
visit(root, root, &mut output)?;
Ok(output)
}
  • [ ] Step 2: Add a project-scoped Codex acceptance test
rust
#[test]
fn project_codex_install_creates_native_compass_skill() -> Result<(), Box<dyn Error>> {
let fixture = InstallFixture::new()?;
let output = fixture.run(&["install", "--platform", "codex", "--project"])?;
assert!(output.status.success(), "{}", String::from_utf8_lossy(&output.stderr));
let skill = fixture.project.join(".codex/skills/compass/SKILL.md");
let body = fs::read_to_string(&skill)?;
assert!(body.starts_with("---\nname: compass\n"));
assert!(body.contains("compass query"));
assert!(body.contains("compass-out/"));
assert_native(&body);
assert!(skill.with_file_name(".compass_version").is_file());
Ok(())
}
fn assert_native(value: &str) {
for forbidden in ["graphify", "graphifyy", "GRAPHIFY_", "graphify-out"] {
assert!(!value.contains(forbidden), "stale token {forbidden}: {value}");
}
}
  • [ ] Step 3: Add a Graphify-preservation test
rust
#[test]
fn compass_lifecycle_preserves_adjacent_graphify_install() -> Result<(), Box<dyn Error>> {
let fixture = InstallFixture::new()?;
let graphify = fixture.project.join(".codex/skills/graphify/SKILL.md");
fs::create_dir_all(graphify.parent().ok_or("graphify parent")?)?;
fs::write(&graphify, "---\nname: graphify\n---\n")?;
fs::create_dir_all(fixture.project.join("graphify-out"))?;
assert!(fixture.run(&["install", "--platform", "codex", "--project"])?.status.success());
assert!(fixture.run(&["uninstall", "--platform", "codex", "--project"])?.status.success());
assert_eq!(fs::read_to_string(graphify)?, "---\nname: graphify\n---\n");
assert!(fixture.project.join("graphify-out").is_dir());
Ok(())
}
  • [ ] Step 4: Run the focused test and verify the RED state

Run:

bash
cargo test -p compass-cli --test install_cli project_codex_install_creates_native_compass_skill -- --exact

Expected: FAIL because the current installer writes .codex/skills/graphify/SKILL.md.

  • [ ] Step 5: Commit the failing contracts
bash
git add crates/compass-cli/tests/install_cli.rs
git commit -m "test: define native Compass skill contracts"
Task 2: Add the canonical native skill package

Files:

  • Create: crates/compass-cli/assets/compass-skill/SKILL.md
  • Create: crates/compass-cli/assets/compass-skill/references/add-watch.md
  • Create: crates/compass-cli/assets/compass-skill/references/extraction-spec.md
  • Create: crates/compass-cli/assets/compass-skill/references/exports.md
  • Create: crates/compass-cli/assets/compass-skill/references/github-and-merge.md
  • Create: crates/compass-cli/assets/compass-skill/references/hooks.md
  • Create: crates/compass-cli/assets/compass-skill/references/query.md
  • Create: crates/compass-cli/assets/compass-skill/references/update.md
  • Test: crates/compass-cli/src/install_commands.rs

Interfaces:

  • Consumes: native compass update, query, path, explain, reflect, add, watch, export, and hook command surfaces
  • Produces: embedded asset compass-skill/SKILL.md and reference prefix compass-skill/references/
  • [ ] Step 1: Add a failing embedded-package test

Add this unit test to install_commands.rs:

rust
#[test]
fn canonical_compass_skill_package_is_native() {
let body = asset_text("compass-skill/SKILL.md").expect("canonical Compass skill");
assert!(body.starts_with("---\nname: compass\n"));
assert!(body.contains("references/query.md"));
assert!(body.contains("compass query"));
assert!(body.contains("compass update"));
for forbidden in ["graphify", "graphifyy", "GRAPHIFY_", "graphify-out", "python -m"] {
assert!(!body.contains(forbidden), "stale token {forbidden}");
}
assert!(EMBEDDED_ASSETS.iter().any(|asset| {
asset.path.starts_with("compass-skill/references/")
}));
}
  • [ ] Step 2: Run the package test and verify the RED state

Run:

bash
cargo test -p compass-cli install_commands::tests::canonical_compass_skill_package_is_native -- --exact

Expected: FAIL because compass-skill/SKILL.md does not exist.

  • [ ] Step 3: Create the canonical `SKILL.md`

Use this workflow shape and keep the finished file below 500 words:

markdown
---
name: compass
description: Use when answering questions about a codebase, its architecture, dependencies, impact, or project artifacts, especially when compass-out exists or the user invokes /compass.
---
# Compass
Use Compass as the first navigation layer for codebase and architecture work.
## Existing graph
When `compass-out/graph.json` exists:
1.Run `compass reflect --if-stale`.
2.Read `compass-out/reflections/LESSONS.md` when it exists.
3.Run `compass query "<question>"` for scoped context.
4.Use `compass path "<source>" "<target>"` for dependency paths.
5.Use `compass explain "<concept>"` for one concept and its neighbors.
Read `compass-out/GRAPH_REPORT.md` for broad architecture only. Navigate `compass-out/wiki/index.md` when the wiki exists.
## Build or refresh
Run `compass update INPUT_PATH`. Use `.` when the user gives no path. After code changes, run `compass update .`.
Load only the reference needed for the request:
-Query and navigation: `references/query.md`
-Incremental refresh: `references/update.md`
-Hooks and assistant setup: `references/hooks.md`
-Watch mode and added sources: `references/add-watch.md`
-Export formats: `references/exports.md`
-Repository cloning and merged graphs: `references/github-and-merge.md`
-Graph schema and provenance: `references/extraction-spec.md`
If `compass` is unavailable, report that the Compass CLI must be installed. Do not install Python or another package.
  • [ ] Step 4: Create concise native references

Each reference must state its trigger in the first paragraph, use only commands present in compass <command> --help, and defer option enumeration to CLI help. Use these exact contracts:

markdown
# Query and navigate
Load this reference for codebase questions when `compass-out/graph.json` exists.
-`compass query "<question>"`: return a relevance-ranked scoped subgraph
-`compass path "<source>" "<target>"`: show the shortest dependency path
-`compass explain "<concept>"`: show one node and its connected context
-`compass affected <path-or-symbol>`: estimate downstream impact
-`compass tree`: render repository structure with graph context
Run `compass <command> --help` before using options not shown here.

references/update.md:

markdown
# Refresh a graph
Load this reference when source files changed or the user requests a rebuild.
Run `compass update INPUT_PATH`. Use `.` when no path was supplied. Run `compass reflect --if-stale` after the update before answering a codebase question.
Run `compass update --help` before adding build options.

references/hooks.md:

markdown
# Manage hooks and assistant setup
Load this reference when the user asks for automatic refresh or assistant registration.

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 90 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

7-day trend score
0

Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/crabbuild/compass/plans/badge)](https://verified-skill.com/skills/crabbuild/compass/plans)

Something wrong with this skill or its page? Tell us.