-
Notifications
You must be signed in to change notification settings - Fork 18
Description
Problem Statement
Currently Arbor assumes either a monolithic index (everything in one graph) or completely separate indexes per project. This creates friction for developers who work on:
- Related but separate repositories (e.g., a Rust library ecosystem with
lib-core,lib-parser,lib-viewerin different directories) - Multiple unrelated projects where indexing everything together pollutes the graph and slows queries
- Context switching between project groups without re-indexing
The filesystem hierarchy becomes the only way to define "related code," which doesn't reflect how developers actually think about project relationships.
Proposed Solution
Introduce a tagging system that allows logical grouping of indexed projects independent of filesystem structure:
# Index with tags
arbor index --tag lighting # run in each lighting project
arbor index --tag experimental # separate experiments
arbor index --tags lighting,oss # multiple tags supported
# Query specific groups
arbor bridge --tag lighting # only lighting ecosystem
arbor bridge --tags lighting,experimental # combine groups
arbor bridge --exclude-tag experimental # exclude specific tags
# Manage tags
arbor tags list # show all tags and their projects
arbor tags add lighting ./path/to/project
arbor tags remove experimental ./path/to/projectAlternatives Considered
- Workspace manifest file (
arbor-workspace.tomllisting project paths) — Less flexible, requires central config file maintenance - Symlink-based grouping — Hacky, filesystem-dependent, breaks on Windows
- Multiple Sled databases — Current workaround, but no cross-group queries possible
Implementation Ideas
- Changes to CLI
--tag/--tagsflag forarbor index--tag/--tags/--exclude-tagflags forarbor bridge- New
arbor tagssubcommand for tag management
- Changes to visualizer
- Tag filter dropdown/chips in UI
- Color-code nodes by tag
- Changes to MCP bridge
- Pass tag filters to graph queries
- Expose
list_tagsas MCP tool
- New language parser — N/A
- Documentation update
- Usage examples for multi-project workflows
- Migration guide for existing indexes
Storage schema addition
// arbor-graph/src/metadata.rs
pub struct ProjectMetadata {
pub root_path: PathBuf,
pub tags: HashSet<String>,
pub indexed_at: DateTime<Utc>,
}
// Tag index in Sled: "tag:{tag_name}" -> Vec<project_root_paths>Additional Context
Real-world use case: I maintain a lighting industry library ecosystem (gldf-rs, l3d-rs, eulumdat-rs, uld-rs) that are logically connected but live in separate repositories. I also work on unrelated projects (acadlisp, portfolio site).
Currently I must either:
- Index everything → bloated graph, irrelevant results when working on one ecosystem
- Maintain separate indexes → lose cross-crate intelligence within the lighting ecosystem
Tags would let me arbor bridge --tag lighting when working on lighting projects, keeping the graph focused while preserving cross-crate edges.