Skip to content

[FEATURE] #32

@holg

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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions