본문으로 건너뛰기
cccskills
무료GitHub에 공개

monitor

Conviction-trigger surveillance via Quartr keyword alerts — parse every active thesis's Conviction Triggers for named observables, propose keyword alerts scoped to the Vault Active watchlist (or market-wide for macro observables), create them ONLY on explicit user confirmation, and reconcile the alert set against the book as theses open/close. Use when user says "monitor", "set up alerts", "keyword alerts", "watch for X", or "reconcile alerts".

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

실행 점수 미검증

설치 방법 보기

포함된 파일(1)

  • SKILL.md7.7 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Operationalises [G-13]: every thesis names the datapoint that would confirm or kill it first — this skill puts a standing tripwire on that datapoint in the primary-source stream. Alerts live in the Quartr app (that is where they fire — there is NO vault-side push); the loop is: alert fires in Quartr → user inspects → /transcript TICKER --event <id> or /ingest the hit → normal vault propagation. This skill's job is keeping the alert set faithful to the book: proposing alerts from trigger language, creating them only with consent, and pruning them when theses close.

Account-state discipline (the skill's defining constraint): create_keyword / update_keyword / delete_keyword mutate the user's Quartr account — Tier-3-adjacent territory. Every mutation is proposed in a table and executed only after explicit user confirmation in an interactive session. In a non-interactive/headless run, mutations are NEVER executed: the proposal table goes into the report and the run ends there. No exceptions, including "obviously good" alerts.

Arguments

  • /monitor — full reconcile: parse triggers, diff against live alerts, propose creates + deletes
  • /monitor --list — read-only: current alerts vs current trigger set, with provenance
  • /monitor --prune — deletions only (closed/downgraded theses, retired triggers)
  • /monitor "<term>" TICKER — single ad-hoc proposal (e.g. a /sweep finding worth a standing alert)

Step 0: Pre-flight

  1. Lock: vault-wide per _shared/preflight.md Procedure 1, timeout 5 min (writes only .data/quartr_keywords.json; reads theses).
  2. Quartr probe (hard): per _shared/quartr.md §1 load list_keywords,create_keyword,update_keyword,delete_keyword,list_watchlists. Unavailable → abort.
  3. State: read .data/quartr_watchlist.json (watchlistId — alerts scope to it) and .data/quartr_keywords.json (the provenance registry, schema below; absent → empty). Watchlist state missing → abort with run /event-sweep --setup first (market-wide-only alerts without a watchlist scope are a noise machine).
  4. Mental models: skipped — mechanical extraction + scoping judgement, no investment conclusions (load-tiering).

Registry schema (.data/quartr_keywords.json) — the vault-side memory of WHY each alert exists:

{"<quartr keyword id>": {"name": "<term>", "ticker": "TICKER", "trigger": "<the →HIGH/LOW/CLOSE clause it watches, first ~80 chars>",
  "scope": "watchlist|all", "documentTypes": ["transcript","report"], "created": "YYYY-MM-DD"}}

Step 1: Extract observables from Conviction Triggers

Per active thesis, read ## Conviction Triggers (targeted section read). From each → HIGH/LOW/CLOSE if clause, extract candidate keywords that satisfy ALL of:

  • Specific: a named product, technology, program, metric name, customer relationship, or coined term (CoWoS allocation, MLPerf Training, Tomahawk Ultra, capacity auction, 18A Clearwater Forest) — never generic vocabulary (revenue, margin, guidance, competition, China) whose alert would fire on half the corpus.
  • 3-40 characters (API constraint) — compress or split longer observables; drop what cannot be compressed without losing specificity.
  • Utterable: something a management or analyst would actually SAY on the record. A numeric threshold (capex below $20B) is not utterable — extract its subject (capex) only if paired with a specific object, else skip and note the trigger as not alertable — numeric threshold, /numbers territory.

Cap the proposal set at 15 per run (alert fatigue destroys the channel); prioritise conviction: high theses, then triggers with no existing alert, then LOW/CLOSE triggers over HIGH (downside tripwires earn priority — losses cost more to recover, [G-9]).

Step 2: Scope each candidate

  • Default watchlist (companySetting: "watchlists", watchlistIds: [Vault Active]): the observable matters when any book name discusses it — including the cross-company case (a supplier saying CoWoS allocation matters for AMD; the watchlist scope catches it because both are members).
  • all (market-wide) only for observables whose signal source is structurally OUTSIDE the book (macro/regulatory terms, an uncovered competitor's product name). Flag these in the proposal table — market-wide alerts are the noisy tier and each must justify itself.
  • documentTypes: default ["transcript", "report"] (spoken + filed; slides add noise). Note in the proposal when a candidate warrants slides too (product-launch terms).

Step 3: Reconcile

Diff candidates against list_keywords + the registry:

  • Candidate with no live alert → propose CREATE.
  • Live alert whose registry ticker is no longer status: active, or whose trigger clause no longer exists in the thesis (trigger retired/rewritten) → propose DELETE (this is --prune's whole job).
  • Live alert with no registry entry (created by hand in the app) → list as unmanaged — adopt into registry? (no mutation proposed).
  • Name/scope drift (e.g. thesis renamed the observable) → propose UPDATE.

Step 4: The confirmation gate

Present one table: # · action · term · scope · docTypes · ticker · trigger it watches (verbatim clause fragment). Ask the user to confirm by numbers/ranges/all — creates and deletes confirmed separately (deleting surveillance is as consequential as adding it). Only then execute the confirmed mutations, one call per item; write every executed mutation into the registry (creates add entries keyed by the returned keyword id; deletes remove them). Partial confirmation is normal — unconfirmed rows are dropped silently, not queued.

Non-interactive session → print the table under ## Proposed (NOT executed — non-interactive run) and stop.

Step 5: Release lock + report

Alert census (live count, managed vs unmanaged, coverage: how many active theses have ≥1 alert), mutations executed this run, the not-alertable triggers list (these need /numbers//catalyst-style numeric watching instead — say so), and the reminder that fires land in the Quartr app: check it, then /transcript --event the hit.

Design constraints (xxx DO NOT VIOLATE xxx)

  1. No mutation without explicit interactive confirmation. The proposal table IS the deliverable; execution is the optional second act. Headless runs never mutate.
  2. The registry is the contract. An alert without provenance (which thesis, which trigger) cannot be reconciled and becomes permanent noise — every skill-created alert gets a registry entry atomically with creation.
  3. Specificity bar over coverage. Ten sharp alerts beat forty vague ones; the generic-vocabulary ban is absolute. A trigger that yields no utterable specific keyword is reported as not-alertable, not force-fitted.
  4. This skill never touches theses. Trigger text is read-only input; rewriting a trigger to make it alertable is /deepen's decision with the user, not this skill's.
  5. Watchlist scope is read-only. Membership belongs to /event-sweep (contract §3 of that skill); /monitor scopes alerts to the watchlist but never edits it.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Sweep addressed callouts older than a threshold (default 180 days) into the target note's

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jameswong2011/InvestmentVault32026년 10월 16일 업데이트

Extract a thesis's load-bearing assumptions and scan for internal contradictions — the falsifiable claims the bull case requires, what would falsify each, and where the thesis's own Risks / Bear Case / research already argue against it. Use when user says "assumptions", "what must be true", "load-bearing assumptions", or "does [TICKER] contradict itself".

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jameswong2011/InvestmentVault32026년 10월 16일 업데이트

brief

무료

Generate a concise 1-page investment brief from a thesis — the elevator pitch version. Use when user says "brief", "summarise thesis", "pitch me [TICKER]", "one-pager", or "investment memo".

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jameswong2011/InvestmentVault32026년 10월 16일 업데이트

catalyst

무료

Extract and maintain a cross-portfolio catalyst calendar from all thesis notes. Use when user says "catalyst", "calendar", "what's coming up", "upcoming events", or "what could move the portfolio".

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jameswong2011/InvestmentVault32026년 10월 16일 업데이트

clean

무료

Delete old snapshots from _Archive/Snapshots/. Accepts a day threshold (default 180). Also `daily-intel [days]` mode — prune auto-generated n8n scanning surfaces (news briefs, X dashboards) from Daily Intel/ older than 90 days. Use when user says "clean", "clean snapshots", "delete old snapshots", "clean daily intel", or when /lint flags stale snapshots.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jameswong2011/InvestmentVault32026년 10월 16일 업데이트

clean

무료

Delete old snapshots from _Archive/Snapshots/. Accepts a day threshold (default 180). Also `daily-intel [days]` mode — prune auto-generated n8n scanning surfaces (news briefs, X dashboards) from Daily Intel/ older than 90 days. Use when user says "clean", "clean snapshots", "delete old snapshots", "clean daily intel", or when $lint flags stale snapshots.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jameswong2011/InvestmentVault32026년 10월 16일 업데이트

jameswong2011의 스킬 모두 보기

이 스킬의 문제 신고