AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL unreviewed MIT Self-run

Stocks Analysis

skill-sentisenseapp-skills-stocks-analysis · by SentiSenseApp

US stocks analysis by an adversarial investment committee. Legendary-investor personas independently research a thesis, attack each other's cases against a shared evidence ledger (sentiment, smart money, SEC fundamentals), and reconcile into a verdict with recorded dissents. Structured rubrics keep every number sourced, on any model. Includes five quick data workflows. Read-only. No trading, no p…

No reviews yet
0 installs
30 views
0.0% view→install

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

⚠ Flagged

1 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.

View the full security report →

Reliability & compatibility

Not yet reviewed
0 installs to date
no reviews yet
2mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

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 →
Are you the author of Stocks Analysis? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

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:

  1. 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.
  2. 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"

  1. GET /api/v1/stocks/price?ticker={T} for price + day change
  2. GET /api/v2/metrics/entity/{T}/metric/sentiment for the 7-day sentiment trend
  3. GET /api/v1/insider/trades/{T}?lookbackDays=90 for insider activity
  4. GET /api/v1/analyst/{T}/consensus for the target band
  5. GET /api/v1/insights/stock/{T} for AI insights (take the first item for the headline; check its generatedAt and 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?"

  1. GET /api/v1/insider/cluster-buys?lookbackDays=7
  2. GET /api/v1/politicians/activity?lookbackDays=7 (filter to PURCHASE)
  3. GET /api/v1/analyst/activity?lookbackDays=7 (filter client-side to actionType=="UPGRADE"; there is no server-side types= 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"

  1. GET /api/v1/stocks/popular for candidates
  2. Per ticker: GET /api/v1/stocks/chart?ticker={T}&timeframe=1M (intraday bars, not daily closes; for a 7-day change filter to bars with timestamp >= now-7d, compare first vs last)
  3. 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 via metricValue.value.value, a polarity in [-1,1]).
  4. Same scale before ranking. priceChangePct is a percentage; sentimentChange is 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"

  1. 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 to periodLabel from step 5 for timing framing
  2. GET /api/v1/stocks/{T}/profile for sector context
  3. GET /api/v2/metrics/entity/{T}/metric/sentiment?startTime={now-30d epoch ms}&endTime={now epoch ms} for the 30-day trend
  4. GET /api/v1/insider/trades/{T}?lookbackDays=60
  5. GET /api/v1/analyst/{T}/estimates for the EPS band (data.estimates[0], plus data.surprises[] history; no revenue figure, no revision history)
  6. 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"

  1. GET /api/v2/market-mood. The composite is nested under market (market.currentScore, market.phase, market.weeklyChange), NOT at the root. sectors is a string-keyed dict with overlapping GICS labels (Technology vs Information Technology, Healthcare vs Health Care); dedupe by keeping the higher-scoring variant before ranking.
  2. For sectors with weeklyChange > +5 or `: "" 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.

Versions

  • v0.1.0 Imported from the upstream source.