stock-terminal
Answer stock-terminal commands and market research questions with compact, sourced views of price, sentiment, SentiSense Score, news, filings, analyst ratings, earnings, and end-of-day options analytics. Use for open a ticker, compare stocks, daily brief, or smart-money screening. For an explicit build request, provides contracts, fixtures, and a staged guide for a local chat-and-canvas financial terminal. Data access is read-only: no trades, purchases, account mutations, or wallet access. Local app or artifact creation only when requested. Skill: stock-terminal Owner: thesentitrader Summary: Answer stock-terminal commands and market research questions with compact, sourced views of price, sentiment, SentiSense Score, news, filings, analyst ratings, earnings, and end-of-day options analytics. Use for open a ticker, compare stocks, daily brief, or smart-money screening. For an explicit build request, provides contracts, fixtures, and a staged guide for a
Rank
62
Safety
84
Downloads
3.4k
Updated
Oct 9, 2026
Version
2.1.0
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 3.4K downloads reported by the source. Last updated 10/9/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 9, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 9, 2026
- Adoption signal
- 3.4K downloadsadoption · observed Oct 9, 2026
- Latest release
- 2.1.0release · observed Oct 1, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s171aan38r2dn7ew5hddyscf1983x1h9:stock-terminal- Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.
- Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-thesentitrader-stock-terminal/snapshot"
Documentation
CLAWHUB
154,094 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
---
name: stock-terminal
description: "Answer stock-terminal commands and market research questions with compact, sourced views of price, sentiment, SentiSense Score, news, filings, analyst ratings, earnings, and end-of-day options analytics. Use for open a ticker, compare stocks, daily brief, or smart-money screening. For an explicit build request, provides contracts, fixtures, and a staged guide for a local chat-and-canvas financial terminal. Data access is read-only: no trades, purchases, account mutations, or wallet access. Local app or artifact creation only when requested."
homepage: https://sentisense.ai
requires:
env:
- SENTISENSE_API_KEY
primaryEnv: SENTISENSE_API_KEY
metadata:
openclaw:
requires:
env:
- SENTISENSE_API_KEY
primaryEnv: SENTISENSE_API_KEY
envVars:
- name: SENTISENSE_API_KEY
required: true
description: "SentiSense API key. Get one free at https://app.sentisense.ai/get-api-key. Used only to authenticate read-only data calls; no write or trading scope."
---
# Stock Terminal - SentiSense
Answer a market question with one compact, sourced screen, or help the user build a local chat-and-canvas terminal.
For an ordinary research turn, use the commands below. No app, SDK, or sibling skill is required.
For an explicit build request, follow [Build in an afternoon](references/build-in-an-afternoon.md).
The build sequence has a four-hour target, not a verified completion-time promise.
This is the 2.0.0 layout and host contract. Existing command names remain supported.
Builder references replace the old inline harness and arbitrary JSON artifact format.
A 2.0 host accepts complete XML, validates it to the canvas AST, then renders native components.
An ordinary chat agent can still answer with Markdown and does not need that host protocol.
## Choose the path and answer shape
- Answer a question: stay in this body; fetch only the evidence needed by the request.
- Build an application: read the linked build sequence, then only the reference needed for each stage.
- A quote, definition, clarification, or explicit short answer gets text.
- `open`, `compare`, and `daily brief` get a dense screen unless the user asks for prose.
- Choose text or canvas before visible output; ambiguous intent defaults to text.
- Produce one final answer shape. Do not repeat the screen's narrative into a second chat answer.
- Explain conflicting signals without manufacturing a single winner or investment recommendation.
## Setup, identity, and scope
**Base URL:** `https://app.sentisense.ai`.
**Full API reference:** https://sentisense.ai/skill.md.
Authenticate requests with `X-SentiSense-API-Key`, read from `SENTISENSE_API_KEY` in the environment.
Get a free key at https://app.sentisense.ai/get-api-key. Never print it or put it in URLs, artifacts, or renderer code.
Any HTTPS client works; no SDK is required.
The permissions below cover answering market-data turns. An explicit application-building req_meta.json
{
"ownerId": "kn71ca3nrt3w6w0v3nhv3c4tan82x1ym",
"slug": "stock-terminal",
"version": "2.1.0",
"publishedAt": 1790880463426
}references/app-shell.md
# App shell and trust boundary
Keep credentials, HTTP, provider calls, and persistence in Electron's main process.
The renderer receives validated view data and six host events, not a general-purpose network or filesystem bridge.
This is an implementation recipe, not a prebuilt application.
## Small source layout
```text
app/
package.json
package-lock.json
main/index.mjs
main/preload.cjs
main/operations.mjs
main/provider.mjs
main/turns.mjs
main/snapshots.mjs
main/history.mjs
renderer/index.html
renderer/main.jsx
renderer/App.jsx
renderer/blocks.jsx
renderer/theme.css
contracts/ copy from this reference kit
runtime/ copy the shipped neutral modules
```
Use Vite for the React renderer, with explicit input and output paths and a relative production asset base.
Install Electron and Vite as development dependencies, React and ReactDOM as runtime dependencies;
use `npm install --save-exact` or `--save-dev --save-exact` as appropriate and retain the lockfile.
Configure `dev:renderer`, `dev:desktop`, `build:renderer`, `start`, and `test` scripts in the new app.
The production `start` must load the renderer's built local HTML without depending on a development server.
Launch Electron from a terminal that already has the authorized environment available:
```bash
npm run dev:renderer
# In another terminal inheriting SENTISENSE_API_KEY and the chosen provider environment:
npm run dev:desktop
```
A desktop icon launch may not inherit shell variables. Do not claim otherwise or paste keys into renderer configuration.
For the first local build, document terminal launch and a missing-key setup state.
A later packaged app can add OS credential storage as a separate deliberate implementation.
## BrowserWindow and preload
Use an absolute preload path computed from the main module's directory.
Set `contextIsolation: true`, `nodeIntegration: false`, `sandbox: true`, and `webSecurity: true`.
The renderer is local content; a development HTTP URL must be a fixed loopback origin controlled by the app.
Do not accept a model-supplied URL as the window location.
Deny new windows and navigation away from the fixed renderer location.
Open a validated public source URL in the system browser through a separate host allowlist method.
Never load a remote article into the privileged application window.
Expose a small bridge, shaped like this CommonJS preload:
```js
const { contextBridge, ipcRenderer } = require('electron');
contextBridge.exposeInMainWorld('terminal', {
startTurn: input => ipcRenderer.invoke('terminal:start-turn', input),
stopTurn: turnId => ipcRenderer.invoke('terminal:stop-turn', { turnId }),
readView: input => ipcRenderer.invoke('terminal:read-view', input),
refreshSnapshot: ({ threadId, snapshotId }) => ipcRenderer.invoke('terminal:refresh', { threadId, snapshotId }),
listThreads: () => ipcRenderer.invoke('terminal:list-threads'),
openThread: threadId => ipcRenderer.invoke('references/blocks-and-rendering.md
# Blocks and rendering
Implement these ten renderers for the afternoon core. The host maps validated AST nodes to native components. It never uses dynamic HTML, runtime component names, or model-selected JavaScript.
Read [canvas grammar](canvas-grammar.md) for parsing and data modes. Read [commands and data](commands-and-data.md) for the snapshot producer behind each `dataRef`.
## Shared component contract
Every renderer accepts `{ id, width, props }`; `narrative` and `callout` also accept `content`. A renderer receives a snapshot resolver from the host, not network credentials and not a general fetch function.
The host passes `snapshot.data` to the adapter only after removing the transport envelope. A bare array and direct object keep their documented shape. A preview envelope contributes its `data` member. A documents envelope contributes its `documents` array. This normalized API payload is adapter input. The adapter's projected `{columns, rows}` output is a separate public render model and must not be passed back through API field paths.
For a live block:
1. Resolve `props.dataRef` from the current surface snapshot store.
2. Confirm that the snapshot operation and normalized inputs match the slot expected by the component.
3. Render its explicit status before reading its value.
4. Show source date and fetch time separately when present.
5. Add a source link only when the normalized snapshot supplies a validated HTTP or HTTPS URL.
Snapshot metadata such as `status`, `sourceUrl`, source time, and fetch time belongs to the host snapshot store. It is never trusted from canvas XML. Run `validateLiveBlockBinding` after resolving an effective refresh binding and before projecting any value. Without a refresh binding, the snapshot id must equal `props.dataRef`. With one, pass the trusted effective snapshot id explicitly.
For an inline synthetic block, show a persistent `TEST DATA` label and its `asOf`. Never remove that label through CSS or a compact layout.
## Core catalog
| Type | Required props or content | Renderer job | Typical snapshot |
|---|---|---|---|
| `section-header` | `title`; optional `subtitle` | Introduce one bounded section | None |
| `narrative` | nonempty text content; optional `title` | Dated authored explanation | None |
| `callout` | `tone`, nonempty text; optional `title` | Emphasize neutral, bullish, bearish, or warning context | None |
| `table` | live `dataRef`, or synthetic `columns`, `rows`, `asOf` | Bounded generic rows with aligned numeric cells | Screener, comparison, disclosures |
| `metric-card` | `label`; live `dataRef` plus `field`, or synthetic `value` plus `asOf` | One labeled scalar | Quote or normalized metric |
| `price-chart` | `ticker`, `range`; live `dataRef`, or synthetic `points` plus `asOf` | One price series | Normalized chart points |
| `sentiment` | `ticker`; live `dataRef`, or synthetic `value` plus `asOf` | Polarity, Score, attention when present | Normalized metric snapshot |
| `news-feereferences/build-in-an-afternoon.md
# Build a local chat-and-canvas terminal Build one useful local research app: chat thread on the left, a validated financial canvas on the right. The intended four-hour sequence is a planning target, not a measured delivery guarantee. Use the installed skill tree as the specification. No separate example product or private repository is needed. Do not spend the afternoon reproducing every possible data widget. ## Deliverable and prerequisites Deliver a runnable Electron/React app with home ticker entry, saved threads, one model provider, the ten core canvas blocks, every public command in the manifest, manual data refresh, and Stop. A screen explanation must read the same host snapshots the widgets display. Keep an evidence record of commands, test results, screenshots, and limitations. Use a supported local Node runtime with ESM, npm, a desktop session, and user-authorized dependency installation. Pin application dependencies with `--save-exact` and retain the generated lockfile. The [canvas validator](runtime/canvas-validator.mjs), [stream reducer](runtime/stream-reducer.mjs), [request cache helper](runtime/request-cache.mjs), and [snapshot adapters](runtime/snapshot-adapters.mjs) use standard JavaScript globals only. The [file inventory](inventory.json) lists reference files and checksums. Their installation does not install Electron, React, a provider client, or a JSON Schema test library. The canvas validator is a strict subset parser; use its supported grammar rather than adding an XML package implicitly. Live data needs `SENTISENSE_API_KEY` in the main process environment. A provider turn needs the user's chosen provider connection in that process as well. Missing credentials must produce a setup state. Do not invent market data or prompt for a secret in chat. The XML fixtures can run without any key and must remain labeled synthetic. ## 0:00-0:35: shell and first thread Read [app-shell.md](app-shell.md), scaffold the app, and prove the renderer cannot read Node or credentials. Use one home input. A ticker navigates to its compact view; a research question creates a thread. Render a left conversation pane and right artifact pane with a saved-thread rail. Wire typed IPC methods and a closeable per-turn subscription before adding a model. Load [stock-snapshot.xml](fixtures/stock-snapshot.xml) through the validator as an explicit fixture mode. Checkpoint: a running desktop app shows two panes and a synthetic dated screen, with no secret in renderer assets. Do not begin with portfolios, brokerage setup, billing, a plugin manager, or four provider adapters. ## 0:35-1:15: one shared data read model Read [commands-and-data.md](commands-and-data.md) and load [commands.json](contracts/commands.json). Register only manifest operations, including the three host-local tools `resolve_security`, `read_screen`, and `render_canvas`; do not register them a second time. Name resolution is a data tool wrapping the documented entity search, not a ti
AionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/thesentitrader/skills/stock-terminal",
"sourceUrl": "https://clawhub.ai/thesentitrader/skills/stock-terminal",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T08:19:45.274Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-thesentitrader-stock-terminal/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-thesentitrader-stock-terminal/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-09T08:19:45.274Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "3.4K downloads",
"href": "https://clawhub.ai/thesentitrader/stock-terminal",
"sourceUrl": "https://clawhub.ai/thesentitrader/stock-terminal",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T08:19:45.274Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "2.1.0",
"href": "https://clawhub.ai/thesentitrader/stock-terminal",
"sourceUrl": "https://clawhub.ai/thesentitrader/stock-terminal",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-10-01T18:47:43.426Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-thesentitrader-stock-terminal/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-thesentitrader-stock-terminal/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 2.1.0",
"description": "Adds the preview contract to the command manifest, a paging rule and two display fields, and labels free-tier previews as partial slices.",
"href": "https://clawhub.ai/thesentitrader/stock-terminal",
"sourceUrl": "https://clawhub.ai/thesentitrader/stock-terminal",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-10-01T18:47:43.426Z",
"isPublic": true
}
]
}Record generated Oct 9, 2026.
