No description
  • Rust 82.3%
  • Shell 11.5%
  • Astro 2%
  • Nix 1.3%
  • JavaScript 1.3%
  • Other 1.6%
Find a file
hermes 2c85acb829 feat(ownership): import IDX above-1% XLSX holder register
Since June 2026 IDX publishes the monthly "Pemegang Saham di Atas 1%"
list as an XLSX workbook on the Data Kepemilikan Saham page instead of
a PDF announcement. Add a parser for it and accept `.xlsx` in
`ownership import --file`.

- src/ownership/xlsx.rs: zip + quick-xml reader (shared strings incl.
  rich text, sheet cells), exact 12-column header match so the daily
  above-5% and investor-type/classification workbooks are rejected,
  Excel serial dates, numeric shares, percent -> bps with float-noise
  rounding. Builds KseiHoldingDraft directly and reuses the entity
  normalizers, so investor types stay uppercase like the PDF path.
- Fixtures: trimmed excerpts of the real 2026-08-31 above-1% and
  2026-09-23 above-5% workbooks.
- Unit + CLI tests: import, ticker, releases, above-5% rejection.
- Docs: ARCHITECTURE parser pipeline, AGENTS ownership inputs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017a5Cv5Z1NzdYKgKnTiAF4E
2026-09-24 20:48:07 +00:00
.agents chore: warm orb local data during setup 2026-09-20 14:30:52 +00:00
.codex/skills/idx-release docs: add idx release skill 2026-04-13 14:39:40 +07:00
.github/workflows feat: add curl | sh install script 2026-09-24 19:29:52 +00:00
contrib/systemd ops: draft self-hosted ownership snapshot publish flow 2026-04-13 16:46:53 +07:00
docs feat(ownership): import IDX above-1% XLSX holder register 2026-09-24 20:48:07 +00:00
scripts fix: expand quoted ~ in install dir and trim trailing slashes on mirror URLs 2026-09-24 19:34:18 +00:00
src feat(ownership): import IDX above-1% XLSX holder register 2026-09-24 20:48:07 +00:00
tests feat(ownership): import IDX above-1% XLSX holder register 2026-09-24 20:48:07 +00:00
.envrc dev: add flake.nix and .envrc for Rust dev environment 2026-03-05 16:23:49 +00:00
.gitignore Merge pull request #22 from 0xrsydn/feat/npm-distribution 2026-09-25 02:18:04 +07:00
.pre-commit-config.yaml ci: convert prek.toml to .pre-commit-config.yaml (prek 0.3 compat) 2026-03-05 18:32:48 +00:00
AGENTS.md feat(ownership): import IDX above-1% XLSX holder register 2026-09-24 20:48:07 +00:00
Cargo.lock fix: handle spaced KSEI PDF headers (SHARE CODE vs SHARE_CODE) 2026-07-29 04:21:54 +00:00
Cargo.toml fix: handle spaced KSEI PDF headers (SHARE CODE vs SHARE_CODE) 2026-07-29 04:21:54 +00:00
CLAUDE.md docs: add AGENTS.md + CLAUDE.md symlink for agent-first development 2026-03-05 18:00:29 +00:00
FEATURE_SPEC.md feat: support explicit MSN chart history 2026-04-15 13:48:27 +07:00
flake.lock feat: implement MVP foundation — quote, history, provider abstraction 2026-03-05 17:59:50 +00:00
flake.nix feat: add npm distribution wrapper for idx-cli 2026-08-18 11:14:55 +00:00
install.sh fix: expand quoted ~ in install dir and trim trailing slashes on mirror URLs 2026-09-24 19:34:18 +00:00
LICENSE docs: add MIT license for 2026 contributors 2026-03-05 19:35:06 +00:00
package.json fix: harden npm distribution release and installer 2026-09-24 18:57:53 +00:00
README.md feat: add curl | sh install script 2026-09-24 19:29:52 +00:00
TODO.md feat: support explicit MSN chart history 2026-04-15 13:48:27 +07:00

idx-cli

CLI tool for Indonesian stock market (IDX) analysis, built in Rust for humans and AI agents.

Installation

Install script (Linux, macOS)

curl -fsSL https://raw.githubusercontent.com/0xrsydn/idx-cli/main/install.sh | sh

Downloads the prebuilt idx binary for your platform from GitHub Releases, verifies it against the release SHA256SUMS, and installs it into ~/.local/bin without sudo. Pin a version or change the directory with sh -s -- --version v0.2.3 --dir ~/bin. See docs/INSTALL.md.

Cargo

cargo install idx-cli

This installs the idx binary. idx-cli currently requires Rust 1.85+.

If you use the install script or the Cargo install path directly, some commands also require helper tools at runtime:

  • Yahoo-authenticated flows require a curl_chrome* binary from curl-impersonate-chrome in PATH, or IDX_CURL_IMPERSONATE_BIN pointing at that binary.
  • Ownership PDF import requires mutool from MuPDF in PATH.

Install those helpers with your OS package manager, or use the Nix app/package below so they are wrapped automatically.

Nix

nix run github:0xrsydn/idx-cli -- version
nix profile install github:0xrsydn/idx-cli#default

The Nix app wraps idx with curl-impersonate and mupdf, so the Yahoo auth and ownership PDF helper tools are available automatically.

Quick start

idx stocks quote BBCA
idx stocks quote BBCA,BBRI,BMRI
idx -o json stocks quote BBCA
idx stocks history BBCA --period 3mo
idx config init
idx cache info
idx --offline stocks quote BBCA

Features

  • Provider abstraction (swap data sources behind one interface)
  • Local file cache with TTL
  • Offline mode with stale-cache fallback
  • Human table output and machine-friendly JSON output

Configuration

Config file location:

  • ~/.config/idx/config.toml

You can configure using:

  • Config file (idx config init, idx config set)
  • Environment variables
  • CLI flags

Precedence order:

  1. CLI flags
  2. Environment variables
  3. Config file
  4. Built-in defaults

Agent-friendly usage

  • Use idx --help and subcommand help for discoverability
  • Use -o json / --output json for structured output

Development

nix develop
cargo test

Prek hooks are configured for quality gates:

  • pre-commit: cargo fmt --check + cargo clippy -- -D warnings
  • pre-push: cargo test

License

MIT