Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/eddmpython/dartlab/storynpx skills add eddmpython/dartlab --skill storygit clone --depth 1 https://github.com/eddmpython/dartlabWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00000 | $0.04074 |
| Opus 5 | $0.00000 | $0.02037 |
| Sonnet 5 | $0.00000 | $0.00815 |
| Haiku 4.5 | $0.00000 | $0.00407 |
Grade A, and why
story scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 306 lines — stays where its author put it; the contents beside it link to each section on GitHub.
엔진 역할
story 는 해석하지 않고 다양한 관점의 근거를 배치 하는 L3 조합기다. 분석엔진 X. L2 5 분석엔진 - analysis (재무 인과) · credit (신용 위험) · macro (시장 환경) · quant (정량 신호) · industry (밸류체인 위치) - 와 L1.5 scan (횡단 비교) 결과를 블록 단위로 조합해 6 막 구조 보고서를 만든다.
story 가 L3 조합기인 이유 - 순환참조 방지
L2 5 분석엔진은 도메인 격리 (analysis ⊥ credit ⊥ macro ⊥ quant ⊥ industry) 가 import 단방향으로 강제돼 있다. L2 끼리 직접 import 하면 순환참조가 생긴다. 이 결합 책임을 story 가 단독으로 짊어져 6 막 보고서로 직조한다 - 자체 숫자 계산 0, 모든 숫자는 하위 엔진 결과 ref 에 묶이고, story 자체는 thesis · evidence · risk · limit 의 문장 골격만 제공.
이 구조 덕분에 새 L2 분석엔진을 추가해도 기존 L2 엔진은 수정 0 - story 의 블록 등록만 늘어난다.
공개 호출 방식
import dartlab
# 1. Company-bound - 가장 단순한 진입점
c = dartlab.Company("005930")
story = c.story() # 자동 reportType + 기업유형 감지
print(story.render("markdown"))
# 2. reportType 명시
credit_report = c.story(reportType="credit")
valuation = c.story(reportType="valuation")
exec_brief = c.story(reportType="executive")
# 3. 단일 섹션
revenue = c.story("수익구조") # 수익구조 블록만
# 4. 자유 조립 (블록 단위)
from dartlab.story import blocks, Story
b = blocks(c)
custom = Story([b["growth"], b["marginTrend"], b["cashFlowOverview"]])
# 5. 출력 형식 변환
print(custom.toMarkdown())
print(custom.toHtml())
print(custom.render("rich")) # 터미널 색상
print(custom.render("json")) # AI 소비용
강행 호출 룰 (agent 답변 품질 회귀 차단)
story 는 L3 조합기 - 자체 계산 0. 모든 숫자는 하위 엔진 (analysis/credit/macro/quant/industry/scan) ref 인용으로 들어와야 함.
- story 본문 안 모든 숫자에 하위 엔진 ref inline 표기 필수 -
[tableRef:...]/[valueRef:...]형식. ref 없는 숫자는 story 본문 진입 차단. - story 안에서 직접 계산 금지 - RunPython 으로 ratio/forecast/score 산출 금지. 하위 엔진 호출 결과의
items/flags/assumptions그대로 차용. - 블록 evidence 부족 시 빈 섹션 +
limits에 명시 - 임의로 채우거나 환각 금지. story 의 spec 가 "evidence 비면 빈 섹션" 정공. - reportType 미명시 시 자동 감지 결과 본문에 노출 - "자동 선택:
executive(이유: ...)" 한 줄. - 같은
(stockCode, period)분기 데이터는 1 회 fetch 후 in-memory 재사용 - 같은 회사 같은 기간의 EngineCall 을 axis 만 바꿔 반복 호출 금지. story 가 L3 조합기로서 차입금·충당부채·부문정보 등 여러 블록을 만들 때, Company.panel 한 번으로 모든 stmt (BS/IS/CF) + 분기 시계열을 받아 in-memory 분기 후 각 블록에 분배한다. 회귀 사례 - Q3 hybrid 답변 137s + RSS 7.6GB 폭증 (같은 005930 분기 데이터 차입금/충당부채/부문정보 4 회 반복 load).operation.performanceProfile메모리 안전 강행 (Company 1 개 ≈ 200~500MB) 직결. - 렌즈 수집기는 대형 내부 결과를 보존하지 않는다 -
lensProducts원문과 신용 패널에 필요한 최소 필드만 Company 세션에 남긴다. analysis, industry, quant, macro의 원본 결과 전체를_lensBundle또는 별도 Story 캐시에 붙잡아 두지 않는다.
What ships with it
2 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 306 lines · 0 tokens per session scan A e4e22311cc8d
story is a skill published in the GitHub repository eddmpython/dartlab (209 stars, last pushed 10d ago), licensed Apache-2.0. It costs nothing until one of its globs matches a file; then it loads 4,074 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
dividend-analysis
Comprehensive capital allocation analysis: dividends, buybacks, M&A, debt management, and FCF deployment.
position-ladder
Plan a staged position — entry ladder, share-count floor/ceiling, and the trim/re-add cycle that lowers average cost — with lot accounting, wash-sale checks, total-return honesty, and a thesis-break exit gate.
report-generator
Generate professional HTML/PDF investment reports with interactive visualizations.
stock-eval
Evaluate US stocks with comprehensive fundamental and valuation analysis.
stock-valuation
Multi-method stock valuation using DCF, comparable company analysis, EV multiples, and residual income models.
technical-analysis
Technical analysis of US stocks using charts and indicators.