agentsclimarketplace

Alphameta watchlist

Skill intelliscale/alphameta-skills/skills/alphameta-watchlist

AlphaMeta is an IBKR (Interactive Brokers) trading tool providing real-time market data for stocks, options, futures, and crypto via a standardized REST API.

Install
npx -y skills add intelliscale/alphameta-skills --skill alphameta-watchlist

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Named grouping of symbols (stocks, options, futures) persisted locally via AlphaMeta. Read your watchlist groups, create new groups, add/remove symbols, delete groups. All data is stored locally — no remote state changes, no broker involvement. Supports full workflow: get symbols from a group → route to alphameta-market-data for batch quotes, or alphameta-portfolio for position checks. Triggers: "我的自选股", "自选股有哪些", "我关注的股票", "我的分组", "把 X 加到自选", "添加到自选", "创建分组", "删除自选", "删除分组", "自選股", "關注的股票", "分組", "把 X 加到自選", "新增至自選", "建立分組", "刪除自選", "刪除分組", "watchlist", "my watchlist", "favorited stocks", "watch groups", "add to watchlist", "remove from watchlist", "create group", "delete group", "rename group".

SKILL.md

11.0 KB, as published. Nobody here has run it

AlphaMeta Watchlist

Persistent named groups of securities, stored locally via AlphaMeta's quote group system. Think of it as bookmarks for symbols — stocks, options, futures, indices. Data lives in local diskcache, not on any broker server. No network required for CRUD; only live quote lookups need a running AlphaMeta service.

When to Use

  • "我的自选股有哪些?" / "Show me my watchlist" — list every group and its symbols
  • "我的 Tech 分组里有什么?" / "What's in my Tech group?" — filter by group name
  • "显示所有有实时报价的分组" / "Show me all groups with live quotes" — list groups, check live field
  • "把 NVDA 加入我的自选" / "Add NVDA to my watchlist" — create or append symbols to a group
  • "从自选里移除 AAPL" / "Remove AAPL from my watchlist" — delete a symbol from a group
  • "删除我的 test 分组" / "Delete my test group" — remove an entire group
  • "批量查看自选股行情" / "Watchlist batch check" — get symbols then route to alphameta-market-data or alphameta-portfolio

See the alphameta skill for server setup and command execution syntax.

Workflow

Reading

  1. Call qlist to get all groups.
  2. qlist returns {"groups": {"<name>": {"symbols": [...], "live": [...]}}}.
    • symbols: all symbols saved in the group
    • live: subset of symbols currently streaming live quotes
  3. Filter by group name (LLM-side) if user asks for a specific group.
  4. To batch-check prices, pass the symbols to alphameta-market-data:
    Extract symbols → curl POST /api/v1/execute {"cmd": "quote <symbols>"}
    

Writing (one-shot, no two-step protocol)

All mutations are local (diskcache). No remote side effects.

  • Describe what you are about to do in the user's language.
  • Execute immediately — no explicit confirmation gate needed.
  • Exception: for qdelete (irreversible), briefly confirm with the user before executing.
ActionCommandNotes
Create group + add symbolsqsave <group> <symbol...>If no symbols given, saves currently streaming quotes into the group
Add symbols to existing groupqadd <group> <symbol...>Creates group if it doesn't exist
Remove specific symbolsqremove <group> <symbol...>Supports glob patterns (qremove mygroup AAPL*)
Remove all symbols from groupqremove <group>Clears the group but keeps it
Delete entire groupqdelete <group...>Can delete multiple at once. Briefly confirm before executing.

Chained Workflows (common)

User asksFlow
"My watchlist stocks' gainers today"qlist → extract symbols → alphameta-market-data (batch quote)
"Are any of my watchlist options ITM?"qlist → extract symbols → alphameta-technical (greeks/IV)
"Check if these positions are in my portfolio"qlist → extract symbols → alphameta-portfolio (positions filter)
"Save my current quotes as a watchlist group"qsave <name> (no symbols → saves live quotes)

Common Rationalizations

RationalizationReality
"I'll just use the raw JSON output"The qlist response is already structured. Present it as a readable table — group name as header, symbols as a comma-separated list.
"I'll rephrase qlist as watchlist since it's what the user understands"Correct. The backend calls them "quote groups"; the skill layer should call them "watchlist groups". Translate terminology for the user.
"I need to run two-step confirmation for all mutations"Wrong. These are local writes — no broker state change. Only qdelete warrants a quick check.
"I'll hardcode qaddqsave mapping"qadd appends to an existing group (or creates if missing). qsave overwrites. Use qadd for "add to", qsave for "create new group".

Red Flags

  • Using qsave when user says "add" — qsave creates/replaces, qadd appends. GET IT RIGHT.
  • Calling qdelete without a brief confirmation — the group is gone permanently.
  • Forgetting to route symbols to the display skill — listing symbols without prices is only useful for inventory. If user asks "how are they doing", immediately chain to alphameta-market-data.
  • Group name collisions — if qadd target doesn't exist, it creates it. If user said "add to group X" and X doesn't exist, warn them it'll be created.
  • Treating client-{id} groups as user watchlists — these are auto-generated system snapshots. qadd/qremove edits will be overwritten. qdelete breaks startup auto-restore. Do not manage them manually.
  • Assuming global is the primary restore source — client-{id} snapshot takes priority on startup. global is only a fallback.

