executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
sec-edgarNatural-language SEC filing intelligence — fetch, index, search, and analyze SEC EDGAR filings for any public company via conversation. Built on the PageIndex vectorless RAG methodology.
Independent GitHub snapshot · Automated classification · Original documentation governs
Ask any question about any public company's SEC filings and get precise, cited answers from raw filing text — across tickers, across years.
Activates when the user mentions:
When a user message triggers this skill, map it through this tree before acting:
USER MESSAGE
│
├─ "what do we have indexed" / "show me tracked tickers" / "dashboard"
│ → Suggest the dashboard: https://cis.zo.space/sec
│ → Or run: check_indexed.py --ticker ALL (show all)
│
├─ "run a health check" / "diagnostics" / "is it working"
│ → doctor.py
│
├─ "how much space" / "storage" / "how big is this"
│ → manifest.py --storage-stats
│
├─ "track" / "monitor" / "alert me" / "notify me"
│ → Register monitor rule + create automation (see Monitoring section)
│
├─ "set up" / "install" / "initialize" / "get started"
│ → Run: python3 Skills/sec-edgar/scripts/install.py
│
├─ Question about a specific company's financials / operations / risks
│ → GO TO: Ask a Question About a Company
│
└─ Fetch or check filings
→ GO TO: Fetch Workflow
Always check first. Never fetch blindly.
User: "Fetch Tesla's latest 10-K"
Agent:
→ check_indexed.py --ticker TSLA
→ if already indexed: tell user what's available, ask if they want it re-fetched
→ if not: proceed to fetch
If the user hasn't set up SEC EDGAR access yet, get the UA first:
Agent: "SEC EDGAR requires a name and email in the request header. What's your name and email? (Format: 'Your Name your@email.com')"
User: "Jing Xie jing@clarionintelligence.com"
Agent:
→ update config.json sec_user_agent = "Jing Xie jing@clarionintelligence.com"
→ proceed with fetch
Agent:
→ fetch.py --ticker TSLA --forms 10-K --max 2
→ index.py --auto (background, returns immediately)
→ tell user: "Downloading 2 TSLA 10-Ks. Indexing in background — I'll let you know when ready."
Agent:
→ check_indexing_status (poll until done)
→ when complete: report what was indexed
→ then: GO TO: Ask a Question workflow
| Form | What it is |
|---|---|
| 10-K | Annual report — Business, Risk Factors, MD&A, Financials |
| 10-Q | Quarterly report — Financials, MD&A, Risk Factors |
| 8-K | Current report — earnings, leadership, material events |
| DEF 14A | Proxy statement — exec comp, board, shareholder proposals |
| Form 3/4 | Insider ownership — who owns what, trading activity |
| S-1 | IPO registration — risk factors, use of proceeds |
| 20-F | Foreign company annual (non-US issuers) |
| 6-K | Foreign company current events |
| 13F | Institutional investment holdings (quarterly) |
| 13D/G | Beneficial ownership (5%+ holders) |
| 424B5 | Prospectus supplement |
| S-1/A, 10-Q/A | Amendments — stored and indexed independently |
Agent:
→ check_indexed.py --ticker TSLA
→ if not indexed: fetch + index first
→ if indexed: proceed to search
Agent:
→ search.py --query "risk factors" --tickers TSLA
→ returns ranked matches with doc_id, node_id, snippet, score
Agent:
→ get_document_section(doc_id, node_id) for each top result
→ present raw filing text with citation
Always cite:
According to Tesla's 2025 10-K (doc:
TSLA--10-K--20250128--000131860525000014, Item 1A Risk Factors, node 0008): "Our business is subject to risks including supply chain disruption, EV market adoption uncertainty, and regulatory compliance across multiple jurisdictions..."Source: TSLA--10-K--20250128--000131860525000014, node 0008
User: "Compare how Apple, Microsoft, and Google discuss AI in their 2025 10-Ks"
Agent:
→ ensure AAPL, MSFT, GOOGL latest 10-Ks are indexed
→ search.py --query "artificial intelligence AI" --tickers AAPL,MSFT,GOOGL
→ for each top match: get_document_section
→ synthesize with per-company citations
User: "Show me how Amazon's AWS segment revenue discussion evolved from 2022 to 2025"
Agent:
→ ensure AMZN 10-K filings from 2022, 2023, 2024, 2025 are indexed
→ search.py for each year individually
→ present side-by-side raw text showing evolution
| User is asking about | Primary SEC section |
|---|---|
| Risk factors | Item 1A (10-K / 10-Q) |
| Management discussion | Item 7 MD&A (10-K), Part I Item 2 (10-Q) |
| Revenue / segment breakdown | Item 8 footnotes, Item 7 MD&A |
| Earnings / quarterly results | 8-K Item 2.02 (results), 10-Q Part I Item 2 (MD&A) |
| Revenue guidance / forward-looking | 8-K, 10-Q MD&A |
| Segment / geography results | Item 8 segment footnotes |
| Executive compensation | DEF 14A, Item 11 (10-K) |
| Insider ownership / 10b5-1 plans | Form 3/4, Item 12 (10-K) |
| Share repurchases / buybacks | Item 5 (10-K / 10-Q) |
| Legal proceedings / lawsuits | Item 3 (10-K / 10-Q) |
| Debt and credit facilities | Item 8 footnotes, Item 7 liquidity |
| Related party transactions | Item 13 (10-K) |
| Acquisitions / mergers | Item 8 notes, Item 7 |
| Accounting policies | Item 8 footnote 1-2 |
| Goodwill and intangibles | Item 8 intangible asset footnotes |
| Institutional holdings | 13F (quarterly) |
| Beneficial ownership (5%+ holders) | 13D / 13G |
User: "Alert me when any of my tracked companies files an 8-K mentioning acquisition"
Agent:
→ config.py add_monitor_rule(
name="8-K acquisitions",
applies_to_forms=["8-K"],
keywords=["acquisition", "merger", "letter of intent"],
alert_channel="sms"
)
→ verify the rule is stored in sec/config.json
Agent:
→ create_automation(
title="SEC Filing Monitor",
rrule="WEEKLY",
instruction_file="Skills/sec-edgar/prompts/weekly_fetch.md",
delivery_method="sms"
)
→ confirm automation created with trigger time
The automation reads file sec/config.json for tracked tickers and monitor rules. It:
Check before fetch. Always check_indexed.py --ticker X first — avoids redundant downloads and respects SEC rate limits.
Summaries are navigation only. The system builds summaries to help locate relevant sections. Answers always come from full raw text, never from summaries.
Cite with doc_id + node_id. Every answer must include the source citation in format: (ticker: doc_id, section: node_id).
SEC rate limits are real. EDGAR allows 10 req/s. Scripts handle this with jitter and backoff. If rate-limited, wait 10 minutes before retrying.
Amendments are stored independently. 10-K/A is not a replacement for 10-K — both are kept, with is_latest_for_period flagged in the manifest.
Dashboard is read-only. The Zo Space dashboard at https://cis.zo.space/sec is for reading and monitoring. All actions (add ticker, change config, trigger fetch) go through chat or file edit.
Only suggest dashboard on "what do we have indexed" queries. Not on fetch, search, or analysis — those are chat-first workflows.
One skill, one job. Don't try to do financial analysis, trading, or portfolio management. Stay focused on SEC filing intelligence.
| Problem | What to do |
|---|---|
| Ticker not found | Verify the ticker symbol. Try searching on SEC EDGAR directly. |
| SEC rate limited | "SEC rate limited — I'll wait 10 minutes before retrying." |
| Filing not in index | Check check_indexed.py --ticker X. If not indexed, fetch it. |
| No search results | Try broader terms. Check the document overview to understand structure. |
| Indexing failed | Check file index.py output. Verify the HTML file exists and is valid. |
| LLM call failed | Retry once. If still failing, note the section will use raw text without summarization. |
All scripts run from /home/workspace with python3 Skills/sec-edgar/scripts/<script>.py.
| Script | What it does |
|---|---|
fetch.py --ticker TSLA --forms 10-K,10-Q --max 5 | Download filings. --skip-indexed skips already downloaded. |
index.py --auto | Index all unindexed HTML files in sec/index/. |
index.py --file <path> | Index a single file. |
check_indexed.py --ticker TSLA | What's indexed vs. available on SEC EDGAR. Use --all for all tickers. |
search.py --query "risk factors" --tickers TSLA,IBM | Keyword + LLM-reasoning search across indexed filings. |
manifest.py --ticker TSLA | Per-ticker manifest. --storage-stats shows total + per-ticker storage. |
config.py --add-ticker MSFT --add-rule "..." | Add tickers or monitor rules to config. |
| Health check: filesystem, config, storage, EDGAR reachability. | |
llm.py --verify-model | Verify MiniMax 2.7 is reachable via Zo. |
| First-time setup: creates sec/ dirs, sets config, runs smoke test. |
/home/workspace/sec/
index/
[TICKER]/
[TICKER].manifest.json ← source of truth per ticker
[TICKER]--[FORM]--[DATE]--[ACCESSION].html ← original HTML
[TICKER]--[FORM]--[DATE]--[ACCESSION].json ← PageIndex tree
[TICKER]--[FORM]--[DATE]--[ACCESSION].manifest.json ← per-filing sidecar
manifests/
global.json ← aggregated view (rebuilt on read)
cache/
company_tickers.json ← ticker→CIK (5-min TTL)
edgar_check.json ← last-known filing per ticker
logs/
fetch_YYYY-MM-DD.log
index_YYYY-MM-DD.log
config.json ← user prefs, tracked tickers, monitor rules
User: "Set up SEC intelligence"
Agent:
→ python3 Skills/sec-edgar/scripts/install.py
→ prompt for SEC User-Agent (name + email)
→ prompt for initial tickers to track
→ run smoke test (fetch one filing, index it, verify search works)
→ report setup complete with status