Skip to main content

Print the structural outline of source files for LLM navigation

Project description

outliner

Print the structural outline of source files — declarations and callable landmarks with line ranges — so an LLM agent (or human) can navigate a file without reading it whole.

Usage

outliner-cli [OPTIONS] [FILE...]
Option Description
-g, --grep EXPR Only show items whose signature matches EXPR
-s, --syntax LANG Override syntax auto-detection when ambiguous
-t, --type LANG Only include files of this language (repeatable)
-w, --width COLS Truncate lines (0=off, auto=fit, default 120)
-x, --exclude GLOB Exclude files from directory walks (gitignore-style)

Pass a file, a directory (walked recursively), or omit arguments to read stdin. Use - to read stdin explicitly. Directory walks honor .gitignore and skip hidden directories; all other files are listed, with binary and unrecognized files shown as one-line binary file / unsupported file summaries. --syntax is only needed when content auto-detection cannot identify the language (e.g. an ambiguous extensionless script piped on stdin).

Output

 3,4   type Driver struct
19,6   func New() *Driver
26,12  func (d *Driver) StartLogging(ctx context.Context, f *os.File) error

Each line: <start>,<count> <signature>

  • start — 1-based line number, right-aligned
  • count — number of lines covered by the item (including doc-comments above)
  • signature — first non-comment line of a declaration; multi-line signatures are merged into one line; lines longer than the output width are truncated with ...

Nesting is visible in two ways: overlapping ranges (a class range contains its methods) and native-format indentation in the signature (indented for code, #/## heading levels for Markdown).

Installation

pip install outliner-cli

Running

# With the package installed (pip or uvx):
uvx outliner-cli path/to/file.py

# From within the outliner/ directory
uv run outliner-cli path/to/file.py

Running Tests

# From within the outliner/ directory
uv run pytest

Supported Languages

AsciiDoc, C/C++, C#, Clojure, Go, HTML, Java, JavaScript/TypeScript (incl. Svelte, Vue, and Astro components), JSON/NDJSON, Markdown, Org-mode, Perl, PHP, Python, reStructuredText, Ruby, Rust, Scala, Shell, Swift, XML, and Zig.

Example Use Cases

Structural overview — Run on a directory to see declarations across all files before reading anything:

$ uvx outliner-cli src/
==> src/billing.py <==
 12,8   class Invoice
 22,4   def create(customer_id: str, items: list[Item]) -> Invoice
 38,6   def send(invoice: Invoice, method: str) -> bool

==> src/payments.py <==
  8,3   class PaymentMethod
 14,12  def charge(method: PaymentMethod, amount: Decimal) -> Receipt

Find all copies of a pattern--grep serialize across a source tree locates every implementation of a repeated function in one command:

$ uvx outliner-cli --grep serialize src/
==> src/invoice.py <==
 44,5   def serialize(self) -> dict

==> src/receipt.py <==
 31,3   def serialize(self) -> dict

Find functions whose interface mentions a term--grep searches signatures, not bodies. It finds functions whose interface involves a concept, skipping internal uses, comments, and call sites:

$ uvx outliner-cli --grep payment src/
 14,12  def charge(method: PaymentMethod, amount: Decimal) -> Receipt
 61,4   def refund(payment: Payment) -> bool

Find functions accepting a specific type--grep PaymentMethod locates every function where the type appears in parameters, return types, or generic bounds. Multi-line signatures are merged into a single line before matching, so nothing is missed:

$ uvx outliner-cli --grep PaymentMethod src/
 14,12  def charge(method: PaymentMethod, amount: Decimal) -> Receipt
 88,4   def validate(m: PaymentMethod) -> bool

Inspect a dataset without opening it — JSON/NDJSON files show a schema overview with file size, record count, data types, optionality, and truncated sample values:

$ uvx outliner-cli titanic.json
$             163.9 KB · json · array[891]
.Age          float|int? -- 22
.Cabin        str? -- "C85"
.Embarked     str? -- "S"
.Fare         float|int -- 7.25
.Name         str -- "Braund, Mr. Owen Harris"
.Survived     int -- 0

XML files show an indented structural outline with XML-native node kinds:

$ uvx outliner-cli pubmed26n0001.xml
/                                195.5 MB · xml · sampled 204K elems
<PubmedArticleSet>               elem
  <PubmedArticle>                elem+
    <MedlineCitation>            elem
      @Status                    attr -- "MEDLINE"
      <Article>                  elem
        <ArticleTitle>           text -- "Formate assay in body fluids..."
        <Abstract>               elem?

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

outliner_cli-0.4.0.tar.gz (95.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

outliner_cli-0.4.0-py3-none-any.whl (57.3 kB view details)

Uploaded Python 3

File details

Details for the file outliner_cli-0.4.0.tar.gz.

File metadata

  • Download URL: outliner_cli-0.4.0.tar.gz
  • Upload date:
  • Size: 95.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for outliner_cli-0.4.0.tar.gz
Algorithm Hash digest
SHA256 651074acdeac6da3885985da7427c48ea1113c4865df508ff0dcca18f52775b3
MD5 7a0b86015451a05e1cd19e9da6009465
BLAKE2b-256 f9d84a01b1a688f278fc27cf342ce38002c9f1bc04607d784d814421781cbb3f

See more details on using hashes here.

Provenance

The following attestation bundles were made for outliner_cli-0.4.0.tar.gz:

Publisher: publish-outliner.yml on cederberg/incubator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file outliner_cli-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: outliner_cli-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 57.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for outliner_cli-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 77bf6a334eaed3f95a9679d02c2850194ef52ead47d346a95e3b42e0415ab274
MD5 7e0b72fdaa25a239ad82ef85c9924bc7
BLAKE2b-256 ce4f268593476461d63c4dc1225ad9556d77ad5a9c7cc9b3055cc454efebda71

See more details on using hashes here.

Provenance

The following attestation bundles were made for outliner_cli-0.4.0-py3-none-any.whl:

Publisher: publish-outliner.yml on cederberg/incubator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page