Skip to content

[FEATURE] #32

Description

@holg

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-viewer in 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/project

Alternatives Considered

  1. Workspace manifest file (arbor-workspace.toml listing project paths) — Less flexible, requires central config file maintenance
  2. Symlink-based grouping — Hacky, filesystem-dependent, breaks on Windows
  3. Multiple Sled databases — Current workaround, but no cross-group queries possible

Implementation Ideas

  • Changes to CLI
    • --tag/--tags flag for arbor index
    • --tag/--tags/--exclude-tag flags for arbor bridge
    • New arbor tags subcommand 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_tags as 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions