Skip to content

feat: list and cd with fuzzy matching #3

Open

Description

@simonostendorf

Goal

Every managed repository can be found and jumped to by a partial name.

Context

  • Trigger: third milestone, consumes the Repo value and the resolver from the identity issue.
  • Affected: internal/scan, internal/shell, cmd/gitcd.

A linked worktree's .git is a file, not a directory. scan treats a .git file as a
repository boundary and stops descending, which covers linked worktrees and .claude/worktrees/
in one rule rather than two special cases.

The picker is a numbered list on stderr reading from stdin. An fzf integration is deliberately
deferred until the built in one has been used for a while.

Acceptance criteria

  • internal/scan walks root into Repo values and stops descending at a repository
    boundary, with a test covering a linked worktree.
  • gitcd list prints every repository under root.
  • gitcd list --json prints the same as structured output.
  • gitcd list --worktrees includes linked worktrees, which are hidden by default.
  • gitcd cd <query> resolves a unique partial match to a path on stdout.
  • An ambiguous query with a terminal on stdin shows a numbered picker on stderr.
  • An ambiguous query without a terminal exits non zero and lists the candidates on stderr.
  • A query matching nothing exits non zero with a message naming the query.
  • Shell completion for cd in zsh and fish, shipped through shell-init.
  • Tests cover matching, ambiguity and the non terminal path.
  • task check passes.

Out of scope

  • fzf integration.
  • doctor, adopt, status, sync.
  • Indexing repositories lying outside root.

Activity

  1. added
    ai: readyScoped + approved for an AI agent to pick up
    ai: workingAn AI agent is implementing (incl. committed but not yet pushed)
    ai: reviewingAn AI agent is reviewing the pushed work
    ai: changes requestedAI review requested changes - back to the implement loop
    and removed
    needs triageNot yet triaged by a maintainer
    ai: readyScoped + approved for an AI agent to pick up
    ai: workingAn AI agent is implementing (incl. committed but not yet pushed)
    ai: reviewingAn AI agent is reviewing the pushed work
    on Nov 13, 2026
  2. added
    ai: reviewingAn AI agent is reviewing the pushed work
    and removed
    ai: changes requestedAI review requested changes - back to the implement loop
    on Nov 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    ai: reviewingAn AI agent is reviewing the pushed workfeatureNew feature or capabilitystack: goRelated to Go code

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions