EDGAR Query.
edgarq brings SEC EDGAR data to the command line — filings, XBRL fundamentals, insider transactions, fund holdings, and full-text search. It is built for scripts, agents, and quick terminal work that needs structured JSON (or typed Parquet) from SEC.gov.
The project stays deliberately close to the source. It does not define deep
finance domain models beyond what edgartools already provides, reshape SEC
responses into opinionated views, or add discovery APIs beyond CLI help. Where
the data is already structured, edgarq exposes the EDGAR HTTP endpoints
directly.
- Company filings, XBRL company facts, and cross-section XBRL frames as JSON.
- Tabular outputs (filings, facts, holdings, insider transactions, screen results) available as Parquet for downstream pandas / DuckDB use.
- Full-text search across all filings via EDGAR's EFTS index.
- Within-filing BM25 text search with ranked snippets.
- Insider transactions (Form 3 / 4 / 5) and institutional holdings (13F).
- Fund data: N-PORT portfolios, N-MFP money-market holdings, N-CEN census.
- Filing section extraction (MD&A, risk factors, business, financials, items).
- Bulk-zip downloads (submissions, company facts, DERA quarterly data sets) treated as first-class local data: hybrid local-first / remote-fallback reads.
- Real-time filing feeds via Atom / RSS polling.
- Specialized filing parsers: proxy statements, 40-F, Form C (Regulation CF).
- Generated help that includes examples, parameters, and form-specific notes.
edgarq is currently intended to run from a local checkout. It is a Python 3.10+ project managed with uv.
uv sync --all-groupsRun the CLI from the repository:
uv run edgarq --helpOr install it as a package from a local checkout:
uv tool install .
edgarq --helpSEC requires a User-Agent header containing a contact email on every request.
edgarq reads this identity from the EDGARQ_IDENTITY environment variable or
from the persisted config file at ~/.config/edgarq/config.toml (override the
path with EDGARQ_CONFIG_HOME). Set it once before making any requests:
$env:EDGARQ_IDENTITY = "Your Name your@email.com"Or persist it via the config command:
uv run edgarq config set identity "Your Name your@email.com"Commands that make SEC requests hard-fail with a clear message when identity is
unset. The format must be Name email@domain — SEC's fair-access policy requires
a recognisable contact.
Resolve a ticker, browse recent filings, read a section:
uv run edgarq lookup AAPL
uv run edgarq filings AAPL --form 10-K --limit 5
uv run edgarq filing 0000320193-24-000123 --section mdaPull XBRL fundamentals:
uv run edgarq facts AAPL --concept us-gaap:Revenues
uv run edgarq trends AAPL --concepts Revenues,NetIncomeLoss --periods 8
uv run edgarq frame us-gaap:Revenues USD CY2024Q1Compare companies side-by-side:
uv run edgarq compare AAPL,MSFT,GOOGL --metrics Revenues,NetIncomeLoss --periods 4Insider activity and institutional holdings:
uv run edgarq insider AAPL --form 4 --since 2024-01-01
uv run edgarq 13f "BERKSHIRE HATHAWAY" --period 2024-Q4Full-text search:
uv run edgarq search "climate risk" --forms 10-K --start 2024-01-01Tabular outputs as Parquet:
uv run edgarq facts AAPL --format parquet --out aapl_facts.parquet
uv run edgarq frame us-gaap:Revenues USD CY2024Q1 --format parquet --out rev_2024q1.parquetUse root help to see the command list:
uv run edgarq --helpCommands are grouped below by domain. Each has its own adaptive help:
uv run edgarq filings --help
uv run edgarq facts --help| Command | Data |
|---|---|
lookup |
Resolve a ticker, CIK, accession, or company name |
tickers |
List all tickers registered with EDGAR |
search |
Search EDGAR full-text filings index |
search-in |
Search text within a single filing |
lookup — Accepts a ticker, raw CIK, accession number, or company-name
substring and returns the canonical identifier set (ticker → CIK + name; CIK →
name + tickers; accession → CIK + index URL; name → first match or up to five
with --all).
uv run edgarq lookup AAPL
uv run edgarq lookup 320193
uv run edgarq lookup 0000320193-24-000123
uv run edgarq lookup "apple inc" --alltickers — Rows from the EDGAR company tickers file. --exchange adds an
exchange column; --mf switches to the mutual-fund series/class file.
uv run edgarq tickers
uv run edgarq tickers --exchange
uv run edgarq tickers --mfsearch — Full-text search results from the EDGAR EFTS endpoint. Paginates
automatically when --limit exceeds 100 (the per-page EFTS ceiling).
uv run edgarq search "cybersecurity risk" --forms 10-K --start 2024-01-01
uv run edgarq search "going concern" --forms 10-Q --start 2023-01-01 --end 2024-01-01
uv run edgarq search "bitcoin" --cik 320193 --limit 50search-in — BM25 text search inside a single filing, returning ranked
snippets. --regex treats the query as a Python regular expression.
uv run edgarq search-in 0000320193-24-000123 "artificial intelligence"
uv run edgarq search-in 0000320193-24-000123 "revenue.{0,20}risk" --regex| Command | Data |
|---|---|
company |
Fetch aggregated company profile, filings, and financials |
filings |
List filing index for a company |
filing |
Show a specific filing or extracted section |
attachments |
List all attachments for a filing |
subsidiaries |
List subsidiaries from the latest 10-K (Exhibit 21) |
company — Aggregated company view. --include selects sections:
profile, filings, financials, ownership.
uv run edgarq company AAPL
uv run edgarq company MSFT --include profile,financials,ownership
uv run edgarq company BRK-B --include filings --limit 10filings — Filing index from the EDGAR submissions endpoint. Filters:
--form (comma-separated), --since, --limit.
uv run edgarq filings AAPL
uv run edgarq filings AAPL --form 10-K --limit 5
uv run edgarq filings MSFT --form 10-K,10-Q --since 2022-01-01
uv run edgarq filings AAPL --format parquet --out aapl_filings.parquetfiling — Extracts a section from a single filing. Sections: mda, risk,
business, financials, items, full, raw. Filings are cached forever
(immutable after acceptance).
uv run edgarq filing 0000320193-24-000123
uv run edgarq filing 0000320193-24-000123 --section mda
uv run edgarq filing 0000320193-24-000123 --section riskattachments — All attachments (primary document, exhibits, index files) for a filing. CIK is resolved automatically from the accession number via EFTS. Result is cached forever.
uv run edgarq attachments 0000320193-24-000123subsidiaries — Exhibit 21 subsidiary list from the latest 10-K. Cached permanently per accession.
uv run edgarq subsidiaries AAPL| Command | Data |
|---|---|
facts |
Fetch XBRL facts for a company |
frame |
Fetch a cross-section XBRL frame for one concept/period |
concepts |
List available XBRL concepts for a company |
trends |
Fetch multi-period XBRL concept time series for a company |
compare |
Compare companies side-by-side on selected XBRL metrics |
facts — XBRL facts from the EDGAR companyfacts endpoint. Without
--concept, returns all concepts. --period filters to a single XBRL frame
period.
uv run edgarq facts AAPL
uv run edgarq facts AAPL --concept us-gaap:Revenues
uv run edgarq facts AAPL --concept us-gaap:Revenues --period CY2024Q1
uv run edgarq facts AAPL --format parquet --out aapl_facts.parquetframe — XBRL frame from the EDGAR frames endpoint — one row per filer that reported the concept in the given period.
uv run edgarq frame us-gaap:Revenues USD CY2024
uv run edgarq frame us-gaap:Assets USD CY2024Q1I
uv run edgarq frame us-gaap:Revenues USD CY2024Q1 --format parquet --out rev.parquetconcepts — XBRL concepts available for a company from companyfacts. Each
row summarises one (taxonomy, concept, unit) with period count and latest value.
--search filters by name substring.
uv run edgarq concepts AAPL
uv run edgarq concepts AAPL --search revenuetrends — Multi-period concept time series. Annual cadence by default;
--quarterly switches to Q1/Q2/Q3/Q4. --growth appends YoY or QoQ growth
rates. Output is long format.
uv run edgarq trends AAPL
uv run edgarq trends AAPL --concepts Revenues,NetIncomeLoss --periods 8
uv run edgarq trends AAPL --quarterly --growth
uv run edgarq trends AAPL --format parquet --out aapl_trends.parquetcompare — Side-by-side XBRL metrics for multiple companies in long format. Default metrics: Revenues, NetIncomeLoss, Assets, StockholdersEquity.
uv run edgarq compare AAPL,MSFT,GOOGL
uv run edgarq compare AAPL,MSFT --metrics Revenues,NetIncomeLoss --periods 4
uv run edgarq compare AAPL,MSFT,GOOGL --quarterly| Command | Data |
|---|---|
insider |
Fetch insider transactions from Form 3, 4, or 5 filings |
13f |
Fetch institutional holdings from a 13F-HR filing |
insider — Insider transactions from Form 3, 4, and 5 filings. --since
defaults to the last 90 days. Parsed filings are cached permanently.
Transaction code: S=Sale, P=Purchase, A=Award.
uv run edgarq insider AAPL
uv run edgarq insider AAPL --form 4 --since 2024-01-01
uv run edgarq insider MSFT --form 3 --limit 50
uv run edgarq insider AAPL --format parquet --out aapl_insider.parquet13f — Institutional holdings from the most recent (or --period) 13F-HR
filing. --diff <accession> returns a change table comparing two filings.
--period uses YYYY-Qn form.
uv run edgarq 13f "BERKSHIRE HATHAWAY"
uv run edgarq 13f "BERKSHIRE HATHAWAY" --period 2024-Q4
uv run edgarq 13f "BERKSHIRE HATHAWAY" --diff 0000950123-24-000001
uv run edgarq 13f "BERKSHIRE HATHAWAY" --format parquet --out bh_13f.parquet| Command | Data |
|---|---|
monitor |
Fetch the real-time EDGAR filing firehose |
atom |
Fetch the EDGAR Atom feed for a company |
daily-index |
Fetch the EDGAR daily filing index for a business day |
monitor — Latest accepted filings from the EDGAR getcurrent Atom feed.
Results cached for 1 minute. --limit is capped at 400 (SEC ceiling).
uv run edgarq monitor
uv run edgarq monitor --form 8-K --limit 100
uv run edgarq monitor --form 8-K,4 --limit 200atom — Per-company Atom feed via the EDGAR getcompany endpoint. Results
cached for 5 minutes. Use edgarq filings for richer metadata.
uv run edgarq atom AAPL
uv run edgarq atom AAPL --form 10-K --count 10daily-index — All filings accepted on a given business day from the EDGAR daily-index master.idx file. Only business days (Mon-Fri) are valid; weekends are rejected. Results cached for 1 day. The index is typically available from ~6 PM ET on the filing date.
uv run edgarq daily-index 2024-10-15
uv run edgarq daily-index 2024-10-15 --format parquet --out 2024-10-15.parquet| Command | Data |
|---|---|
proxy |
Fetch DEF 14A executive compensation and governance data |
fund |
Fetch fund, ETF, BDC, or money-market fund data |
40f |
Fetch sections from a Canadian 40-F annual report |
formc |
Fetch Regulation Crowdfunding Form C filing data |
proxy — Executive compensation table and pay-vs-performance data from the
latest (or --year) DEF 14A proxy statement. Cached permanently per accession.
uv run edgarq proxy AAPL
uv run edgarq proxy MSFT --year 2024fund — Multi-action fund/ETF/BDC/money-market handler. The identifier
accepts a ticker, CIK, series ID (S000001234), class ID (C000001234), or fund
name. --action selects the data section.
uv run edgarq fund SPY
uv run edgarq fund SPY --action portfolio --limit 50
uv run edgarq fund VFIAX --action series
uv run edgarq fund SPY --action portfolio --format parquet --out spy_portfolio.parquetActions: lookup (JSON), portfolio (tabular — N-PORT), mmf (JSON —
N-MFP), census (JSON — N-CEN), shareholder (JSON — N-CSR), series
(tabular), classes (tabular).
40f — Section extraction from the latest 40-F (Canadian annual report).
Without --section, returns the list of available sections. For Canadian
cross-listed issuers (RY, SU, CNQ). Cached permanently per (accession, section).
uv run edgarq 40f RY
uv run edgarq 40f RY --section mda_text
uv run edgarq 40f SU --section risk_factorsformc — Issuer and offering details from a Regulation Crowdfunding Form C filing. Accession must reference a Form C, C-U, C/A, C-AR, or similar Regulation CF form.
uv run edgarq formc 0001999999-25-000001| Command | Data |
|---|---|
bulk submissions |
Download nightly all-filer submissions archive |
bulk companyfacts |
Download nightly all-filer XBRL facts archive |
bulk financial-statements |
Download DERA quarterly XBRL data set |
bulk form345 |
Download DERA quarterly Form 3/4/5 data set |
bulk daily-feed |
Download daily filing archive for one business day |
bulk list |
List cached bulk entries |
bulk status |
Show local cache freshness summary |
bulk clean |
Remove cached entries |
See Bulk Data below for details on each archive kind.
| Command | Data |
|---|---|
config |
Manage persisted edgarq configuration |
cache |
Manage the tool-output cache |
doctor |
Run environment diagnostics and health probes |
config — Manages ~/.config/edgarq/config.toml. Actions: list, get,
set, unset, path.
uv run edgarq config list
uv run edgarq config set identity "Your Name your@email.com"
uv run edgarq config set rate_limit 6.0
uv run edgarq config pathcache — Manages the tool-output cache at ~/.cache/edgarq/tool-output/.
Actions: list, clean, clear, info. Distinct from the bulk cache (see
edgarq bulk).
uv run edgarq cache info
uv run edgarq cache list --command-filter filings
uv run edgarq cache clean --older-than 7d --dry-run
uv run edgarq cache clear --forcedoctor — End-to-end environment diagnostics. Runs 11 independent probes;
failures do not abort the run. --quick skips the two network probes.
uv run edgarq doctor
uv run edgarq doctor --quickProbes: identity_set, cache_writable, bulk_dir_writable, config_path,
python_version, pyarrow_available, edgartools_version, sql_views_available,
sec_reachable, ssl_ok, rate_limit_setting. Exit code 1 when any probe is
fail; 0 for all ok/warn.
| Command | Data |
|---|---|
screen |
Screen companies by exchange, SIC, industry, or state |
screen — Filters from company_tickers_exchange.json client-side. All
filters are AND-combined. Currently only --exchange is supported at runtime;
--industry, --sic, and --state are accepted by the parser but rejected
until bulk-cache routing lands.
uv run edgarq screen --exchange NYSE --limit 200
uv run edgarq screen --exchange Nasdaq
uv run edgarq screen --exchange OTC --format parquet --out otc.parquetValid exchange values: NYSE, Nasdaq, OTC, CBOE.
The sql command runs read-only DuckDB queries against local bulk parquet
extracts. No SEC network calls are made — everything runs on local files. Each
query opens a fresh in-memory DuckDB connection with file-system access
disabled; only SELECT, EXPLAIN, and DESCRIBE are permitted.
Populate the local parquet extracts before running SQL queries:
uv run edgarq bulk submissions --extract-parquet
uv run edgarq bulk companyfacts --extract-parquetOptional (larger data sets):
uv run edgarq bulk financial-statements --period 2024q1 --extract-parquet
uv run edgarq bulk form345 --period 2024q1 --extract-parquetuv run edgarq sql --schema
uv run edgarq sql --schema companiesAvailable views (11 total): companies, companyfacts, filings,
xbrl_facts, xbrl_tags, insider_submissions,
insider_transactions_nonderiv, insider_transactions_deriv,
insider_holdings_nonderiv, insider_holdings_deriv, reporting_owners.
# Revenue ranking across all filers
uv run edgarq sql "SELECT cik, name FROM companies JOIN companyfacts USING (cik) WHERE concept = 'Revenues' AND taxonomy = 'us-gaap' ORDER BY val DESC LIMIT 20"
# Insider purchase clusters
uv run edgarq sql "SELECT cik, COUNT(*) AS buys FROM insider_transactions_nonderiv WHERE transaction_code = 'P' GROUP BY cik HAVING COUNT(*) >= 3 ORDER BY buys DESC LIMIT 20"
# Year-over-year revenue growth window
uv run edgarq sql "SELECT cik, period_end, val, LAG(val) OVER (PARTITION BY cik ORDER BY period_end) AS prev_val FROM companyfacts WHERE concept = 'Revenues' AND taxonomy = 'us-gaap' AND fp = 'FY' ORDER BY cik, period_end"
# See ready-to-run canonical examples
uv run edgarq sql --examples
# Read a query from a file
uv run edgarq sql --file my_query.sql
# Show the DuckDB query plan
uv run edgarq sql --explain "SELECT * FROM companies LIMIT 10"
# Write results to Parquet
uv run edgarq sql "SELECT * FROM companies" --format parquet --out companies.parquet- File-system access is disabled after view materialisation (
SET enable_external_access=false). - Only SELECT, EXPLAIN, and DESCRIBE are accepted.
- Multi-statement input, DDL, DML, COPY, ATTACH, INSTALL, LOAD, PRAGMA, SET, CALL, and EXPORT are all rejected.
- Identity is not required (no SEC calls).
Each query materialises the registered views into in-memory DuckDB tables before locking down file access — necessary so the lockdown can block arbitrary file reads without breaking legitimate view queries. Plan accordingly:
companiesalone (submissions extract): ~50-100 MB.companyfactsview (sharded): ~15 GB RAM when fully registered.- Use
--schemato see which views are currently available locally; only views with parquet extracts on disk are materialised, so trimming the bulk cache trims the per-query memory footprint.
edgarq supports five archive kinds from SEC EDGAR. Each is downloaded explicitly
via edgarq bulk <action>; no command auto-downloads a bulk archive as a
side effect.
Storage root: ~/.cache/edgarq/bulk/ (override with EDGARQ_BULK_HOME).
All-filer submissions archive from
https://www.sec.gov/Archives/edgar/daily-index/bulkdata/submissions.zip.
The zip contains one JSON file per CIK with the full submission history.
Refreshed nightly (24 h TTL). Use as a local cache for edgarq filings with
--prefer local.
uv run edgarq bulk submissions
uv run edgarq bulk submissions --refreshSize: approximately 1 GB compressed, around 5 GB expanded on disk.
All-filer XBRL company facts archive from
https://www.sec.gov/Archives/edgar/daily-index/xbrl/companyfacts.zip. One
JSON file per CIK with all reported XBRL facts. Refreshed nightly (24 h TTL).
Use as a local cache for edgarq facts with --prefer local.
uv run edgarq bulk companyfacts
uv run edgarq bulk companyfacts --refreshSize: approximately 1.2 GB compressed, around 15 GB expanded on disk.
DERA quarterly XBRL numeric data from
https://www.sec.gov/dera/data/financial-statements. One set of TSV files per
quarter (num.tsv, sub.tsv, tag.tsv, pre.tsv). Immutable for past quarters;
cached forever. The TSV files are optionally repacked as Parquet when pyarrow is
available.
uv run edgarq bulk financial-statements --period 2024q1
uv run edgarq bulk financial-statements --period 2023q4DERA quarterly Form 3/4/5 insider transaction data. One TSV set per quarter. Immutable for past quarters; cached forever.
uv run edgarq bulk form345 --period 2024q1Per-day filing archive (.nc.tar.gz) from the EDGAR full-index. Requires a
business day (Mon-Fri); weekends are rejected. Useful for processing all filings
from a specific date without querying EFTS.
uv run edgarq bulk daily-feed --period 2024-10-15uv run edgarq bulk list
uv run edgarq bulk list --kind companyfacts
uv run edgarq bulk status
uv run edgarq bulk clean --older-than 30d --dry-run
uv run edgarq bulk clean --kind submissions --older-than 2dCommands that can be served from bulk archives support a --prefer flag:
| Value | Behavior |
|---|---|
auto (default) |
Try local bulk cache first; fall back to remote SEC API. |
local |
Use bulk cache only; error if the archive is not downloaded. |
remote |
Bypass bulk cache; always fetch from SEC. |
--prefer is currently wired for facts and filings. Other commands will
gain it as bulk-cache routing extends to cover more endpoints.
uv run edgarq facts AAPL --prefer local
uv run edgarq filings AAPL --prefer remoteTabular commands support --format parquet --out <path>. Install the optional
parquet extra to pull in pyarrow:
uv sync --extra parquetCommands that accept Parquet output:
tickers, filings, facts, trends, frame, concepts, insider, 13f,
screen, compare, search, monitor, atom, daily-index, search-in,
fund (portfolio, series, classes actions).
On success, a single JSON descriptor line goes to stdout:
{"format": "parquet", "out": "aapl_facts.parquet", "rows": 412, "bytes": 28160}Examples:
uv run edgarq facts AAPL --format parquet --out aapl_facts.parquet
uv run edgarq frame us-gaap:Revenues USD CY2024Q1 --format parquet --out rev_q1.parquet
uv run edgarq insider AAPL --format parquet --out aapl_insider.parquet
uv run edgarq filings MSFT --form 10-K --format parquet --out msft_10k.parquetParquet writes require --out; --format parquet without --out is rejected.
JSON commands (filing, company, attachments, etc.) are JSON-only.
Every edgarq command returns a JSON envelope on stdout:
{
"command": "<command-name>",
"data": <command-specific payload>,
"meta": <command-specific metadata>
}When --format parquet is used, the envelope is replaced by the single-line
JSON descriptor shown above.
Diagnostics, progress, and errors are written to stderr. stdout is always machine-readable.
Exit codes:
| Code | Meaning |
|---|---|
| 0 | Success. |
| 1 | User or input error (bad parameter, identity unset, etc.). |
| 2 | Usage error (bad argument syntax; argparse-generated). |
| 3+ | Upstream HTTP error from SEC (status code included in stderr message). |
The canonical form is dashed: 0000320193-24-000123. edgarq accepts the
undashed form (000032019324000123) on input and normalises it internally.
Dashed form is used in all output.
CIK is zero-padded to 10 digits in most EDGAR API URLs
(/submissions/CIK0000320193.json). Archives URLs use unpadded CIK
(/Archives/edgar/data/320193/). edgarq handles padding automatically.
XBRL frame periods follow the EDGAR convention:
| Format | Meaning |
|---|---|
CY2024 |
Calendar year 2024 (annual). |
CY2024Q1 |
Calendar year 2024, Q1 (duration). |
CY2024Q1I |
Calendar year 2024, Q1, instant (point-in-time). |
The I suffix marks an instant value (e.g. total assets at quarter end) as
opposed to a duration value (e.g. revenue for the quarter).
ISO YYYY-MM-DD throughout. daily-index and bulk daily-feed enforce
business-day (Mon-Fri) validation; weekend dates are rejected with a clear error.
US federal holidays 404 because SEC does not publish on those dates.
edgarq maintains two distinct caches.
Location: ~/.cache/edgarq/tool-output/ (override: EDGARQ_CACHE_HOME).
SHA-256 keyed, TTL-based. Managed via edgarq cache.
--no-cache on any command bypasses this cache and fetches fresh data.
| Data type | TTL |
|---|---|
Filings (via filing, filing-section, attachments) |
Forever (immutable). |
| Submissions / company profile | 1 day. |
| Company facts (XBRL) | 1 day. |
| Search results (EFTS) | 1 day. |
| Monitor feed | 1 minute. |
| Atom feed | 5 minutes. |
| Daily index | 1 day. |
| Insider / 13F parsed filings | Forever (immutable per accession). |
Location: ~/.cache/edgarq/bulk/ (override: EDGARQ_BULK_HOME). Managed via
edgarq bulk. --refresh forces re-download even when the local copy is fresh.
| Archive kind | TTL |
|---|---|
submissions |
1 day (nightly refresh). |
companyfacts |
1 day (nightly refresh). |
financial-statements |
Forever (past quarters are immutable). |
form345 |
Forever (past quarters are immutable). |
daily-feed |
Forever (past days are immutable). |
Supported environment variables:
| Variable | Purpose |
|---|---|
EDGARQ_IDENTITY |
SEC User-Agent identity string (Name email@domain). |
EDGARQ_CONFIG_HOME |
Override config directory (default: ~/.config/edgarq/). |
EDGARQ_CACHE_HOME |
Override tool-output cache directory (default: ~/.cache/edgarq/tool-output/). |
EDGARQ_BULK_HOME |
Override bulk cache directory (default: ~/.cache/edgarq/bulk/). |
Supported config keys (stored in ~/.config/edgarq/config.toml):
| Key | Type | Default | Purpose |
|---|---|---|---|
identity |
string | — | SEC User-Agent identity. |
cache_dir |
string | — | Tool-output cache path override. |
bulk_dir |
string | — | Bulk cache path override. |
rate_limit |
float | 8.0 | Request rate cap (req/s; SEC ceiling is 10). |
Environment variables take precedence over config file values. Config is plain TOML; the identity value is stored in plaintext.
Install development dependencies:
uv sync --all-groupsRun the test suite:
uv run pytestRun checks locally:
uv run black --check .
uv run ruff format --check --diff .
uv run ruff check .
uv run pyright
uv run pytest -n autoRun the full project check, including Python checks and spelling:
uv run toxWhen adding or changing command metadata, update validation, adaptive help, and tests together. Then verify the relevant command against EDGAR with its help, minimal required parameters, and representative optional parameters.
edgarq is released under the MIT License. See LICENSE.