50 Commits

Author SHA1 Message Date
HappySean 97c8a4f343 Merge pull request #68 from asksurf-ai/docs/correct-command-count
docs: correct command count to 100+
v0.0.10
2026-07-27 14:46:17 +08:00
HappySean b26ba38d43 docs: correct command count to 100+
The live spec exposes 105 paths and `surf list-operations` returns 105
commands, so 70+ understated the surface. Domain count (14) is unchanged
and verified against the spec.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 11:25:46 +08:00
HappySean a6cecb9345 Merge pull request #67 from asksurf-ai/docs/data-domain-coverage-update
docs: update data domain coverage and endpoint counts
v0.0.9
2026-07-27 11:24:51 +08:00
HappySean 618e0b5bbc docs: update data domain coverage and endpoint counts
Drop the social domain from the documented surface (README data
coverage table, credit pricing tiers, SKILL.md domain guide and
routing block) and realign the endpoint/domain counts accordingly:
83+/15 -> 70+/14, matching the counts published on the docs site.

Bump skill version to 0.0.9.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 11:07:04 +08:00
Weiming Long 7024816840 docs(skill): add Robinhood onchain routing (#66) v0.0.8 2026-07-24 13:47:34 +08:00
Weiming Long 4d157d19d0 docs(skill): route fundraising and token resolution (#65) 2026-07-13 15:51:27 +08:00
Weiming Long 14144accf9 docs(skill): add DEX token price routing (#62) v0.0.6 2026-06-12 14:42:19 +08:00
Weiming Long e5ffcbcdd0 docs(skill): route PnL reconstruction to order=asc cursor walk; bump 0.0.5 (#61)
The hyperliquid-fills gotcha described the pre-cursor API: time-only
paging where same-millisecond overflow was silently lost, mitigated by
--limit 100. The API now has two paging modes, and the bullet's own use
case (full trade history / PnL reconstruction) belongs on the new one:

- order=asc + meta.next_cursor walks every fill in [from, to] with no
  result cap — the completeness guarantee PnL math actually needs.
- The default newest-first mode reaches only a recent ~2000-fill
  window; the rewritten bullet scopes it to "latest trades" views and
  warns against summing PnL from it.

Bump 0.0.3...0.0.4 precedent: version moves whenever guidance changes
agent behavior, so the update is pushable to installed copies.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
v0.0.5
2026-06-10 17:46:01 +08:00
Weiming Long 5cd3f70d56 docs(skill): fills paging hazard + onchain SQL window rules; bump 0.0.4 (#60)
Three guidance additions to skills/surf/SKILL.md:

1. Gotchas: new hyperliquid-fills bullet — paging is time-only via
   --to-ms on the oldest time_ms received, de-duplicated on fill_id.
   The boundary cannot split fills sharing a millisecond, so the
   default --limit 20 silently drops overflow on busy wallets; always
   use --limit 100 and treat single-time_ms pages as possibly
   incomplete.

2. On-Chain SQL essential rules: replaced the vague "queries without
   block_date will timeout" bullet with three precise rules — large
   tables require a block_date lower bound (>=, >, =, BETWEEN, IN;
   upper-bound-only doesn't count), windows are capped at 365 days,
   and every large table in a JOIN/UNION/subquery needs its own
   block_date filter.

3. Version bump 0.0.3 -> 0.0.4 in frontmatter metadata.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
v0.0.4
2026-06-10 12:12:28 +08:00
Weiming Long 1cf99b5580 docs(skill): add Hyperliquid domain to the Surf routing + Domain Guide maps (#59)
Hyperliquid is a new Surf data domain (surf hyperliquid-*): trader leaderboard,
trader stats, open perp positions, full account value (perp+spot+vault+staking),
and trade-history fills. Add it to both the injected routing starter-map and the
in-skill Domain Guide so agents route to it; specifics stay discoverable via
surf <cmd> --help, matching the skill's partial-map design.

NOTE: gate the merge on the Hyperliquid endpoints shipping to PRODUCTION. They
are staging-only today (0 hyperliquid paths in the prod OpenAPI spec), so until
they deploy, prod 'surf list-operations | grep hyperliquid' returns nothing and
advertising the commands would mislead agents.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 16:21:05 +08:00
Hughie 63eb9dd025 docs: point README links to agents.asksurf.ai/docs (#56)
The Surf docs canonical home moved to agents.asksurf.ai/docs (Next.js,
surf-landing repo); docs.asksurf.ai is a stale Mintlify mirror that is
no longer updated. Five occurrences in the top-level link and the
Documentation table.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 01:33:42 -07:00
Wei Su e9f55538a1 docs: drop inaccurate snake_case rejection claim (#55)
The parser (pflag) normalizes `_` and `-` in flag names, so
snake_case variants of existing flags are accepted. The doc
previously claimed the CLI "will reject snake_case flags with
'unknown flag'", which was verifiably wrong.

Reframe both mentions as positive statements — flags are
documented in kebab-case in `--help`, match that — without
making a false negative claim about the parser.
2026-04-22 11:26:11 +08:00
Wei Su a91ce86c8b chore(skill): bump version 0.0.2 → 0.0.3 (#54)
Bumps the `metadata.version` field in SKILL.md so agents on older copies
are prompted to run `npx skills check asksurf-ai/surf-skills --skill surf`
and pull in the content changes merged in #53 — primarily the
search-*/-detail routing rewrite (issues.md #10) and the "always check
--help" enforcement in Getting Data / Troubleshooting.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
v0.0.3
2026-04-22 08:45:49 +08:00
Wei Su a4f0c346c3 docs(skill): route agents to --help instead of listing specifics (#53)
Rewrote several SKILL.md sections that were implicitly teaching agents
that the content in SKILL.md is authoritative, so agents pattern-matched
from the examples and skipped --help / list-operations.

Root-cause changes:

- Getting Data: removed three hardcoded examples (market-price --symbol,
  wallet-detail --address, social-user --handle) that trained agents to
  generalize those flag names. Replaced with explicit "flag names vary,
  always run --help, don't copy flags from one command to another".

- Surf routing (AGENTS.md injected block): the 9-row topic/prefix table
  read as a complete catalog. Added a "starter map, not a complete
  catalog" frame and routed agents to list-operations before the table.

- Domain Guide: the 21-row Need/Grep table read as the full domain list.
  Added "partial map, not every command follows these prefixes" caveat
  and explicit instruction to run list-operations | grep before
  concluding no endpoint exists.

- Routing Workflow (search-* vs *-detail): rewrote the single sentence
  at L160 into a proper decision rule. When the user names a specific
  entity, check <domain>-detail --help first — some (project, fund)
  accept --q <name> directly, some (wallet) require specific identifiers
  like --address+--chain, some (news) require an exact --id. Use
  search-<domain> only when detail doesn't take a name flag and no id
  is on hand, or the query is cross-entity.

- Troubleshooting: collapsed three entries (unknown command / unknown
  flag / enum validation error) into one. They share a root cause —
  agent is guessing from a mental model that doesn't match the actual
  surface. Removed "Run surf sync first" (redundant with Setup section
  and wrong diagnosis). Dropped concrete (`--sort-by` / `rsi`) examples
  that invite the same pattern-matching failure.

Accuracy fix:

- Exit code 4 entry: removed misleading "(--json output includes it)"
  clause. Verified in surf-cli/cli/errors.go:34 and empirically: the
  JSON error envelope lands on stdout with exit 4 regardless of output
  format.

Deletions:

- Removed "## API Feedback" section entirely (filesystem-based feedback
  log flow at ~/.surf/api-feedback/<date>-<slug>.md; superseded by the
  `surf feedback` CLI covered in Feedback prompting).

Formatting:

- Unified line-wrap style: one-paragraph-per-line throughout, except the
  AGENTS.md routing block which stays hard-wrapped at ~72 chars since
  it's copied verbatim into external AGENTS.md files. File went from
  454 to 398 lines with no content loss outside the API Feedback delete.

Refs surf-cli/docs/issues.md:
- #10 (search-project → project-detail) FIXED via the search-*/-detail
  decision rule rewrite.
- #9 (--q guidance incomplete) auto-resolved via #10.
- #8 (required-params cheat sheet) ADDRESSED via root-cause route
  (strengthened --help enforcement across Getting Data / Troubleshooting
  / Gotchas) rather than the literal cheat-sheet fix candidate, which
  would have conflicted with the "don't list specifics" framing now
  applied to the Domain Guide and AGENTS.md tables.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 08:34:51 +08:00
Hughie 8774fbcbae fix(skill): clarify news-feed --project vs search-news routing (#51)
Empirically (2026-04-20 comparison against 6551 OpenNews MCP on 20 news
cases), agents were silently losing news coverage because they defaulted
to `news-feed --project X` for any news-style question. That flag is a
project_id TAG filter — articles about an event often get tagged to a
different project (or none) and disappear from results.

Every article I initially thought was missing from surf's index turned
out to be in it — retrievable via `search-news --q "<keywords>"`, the
full-text route across all 17 sources (coindesk, cointelegraph,
theblock, decrypt, dlnews, blockbeats, bitcoincom, coinpedia, ambcrypto,
cryptodaily, cryptopotato, phemex, panews, odaily, tradingview,
chaincatcher, techflow).

Examples where `news-feed --project` missed but `search-news` hit:
- "Bybit-led funding for Hata"        → project filter empty, search-news returned 3 direct articles
- "CHIP listed on Coinbase"            → project filter returned generic Coinbase news; search-news had the listing
- "North Korea DeFi attacks"           → no crypto "project" named North Korea; search-news returned 3 direct
- "Matt Hougan Bitwise Avalanche ETP"  → Bitwise isn't a project tag; search-news returned the exact article
- "Rumble Cloud MoonPay OpenClaw"      → project filter empty; search-news returned the exact announcement

Added gotcha in SKILL.md listing when to use each variant and requiring
search-news as a fallback before concluding no coverage exists.
2026-04-20 15:32:33 -07:00
Hughie 4b8538ef7c Merge pull request #47 from asksurf-ai/feat/deep-integration
feat(skill): AGENTS.md routing injection, auth code split, feedback prompts
2026-04-15 21:38:49 -07:00
hughzhou-gif 3b1b4f4fad feat(skill): add AGENTS.md routing injection, auth code split, and feedback prompts
- First-run: offer to inject "Surf routing (primary crypto data source)"
  block into AGENTS.md (falls back to CLAUDE.md). Includes bash preamble
  for detection + AskUserQuestion consent flow + decline persistence.
- Auth: split INSUFFICIENT_CREDIT into FREE_QUOTA_EXHAUSTED (anonymous
  30/day exhausted) and PAID_BALANCE_ZERO (valid key, zero balance).
  Backward-compatible fallback heuristic for older backends retained.
- Feedback: two prompt flows (USER_DISSATISFIED, DATA_GAP) calling
  `surf feedback "<msg>" --quiet`. Explicit user consent required,
  no silent submission, no allowlist injection.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 21:37:35 -07:00
Wei Su bf9da3347a feat: add skill auto-update check (#46)
* feat: add skill auto-update check

- SKILL.md: add metadata.version: "1.0.0" to frontmatter
- scripts/update-check.sh: compares local version against GitHub main,
  auto-downloads updated SKILL.md if newer version available
- Setup section: run update-check.sh at session start

Silently skips when offline or remote has no version yet.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: use actual release tag_name for download URL

Tag might not have "v" prefix. Use the raw tag_name from GitHub API
for the download URL, strip "v" only for version comparison.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: split check-for-updates and update scripts

- check-for-updates.sh: check only, no side effects
  - Compares skill metadata.version against GitHub latest release tag
  - Checks surf CLI version against compatibility field
  - Prints actionable messages only when updates needed
- update.sh: performs actual update (skill + surf install + surf sync)
- SKILL.md: add compatibility field, simplify Setup section

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: agent must stop and ask user when updates are available

Previous wording let agents ignore update warnings and continue.
Now explicitly says STOP and ask before proceeding.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: CLI incompatibility is mandatory, not optional

When check-for-updates prints "CLI update required", agent must tell
user to update — not offer to skip. Skill updates remain optional.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: version check via surf install, remove custom scripts

- Set metadata.version to 0.0.2
- Setup: agent compares surf install's minimum skill version against
  metadata.version, runs npx skills check only if incompatible
- Delete scripts/ directory (npx skills check handles updates)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: restore setup instructions for surf install and sync

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: remove hardcoded version from setup prompt

Agent reads metadata.version from frontmatter directly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 09:33:40 +08:00
Wei Su d7f7a101e6 fix: domain guide web → web-fetch (#45)
Agents read `web` and run `surf web --url ...` which fails.
The actual command is `web-fetch`. 29 failures across 5/6 runners.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
0.0.1 v0.0.2
2026-04-15 10:22:16 +08:00
Wei Su 0c70b536c9 fix: remove jq dependency from SKILL.md (#44)
jq is not installed by default on Mac or Windows. Remove all jq
usage examples. --json outputs full envelope, agent parses it directly.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 10:05:35 +08:00
Wei Su 65f32879c3 fix: add --metric vs --indicator gotcha to SKILL.md (#43)
market-onchain-indicator's flag is --metric, not --indicator. Agents
guessed --indicator because the domain guide lists it under "indicator".
Also notes that mvrv/sopr/nupl/puell-multiple only support BTC.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 01:38:42 +08:00
Wei Su 79aacd9620 chore: sync SKILL.md with CLI v1.0.0-alpha.31 (#42)
1. Replace -o json -f body.data with --json + jq (PR #69)
2. Fix exit code 4 troubleshooting — remove -f filter gotcha
3. Fix error.code location: stdout, not stderr (PR #70)
4. Add surf telemetry command (PR #75)

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 11:44:42 +08:00
Hughie f60dbf893d Merge pull request #41 from asksurf-ai/fix/w007-auth-handling
fix(skill): harden credential handling against chat-paste (W007)
2026-04-13 18:02:31 -07:00
hughzhou-gif 19fad3230a fix(skill): harden credential handling against chat-paste (W007)
- INSUFFICIENT_CREDIT message directs user to run surf auth in their own
  terminal, not paste the key into chat
- Replace 'User provides API key' flow with explicit refuse-and-guide reply;
  agent must never run surf auth on a pasted key
- API Reference: note that agents must use the CLI, not construct HTTP
  requests with a literal key

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 17:59:13 -07:00
Hughie d6ba5c25cb Merge pull request #40 from asksurf-ai/docs/credit-pricing
docs: add credit pricing reference
2026-04-10 12:39:09 -07:00
hughzhou-gif 6935f0859e docs: add credit pricing reference document
Add docs/credit-pricing.md with full Surf credit pricing breakdown:
- Per-endpoint costs across all tiers (Light/Standard/Heavy/Free)
- Chat API model pricing
- Free tier, subscription plans, and booster packs
- Enterprise and Studio now share identical pricing (hermod v0.1.55)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 12:21:32 -07:00
HappySean fe94a75a8a docs: correct Surf CLI installation link in README.md for consistency 2026-04-09 15:20:16 +08:00
HappySean 79aa8e41a9 docs: update Surf CLI installation links in documentation
- Changed installation guide links in CLAUDE.md, README.md, and SKILL.md to point to the new introduction page at https://agents.asksurf.ai/docs/cli/introduction for better clarity.
2026-04-09 14:58:14 +08:00
Hughie 1effa4dd24 Merge pull request #39 from asksurf-ai/fix/security-audit-credentials-install
fix: address Snyk security audit (credentials + install)
2026-04-08 18:49:42 -07:00
hughzhou-gif 78aa971419 fix: address Snyk security audit findings
- Remove curl | sh install command, link to docs instead (E005)
- Replace plaintext API key examples with $API_KEY env var (W007)
- Remove export SURF_API_KEY=<your-api-key> from setup

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 18:49:28 -07:00
Hughie d97912d852 Merge pull request #38 from asksurf-ai/fix/troubleshooting-error-handling
fix: troubleshooting error handling and user-facing messages
2026-04-08 14:42:06 -07:00
hughzhou-gif fd949f0521 fix: improve error handling in troubleshooting section
- Add guidance for exit code 4 with -f filter hiding error JSON
- Add rule to never expose internal details (exit codes, rerun aliases,
  raw JSON) to users — always translate to plain language

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 14:41:54 -07:00
Hughie e7e47071ce feat(skill): add capability boundaries section, update setup to install+sync (#37)
- Add Capability Boundaries guidance: when API can't fully match user's
  request, still call closest endpoint but explicitly note the difference
- Update setup: run both `surf install` and `surf sync` every session

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 13:10:56 -07:00
Hughie 4e46c835d8 Merge pull request #35 from asksurf-ai/chore/migrate-install-cdn-host
docs: update install URL to downloads.asksurf.ai
2026-04-08 11:23:20 -07:00
Hughie 5055c16102 Merge pull request #36 from asksurf-ai/fix/onchain-domain-description
fix: remove SQL from onchain Domain Guide description
2026-04-07 19:02:27 -07:00
hughzhou-gif 9e6eaf53a4 fix: remove SQL mention from onchain Domain Guide description
Prevent agents from defaulting to onchain-sql over specialized endpoints
like onchain-gas-price by describing the domain as "on-chain queries"
instead of explicitly naming SQL.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 19:01:40 -07:00
Ryan c206b8d3a9 docs: update install URL to downloads.asksurf.ai
The surf CLI install script has moved from agent.asksurf.ai to a
dedicated downloads.asksurf.ai subdomain. The old host remains
available as a CloudFront alias for backwards compat, but new
documentation should point at the new canonical URL.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 17:46:44 -07:00
Hughie 14a86d31d0 Merge pull request #34 from asksurf-ai/fix/readme-auth-matching-onchain-sql
docs: update README auth, matching domain, Onchain SQL
2026-04-07 13:48:49 -07:00
hughzhou-gif d6a5fa4ad0 docs: update README auth section, add matching domain, rename to Onchain SQL
- Remove API key requirement from prerequisites (30 free credits/day)
- Add agents.asksurf.ai link for signup
- Add Matching domain to Data Coverage table
- Rename "Data Catalog" to "Onchain SQL"

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 13:48:06 -07:00
Hughie 5a9e12f592 fix: add routing workflow, matching domain, and update signup URL (#33)
- Add Routing Workflow section: enforce list-operations + --help before
  choosing an endpoint, prefer specific endpoints over search-*
- Add matching domain to Domain Guide (CEX-DEX matching)
- Update signup URL from enterprise-landing.asksurf.ai to agents.asksurf.ai
- Add non-English query translation hint

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 13:42:25 -07:00
hughzhou-gif 56d952d799 fix: keep name as 'surf' for correct slug, move tagline to heading
The name field controls the install slug and directory name.
Long names break --skill surf matching and create unwieldy paths.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 17:19:21 -07:00
hughzhou-gif 68e41c6547 feat: improve skill branding and address security audit findings
- Rename skill to "Surf Skill — One Skill, All Crypto Data"
- Rewrite description to match landing page positioning
- Fix E004: make 429 retry behavior transparent to user
- Add data boundary section to mitigate prompt injection risk (W011)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 17:18:07 -07:00
hughzhou-gif a52918424e feat: add surf auth commands for persistent API key storage 2026-04-06 15:03:26 -07:00
hughzhou-gif 8e56bb9097 fix: correct --time-range gotcha — not all endpoints share the same flags 2026-04-06 14:44:24 -07:00
hughzhou-gif 1bd60a23b6 feat: add surf install upgrade reminder to Setup section
Boss requested: remind agents to run `surf install` to upgrade CLI
before starting a session, ensuring latest commands and fixes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 13:56:40 -07:00
hughzhou-gif a51baebc2b feat: improve skill with eval-driven fixes
Based on 201-question eval (100 api-doc + 100 real-user, 3 runs each):

Auth error handling:
- Replace HTTP status codes (401/429/403) with CLI error.code matching
  (UNAUTHORIZED/INSUFFICIENT_CREDIT/RATE_LIMITED) — agent can't see
  HTTP status, only JSON error body

Gotchas (2 new + 1 expanded):
- Flags are kebab-case, not snake_case (agent tested --sort_by, got "unknown flag")
- Enum values always lowercase (--indicator RSI → 400, must use rsi)
- POST endpoints: reference On-Chain SQL section instead of inline hint

On-Chain SQL (new section):
- surf catalog search/show/practices for table discovery
- 3 essential rules: agent. prefix, read-only limits, block_date partition key

Troubleshooting (3 new entries):
- "unknown flag" → kebab-case fix
- Enum validation error → check --help
- Exit code 4 → see auth section

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 22:49:22 -07:00
hughzhou-gif 3595f30067 feat: add authentication & quota handling section to surf skill
Adds try-first auth flow with structured error handling for 401/429/403,
canned user messages for free tier, credit exhaustion, and paid balance.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 18:52:26 -07:00
Ryan Li b582dde3d5 docs: update auth to SURF_API_KEY env var (#32)
* feat: rewrite README with skill intro, data coverage, and doc links

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: update auth from OAuth login to SURF_API_KEY env var

The surf CLI no longer uses OAuth. Auth is now solely via the
SURF_API_KEY environment variable.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: hughzhou-gif <hugh.zhou@cybertinolab.com>
2026-04-02 18:45:05 -07:00
Ryan Li 3c2853e674 feat: rewrite README with skill intro, data coverage, and doc links (#31)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 13:45:30 -07:00
Ryan e211a3befa feat: initial commit
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 13:37:30 -07:00