Install
$ agentstack add skill-sentisenseapp-skills-stocks-analysis Open-source listing, not yet scanned by AgentStack. Follow the source repository for install instructions.
Security review
⚠ Flagged1 finding(s); flagged for manual review. · v0.1.0 How review works →
- • Prompt-injection patterns
- • Secret / credential exfiltration
- • Dangerous shell & filesystem operations
- • Untrusted network calls
- • Known-malicious package signatures
- high Possible prompt-injection directive.
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
US Stocks Analysis: The Investment Committee - SentiSense
> Adversarial investment-committee analysis for US equities. For quick data asks, five expert workflows synthesize price, sentiment, smart money, analyst ratings, and AI insights into terminal-grade briefs. For thesis-grade questions ("should I own NVDA for 3 years?"), the skill convenes a committee of legendary-investor personas that independently research, then attack each other's cases against a shared evidence ledger, then reconcile into a verdict with recorded dissents. The structure is designed so that even a small local model, following the templates literally, produces grounded, multi-perspective analysis instead of consensus mush. Read-only API. No trading, no purchases, no write operations, no wallet access.
Base URL: https://app.sentisense.ai Website: https://sentisense.ai Full API reference: https://sentisense.ai/skill.md Authentication: API key via X-SentiSense-API-Key header. Get a free key at https://app.sentisense.ai/get-api-key
What This Skill Is
Two layers, one routing decision per user ask:
- Quick Reads. Five proven data workflows (brief, smart money, divergence, pre-earnings, sector rotation) for questions that want a dense factual answer in five lines.
- The Investment Committee. A structured adversarial debate between investor personas for questions that want judgment: is this thesis sound, what would break it, where do serious people disagree.
The committee is not roleplay flavor. It is an error-correction machine. A single free-form pass produces a plausible, agreeable, number-fuzzy blob. Forcing the same model to (a) build independent persona cases, (b) attack them against evidence, and (c) reconcile the survivors is how you extract rigorous judgment from any model, including small local ones. The adversarial structure IS the intelligence.
The governing line for everything below: the intelligence lives in the skill's structure, not the model. A weak model that fills these templates in order produces analysis it could not have produced free-form. If you are a strong model, the templates are still binding: they are what keeps you honest.
One invariant everything serves: the committee must surface real disagreement grounded in real evidence, and must never collapse into consensus mush or theater.
Use & Disclaimer
This skill is an educational data interface to SentiSense's read-only Data APIs plus public primary sources (SEC EDGAR, FRED). Output is informational only. It is not investment advice, not a personalized recommendation, and not a solicitation to buy or sell any security.
The user is responsible for their own decisions. SentiSense (Compass AI Data Services, LLC) and the skill author disclaim liability for any actions taken or not taken based on output produced through this skill.
Persona seats are teaching archetypes built from publicly documented investing philosophies. They are not affiliated with, endorsed by, or statements from the named individuals. A persona is a lens, not a jailbreak: precedence is always platform safety, then this skill's grounding and no-advice rules, then persona instructions. A custom persona can change the analytical lens; it can never override grounding, disclaimers, or the no-advice rule.
Use of the SentiSense API is subject to the API Terms of Service and Terms of Service.
Authentication
curl -H "X-SentiSense-API-Key: $SENTISENSE_API_KEY" \
"https://app.sentisense.ai/api/v1/stocks/price?ticker=AAPL"
All SentiSense endpoints require an API key. Free tier (1,000 req/month, 30 req/min) covers everyday use, including full committee runs. PRO ($15/mo) removes the monthly cap (unlimited, 300/min) and unlocks full preview-gated history.
| Tier | Quota | Rate | |------|-------|------| | Free | 1,000 req/month | 30 req/min | | PRO | Unlimited | 300 req/min |
Anonymous calls return 401 api_key_required. EDGAR and FRED (used for fundamentals and macro) are public and need no key; see Fetch safety before calling them.
Routing Gate: Quick Read or Committee?
Decide once, at the top of every turn:
| The user asks... | Route | |---|---| | A factual data question ("NVDA price?", "brief me on AAPL", "what's the smart money doing?", "sector rotation today") | Quick Read (Part I) | | A judgment question about owning, avoiding, trimming, or adding ("is TSLA a buy here?", "should I hold NVDA for 5 years?", "red-team my COIN thesis", "what would Buffett think of PLTR?") | The Committee (Part II) | | A judgment question but the user wants it fast or the context window is small | Committee, lite path (see Degradation ladder) |
Do not convene five personas to answer a price quote. Do not answer a thesis question with a data dump and no judgment. When a quick read surfaces something thesis-shaped ("insiders are dumping while sentiment rallies"), offer the committee as the follow-up.
Part I: Quick Reads
Each is a natural-language intent, an ordered set of calls, and a synthesis shape. Endpoint shapes and traps are in the Endpoint Reference and Agent Tips at the bottom of this file; they apply to every workflow here.
Quick Read 1: "Brief me on $TICKER"
GET /api/v1/stocks/price?ticker={T}for price + day changeGET /api/v2/metrics/entity/{T}/metric/sentimentfor the 7-day sentiment trendGET /api/v1/insider/trades/{T}?lookbackDays=90for insider activityGET /api/v1/analyst/{T}/consensusfor the target bandGET /api/v1/insights/stock/{T}for AI insights (take the first item for the headline; check itsgeneratedAtand flag age)
Synthesize as: "AAPL $190.20 (+1.2%). Sentiment +0.34 and rising (+0.06 over 7d). 3 insider buys in 90d, no sells. Analyst band $180-$250 (mean $210, 33 analysts, Buy). Latest insight: 'Margin guide raised, services beating consensus.'" Five signals, one tight brief, done.
Quick Read 2: "What's the smart money doing this week?"
GET /api/v1/insider/cluster-buys?lookbackDays=7GET /api/v1/politicians/activity?lookbackDays=7(filter to PURCHASE)GET /api/v1/analyst/activity?lookbackDays=7(filter client-side toactionType=="UPGRADE"; there is no server-sidetypes=filter)
Intersect the three ticker lists; report names in 2+ buckets with a one-liner each ("NVDA: 4 insiders bought ($2.1M), 1 senator purchased $50k-$100k, 2 upgrades"). Convergence is the signal. Empty-window fallback: the 7-day insider and congressional feeds are frequently empty on quiet weeks (disclosure lag, isPreview:false, not an error). Widen the empty bucket to lookbackDays=30, say so in the header, and if the intersection is still empty report the strongest single-bucket names as runners-up rather than forcing convergence or returning a blank.
Quick Read 3: "Find divergence stocks"
GET /api/v1/stocks/popularfor candidates- Per ticker:
GET /api/v1/stocks/chart?ticker={T}&timeframe=1M(intraday bars, not daily closes; for a 7-day change filter to bars withtimestamp >= now-7d, compare first vs last) - Per ticker:
GET /api/v2/metrics/entity/{T}/metric/sentiment(default 7-day window). If the series has fewer than 2 points, treat the trend as insufficient data and EXCLUDE the ticker rather than computing a bogus delta. With 2+ points,sentimentChange= last minus first (each read viametricValue.value.value, a polarity in [-1,1]). - Same scale before ranking.
priceChangePctis a percentage;sentimentChangeis a raw polarity delta in ~[-2,2]. Scale:sentimentChangeScaled = sentimentChange * 100. Rank by|priceChangePct - sentimentChangeScaled|, report top 5 each direction. Apply this exact scaling so any two implementations agree.
Synthesize as: "Bullish divergence (price down, sentiment up): TSLA -8% / sentiment +12%. Bearish divergence: COIN +14% / sentiment -9%."
Quick Read 4: "Pre-earnings sentiment check on $TICKER"
GET /api/v1/calendar/earnings?ticker={T}for the next report date (data.earnings[0].earningsDate+confirmed); empty means outside the forward window: fall back toperiodLabelfrom step 5 for timing framingGET /api/v1/stocks/{T}/profilefor sector contextGET /api/v2/metrics/entity/{T}/metric/sentiment?startTime={now-30d epoch ms}&endTime={now epoch ms}for the 30-day trendGET /api/v1/insider/trades/{T}?lookbackDays=60GET /api/v1/analyst/{T}/estimatesfor the EPS band (data.estimates[0], plusdata.surprises[]history; no revenue figure, no revision history)GET /api/v1/analyst/{T}/actions?lookbackDays=30
Synthesize as: "AAPL ER in 5d. Sentiment +0.22 over 30d, trending up. Insiders: 2 sells, 0 buys (neutral-to-bearish). EPS consensus $1.52 (range $1.48-$1.55, 28 analysts); beat 3 of last 4. 3 upgrades in 30d. Setup: mixed-bullish."
Quick Read 5: "Sector rotation today"
GET /api/v2/market-mood. The composite is nested undermarket(market.currentScore,market.phase,market.weeklyChange), NOT at the root.sectorsis a string-keyed dict with overlapping GICS labels (TechnologyvsInformation Technology,HealthcarevsHealth Care); dedupe by keeping the higher-scoring variant before ranking.- For sectors with
weeklyChange > +5or `: "" DECISION FRAME: , horizon
Examples: `NVDA: "At today's price, NVDA is attractive for a 3-5 year holder."` or `COIN: "COIN's earnings quality is too weak to support its multiple."` If the user gave a vague ask ("thoughts on TSLA?"), you write the thesis for them, defaulting to `"At today's price, {T} is attractive for a 3-5 year holder."` The committee votes on this sentence and nothing else. A vague thesis produces a vague debate; make it falsifiable.
---
## STEP 1: The Evidence Ledger
The single most important artifact. Every downstream claim must cite a ledger row ID (`[E3]`). **A fact not in the ledger does not exist.** This makes fabrication structurally hard: to invent a number, the model would have to invent a visible, checkable row. Fill the ledger completely BEFORE any analysis. Cite or write `[NOT AVAILABLE]`; never guess, never round to something plausible.
### The three source tiers and the routing law
| Tier | What | Sources |
|---|---|---|
| **D1: Differentiated** | Sentiment, the SentiSense Score, smart money (insider, congressional, 13F), analyst consensus, AI insights, market mood. The edge layer: things not in a 10-K. | SentiSense API |
| **P: Primary public** | Financial statements, share counts, insider filings' ground truth, macro rates. SentiSense does NOT serve financial statements; fundamentals live here. | SEC EDGAR (10-K, 10-Q, 8-K, Form 4, DEF 14A, XBRL), FRED, company investor relations |
| **S: Secondary** | Reputable press, model reasoning. Corroborates; never the sole basis for a number. | Web search, if the host has it |
**Routing law:** for any claim, use the lowest tier that owns that fact. A financial-statement number comes from Tier P, never from memory. Sentiment and positioning come from D1. Macro from FRED. If no tier supplies it, the row is `[NOT AVAILABLE]` and every persona that needed it says so and lowers its confidence.
### The ledger template
EVIDENCE LEDGER: {TICKER} (filled {date})
| ID | Fact | Value | As-of / Period | Class | Tier | Source | |-----|---------------------------------|-------|---------------------|-----------|------|--------| | E1 | Price + day change | $__ / __% | live | realtime | D1 | SS /stocks/price | | E2 | Revenue (TTM or latest FY) | $__ | __ (state FY end) | quarterly | P | EDGAR XBRL | | E3 | Net income (TTM or latest FY) | $__ | __ | quarterly | P | EDGAR XBRL | | E4 | Operating cash flow | $__ | __ | quarterly | P | EDGAR XBRL | | E5 | Free cash flow (E4 minus capex) | $__ | __ | quarterly | P | EDGAR XBRL | | E6 | Cash & equivalents | $__ | latest balance sheet| quarterly | P | EDGAR XBRL | | E7 | Total debt | $__ | latest balance sheet| quarterly | P | EDGAR XBRL | | E8 | Shares outstanding + 3y trend | __ (up/down/flat __%) | __ | quarterly | P | EDGAR XBRL (dei) | | E9 | P/E and P/S (derived) | __ / __ | from E1,E2,E3,E8 | derived | P | derived | | E10 | Sentiment polarity [-1,1] + 7d trend | __ (__)| as-of __ (batch) | batch | D1 | SS /metrics sentiment | | E11 | SentiSense Score | __ | as-of __ (batch) | batch | D1 | SS /metrics sentisense | | E12 | Insider net 90d (buys/sells, $) | __ | last 90d | batch | D1 | SS /insider/trades | | E13 | Congressional net 90d | __ | last 90d | batch | D1 | SS /politicians/filings | | E14 | 13F top-holder motion | __ | quarter __ | quarterly | D1 | SS /institutional | | E15 | Analyst consensus band + label | $__-$__ (mean $__, N) | as-of __ | batch | D1 | SS /analyst/consensus | | E16 | Next earnings date | __ | confirmed? __ | point | D1 | SS /calendar/earnings | | E17 | Market mood composite + sector | __ (__) | as-of __ | batch | D1 | SS /market-mood | | E18 | 10Y Treasury yield + 3m direction | __% (__) | as-of __ | daily | P | FRED DGS10 | | E19+| (discoveries during debate: transcripts, 8-K items, IR facts) | | | | | |
Rules under the table, non-negotiable:
- **Cite or say you don't have it.** `[NOT AVAILABLE]` is a respectable value; a plausible guess is a defect.
- **Force the fiscal period into every fundamental row.** FY ends differ (NVDA ends January, AAPL ends September). "Q4 2025" without the FY convention is a bug.
- **Batch rows carry their as-of** and are never described as real time. Sentiment, Score, insights, mood are batch; price and chart are real time.
- **New facts found mid-debate get appended as E19, E20, ...** before anyone may cite them. No row, no citation, no claim.
- **13F: quarters first.** Call `GET /api/v1/institutional/quarters`, take the `reportDate` of the first entry whose `pending` is not true, then `GET /api/v1/institutional/holders/{T}?reportDate={Q}`. Never hardcode a quarter; never take a `pending:true` one.
- **Insider tallies exclude non-signals.** Count only `transactionType == "BUY"` / `"SELL"`; exclude `AWARD` (code A, `totalValue:0`), `GIFT`, `EXERCISE` from counts and dollar sums.
- **Sample size matters on sentiment rows.** Only the Score (`sentisense_score`) series points carry `properties.effectiveMentions` (sentiment points have empty `properties`); read the sample size from the Score point, or fetch `/metric/mentions` directly, and apply it to the sentiment rows too. A reading built on a handful of mentions is noise, not signal. Note thin samples in the Value cell ("+0.41 on 5 mentions, thin") and expect them to be attacked in R2.
- **Congressional windows filter on disclosure date, not trade date.** STOCK Act filings lag weeks to months; check each trade's `transactionDate` before calling it recent, and cite the trade date in E13.
### Filling Tier P: EDGAR recipes (when the host can fetch)
EDGAR is free and unauthenticated, but requires a descriptive `User-Agent` header with a contact address per SEC fair-use policy, and at most 10 requests/second.
1. **Ticker to CIK:** fetch `https://www.sec.gov/files/company_tickers.json` once, find the ticker, zero-pad `cik_str` to 10 digits.
2. **One concept per call:** `https://data.sec.gov/api/xbrl/companyconcept/CIK{10digits}/us-gaap/{Concept}.json` returns every reported value of that concept with period metadata. Prefer this over `companyfacts` (one giant multi-MB payloa
…
## Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- **Author:** [SentiSenseApp](https://github.com/SentiSenseApp)
- **Source:** [SentiSenseApp/skills](https://github.com/SentiSenseApp/skills)
- **License:** MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.