Skip to main content

Interactive Instagram OSINT CLI on the HikerAPI backend

Project description

insto

Interactive Instagram OSINT CLI on the HikerAPI backend.

Two surfaces over the same command grammar:

  • REPLinsto drops you into a prompt-toolkit session with tab-completion, a bottom toolbar (active target, backend, quota), and live /watch notifications. Visually similar to the Claude Code welcome screen.
  • One-shotinsto @user -c <command> [args] runs a single slash-command and exits. Pipe-friendly: --json - writes to stdout, --csv - does the same for flat commands, /batch - reads targets from stdin.

Install

Requires Python ≥ 3.11 and uv.

uv tool install insto             # PyPI install (release)
# or, from a checkout:
uv sync && uv run insto --help

Setup

insto setup

Interactive wizard. Writes ~/.insto/config.toml (mode 0600) with your HikerAPI token, output directory, sqlite store path, and optional proxy. The token is read with getpass so it does not echo to the terminal; pass - for the proxy to clear a previously-saved value.

Token precedence is flag > env (HIKERAPI_TOKEN) > config.toml; the same precedence applies to the proxy (--proxy, HIKERAPI_PROXY, [hiker].proxy). socks5h:// (Tor) and http:// proxies are both supported.

Environment variables

Variable Purpose
HIKERAPI_TOKEN API token (overrides [hiker].token in config.toml)
HIKERAPI_PROXY Proxy URL (overrides [hiker].proxy)
INSTO_HOME Override the default ~/.insto/ config root
INSTO_BACKEND Set to fake for the network-free backend used by the e2e suite

Examples

REPL:

$ insto
… wasp banner …
Tips: /target @user · /info · /posts --limit 10 · /watch · /quit
> /target @ferrari
> /info
> /posts --limit 10 --download
> /followers --limit 200 --json followers.json
> /diff
> /watch ferrari 600
> /quit

/watch <user> [interval-seconds] — interval defaults to the 5-minute floor; /unwatch <user> removes a watch and /watching lists active ones.

One-shot:

insto @ferrari -c info
insto @ferrari -c posts --limit 10 --json -
insto @ferrari -c followers --limit 500 --csv followers.csv
insto -c batch targets.txt info --json - --yes
insto @ferrari -c dossier

-c <cmd> consumes the rest of argv as the slash-command's arguments, so -c batch targets.txt info runs batch targets.txt info (one -c per invocation). --yes is required when /batch reads from stdin or when the target list exceeds the confirmation threshold.

Global flags

Flag Purpose
-c / --cmd <name> [args...] One-shot mode: run a single slash-command and exit
-i / --interactive Force the REPL even when a target is provided
--proxy <url> Override HIKERAPI_PROXY for this invocation
--json [PATH or -] Write the JSON envelope (default path, file, or stdout)
--csv [PATH or -] Same for flat-row commands
--maltego [PATH or -] Maltego entity-import CSV (alias for --output-format maltego)
--output-format {json,csv,maltego} Explicit format selector
--limit N / --no-download Per-command paging cap and media opt-out
--yes / -y Skip confirmation prompts (required for /batch -)
--verbose / --debug Logging level for ~/.insto/logs/insto.log
--version Print the version and exit
--print-completion {bash,zsh} Emit a shell-completion script

Pipe to jq:

insto @ferrari -c info --json - | jq '.username, .followers_count'

Shell completion (uses argparse via shtab):

insto --print-completion zsh > ~/.insto/_insto
echo 'fpath+=~/.insto && autoload -Uz compinit && compinit' >> ~/.zshrc

Command surface

Profile: info, propic, email, phone, export. Media: posts, reels, stories, highlights, tagged. Network: followers, followings, mutuals, similar. Content: hashtags, mentions, locations, captions, likes. Interactions: comments, wcommented, wtagged. Watch / diff: watch, unwatch, watching, diff, history. Operational: quota, health, config, purge. Session: target, current, clear. Batch / dossier: batch, dossier (full target package: profile + media + network + analytics, with --maltego CSV export).

Inside the REPL each command may be invoked with or without a leading /.

Where things go

  • ~/.insto/config.toml — settings (mode 0600).
  • ~/.insto/store.db — sqlite store: snapshots, watches, cli history.
  • ~/.insto/logs/insto.log — rotating log file (mode 0600, secrets redacted).
  • ./output/<user>/<type>/… — downloaded media. Override with [output_dir] in config or --out on commands that accept it.

Design & spec

Architecture is documented in docs/superpowers/specs/2026-04-27-insto-design.md (442 lines, source of truth). Implementation plan: docs/plans/2026-04-27-insto-v0.1-implementation.md.

Contributor docs: CLAUDE.md.

License

MIT.

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

insto-0.1.1.tar.gz (246.5 kB view details)

Uploaded Source

Built Distribution

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

insto-0.1.1-py3-none-any.whl (114.2 kB view details)

Uploaded Python 3

File details

Details for the file insto-0.1.1.tar.gz.

File metadata

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

File hashes

Hashes for insto-0.1.1.tar.gz
Algorithm Hash digest
SHA256 e9dfa5933ac5698554409224ff814594921e1b325e5dc7c0fa6de41a6dd86b29
MD5 0012546755bc41f83c0aae2da6e9c5d0
BLAKE2b-256 3a12f76b43e4b648b3ef90c08e12866ee115e72e3287f4fab2c69fb3ecc6dbb3

See more details on using hashes here.

Provenance

The following attestation bundles were made for insto-0.1.1.tar.gz:

Publisher: release.yml on subzeroid/insto

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

File details

Details for the file insto-0.1.1-py3-none-any.whl.

File metadata

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

File hashes

Hashes for insto-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a070805ba767caa3d51f7215c93b66bfb1c737af94da1ea5d97be642359f2908
MD5 e9ec59a5c0e967ac4b1c38cbbffc02c8
BLAKE2b-256 893bd54a7444f2ec0c0688a796ba1d5521bdded3fa7bf0b1ed1841f55a8ec293

See more details on using hashes here.

Provenance

The following attestation bundles were made for insto-0.1.1-py3-none-any.whl:

Publisher: release.yml on subzeroid/insto

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