GhostGet

How-to guide · capture and preservation · GhostGet 0.19.0

Capture a URL or preserve one verified media item

Use ghostget read for a non-persistent inspection, pass a URL to GhostGet for durable Markdown capture, or use ghostget archive for one authorized, accessible, finite, non-DRM media item with integrity evidence.

This guide describes GhostGet v0.19.0.

Choose the result before you run the command

CommandResultPersistence
ghostget read URLReadable page inspectionDoes not save the page
ghostget URLDurable Markdown page capture and local assets when applicableSaves to the configured knowledge base
ghostget archive URLVerified source media plus requested derivatives, transcript, manifest, and hashesSaves one archive item
ghostget audio|video|transcript URLOne focused derivative from the same bounded media pipelineSaves the requested archive view

Capture readable web knowledge

ghostget read https://example.com
ghostget init ./ghostget-notes
ghostget https://example.com --output ./ghostget-notes/articles
ghostget search "Example Domain" --root ./ghostget-notes --mode exact

The saved form is Markdown intended to remain inspectable and searchable in local knowledge. ghostget context resolves nearby agent context for a repository path, while ghostget search queries the knowledge already kept locally.

To add metadata to URLs you’ve already saved, run:

ghostget url-metadata backfill --root kb

The backfill uses the shared @hraness/wordcell URL tools. It looks up metadata with a pinned Rust search helper and writes a url-metadata.json file next to each saved URL, so you can stop and resume it. By default it also checks Archive.today, including archive.is URLs, for archived copies, read-only. --no-archive turns that check off; --refresh replaces an existing metadata file after a fresh lookup.

Preserve media with recomputable integrity

ghostget archive https://example.com/authorized-media
ghostget verify path/to/archive-item

A completed media item retains the acquired encoded media, privacy-projected provider metadata, requested derivatives and transcripts, a versioned manifest, and SHA-256 integrity records. ghostget verify recomputes every recorded artifact hash so the archive can be checked independently after capture.

The unit of work is exactly one accessible, finite item. GhostGet rejects playlists, live streams, affirmative DRM, and unsupported authentication rather than silently weakening the boundary. It does not bypass authentication, payment, access controls, or DRM.

GhostGet runs yt-dlp to fetch the media. Use yt-dlp directly for playlists, channels, or bulk downloads. Use ghostget archive when you want one item with its transcript, manifest, and SHA-256 records.

Page captures share two local browser slots

Fresh and profile-backed page capture share at most two locally owned browser acquisitions across GhostGet processes using the same state home. Admission consumes the capture timeout and remains held through browser, proxy, process, and isolation cleanup.

An explicit --cdp or --browser-live attachment does not launch a GhostGet-owned browser and does not consume one of those two slots. Ambiguous same-boot admission state stays occupied rather than allowing capacity to exceed the bound. Run ghostget doctor --json for the exact state home and recovery evidence.

Email thread clipping is a separate authenticated path

A Gmail messaging.list result includes a provider-derived threadUrl. Pass that URL to ghostget read or ghostget clip with the same Gmail auth locator. Gmail clips default to private GhostGet state; --output <directory> is the explicit plaintext export boundary.

The default and --media all include every MIME attachment. --media none omits attachment bytes, while --media images is rejected because it would misrepresent non-image files. Attachment objects are content-addressed, integrity-recorded, and stored under deterministic SHA-256 names. See the provider support directory for available inbox, search, thread, and contact actions.