Output

Present watchlist data as markdown tables.

List All Groups

qlist → {"groups": {"tech": {"symbols": ["NVDA","AAPL","MSFT"], "live": ["NVDA","AAPL"]}, ...}}
GroupSymbolsLive
techNVDA, AAPL, MSFTNVDA ✓, AAPL ✓
hk-stocks0700.HK, 9988.HK

When live is non-empty, mark symbols that are actively streaming with a checkmark.

Single Group Detail

Group: techSymbols
NVDA✓ (live)
AAPL✓ (live)
MSFT

After Adding Symbols

qadd tech GOOGL → {"added": ["GOOGL"], "failed": []}

Added GOOGL to tech. ✓ Success. (optional chained query) → "Would you like to see the current price of GOOGL?"

After Removing Symbols

qremove tech AAPL → null (success)

Removed AAPL from tech.

No prior service login needed for CRUD. Watchlist data is stored locally in diskcache and is available even when IBKR is disconnected. Only the live quote routing step (alphameta-market-data) requires a connected service.

Command Index

ActionCommandExampleReturns
List all groupsqlist{"cmd": "qlist"}{"groups": {"name": {"symbols": [...], "live": [...]}}}
Filter groupsqlist <name...>{"cmd": "qlist tech hk-stocks"}Same shape, filtered
Create / replace groupqsave <name> <symbol...>{"cmd": "qsave tech NVDA AAPL"}{"added": [...], "failed": [...]}
Add to groupqadd <name> <symbol...>{"cmd": "qadd tech GOOGL"}{"added": [...], "failed": [...]}
Remove from groupqremove <name> <symbol...>{"cmd": "qremove tech AAPL"}null (success)
Delete group(s)qdelete <name...>{"cmd": "qdelete old-group"}null (success)

The gateway wraps responses as:

{"success": true, "result": <above>, "request_id": "...", "execution_time_ms": N}

Key Concepts

Local Storage

Watchlist groups are stored in AlphaMeta's diskcache under keys ("quotes", "<group_name>")set(<symbols>). This means:

  • Persistence: survives restarts
  • Speed: instantaneous mutations (no network round-trip)
  • No broker dependency: works even when IBKR is disconnected
  • No sharing: groups are local to this machine

Group Semantics

ConceptDetail
Group namesFree-form strings (avoid special characters)
SymbolsAny valid IBKR symbol: NVDA, AAPL260515P00200000, /ESM6, I:VIX
Empty groupsShow as (empty) in listings
Symbol casingCase-sensitive. AAPL and aapl are different.
live fieldSubset of symbols that are currently streaming real-time quotes

System Groups

Two group types are managed by the system, not created by the user:

client-{id} (e.g. client-0, client-2) — Auto-generated live quote snapshot

  • Created automatically by qsnapshot whenever quotes are added/removed (add, remove, oadd, align).
  • Stores full IBKR Contract objects (not plain symbols) — {"contracts": [...]}.
  • On startup, AlphaMeta restores from this snapshot first. Only if absent does it fall back to global group or built-in defaults (SPY, QQQ, AAPL + futures + indices).
  • Not a user watchlist. qadd/qremove edits are overwritten on the next quote change. Do not qdelete unless you intend to reset saved state.
  • Stored in diskcache under key ("quotes", f"client-{clientId}").

global — Shared default fallback group

  • Plain symbol-set group (set("AAPL", "MSFT")) created via qsave/qadd.
  • Loaded only when no client-{id} snapshot exists on startup.
  • Legacy fallback mechanism — still works but client-{id} takes priority.
Featureclient-{id}User groups
Created byqsnapshot (auto)qadd / qsave (manual)
Data format{"contracts": [Contract, ...]}Plain symbol strings
UpdatedEvery add/remove (auto overwrite)Only on manual edit
Restore priority1st (on startup)N/A (or global as 2nd fallback)

Relationship to Other Commands

The q* commands (qlist, qadd, qsave, qremove, qdelete) are the same system used by AlphaMeta's quote stream management. When you qsave or qadd, you're writing into the same quote-group namespace used by the live quote view. This means a watchlist group is also a "quote group" — it can be loaded into the live stream via qrestore.

Error Handling

SituationReply
Service not runningalphameta start to start the service
qlist returns empty groups"No watchlist groups yet. Create one with qadd <name> <symbols>."
qadd returns failed: [...]"Could not qualify: AAPL. Check symbol spelling."
qdelete on non-existent group"Group not found. Run qlist to see available groups."
qremove no matching symbols"No matching symbols found in that group. Use qlist <group> to check contents."
Permission error (403)"This command requires a PRO-tier API key. Set ALPHAMETA_API_KEY."
Other API errorSurface the error message verbatim.

Related Skills

  • "What's the current price of my watchlist?" → alphameta-market-data
  • "How are my watchlist options performing?" → alphameta-technical
  • "Are any watchlist symbols in my portfolio?" → alphameta-portfolio
  • "Set an alert if a watchlist symbol drops below X" → alphameta-predicate

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.