SPB Git forge

spb/tendril

Public

Tendril — web ingestion platform (scrape/crawl/map/search) on macOS Apple Silicon: WebKit fidelity, authenticated pages, deterministic testable extraction. A self-hosted Firecrawl alternative.

6commits 1branches 0releases
1.1 MBsize
maindefault branch
20 days agolast push
JavaScript 82.6% TypeScript 11.8% HTML 5.3%

page 1

  1. Fri, Sep 4, 2026 1

  2. Mon, Aug 10, 2026 5

    1. docs: legendary README — badges, live status, agent integrations, architecture
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +162 −68
    2. feat: MCP server, agent Skill, downloads, Tendril logo + playground upgrade
      …
      Integrations (downloadable from the site so a user can hand Tendril to an agent):
      - integrations/mcp: single-file MCP server (tendril_scrape/map/status), bundled
        to one .mjs (no install), tested end-to-end via the MCP SDK client
      - integrations/skill: SKILL.md teaching an agent when/how to use Tendril over HTTP
      - served at /downloads/{tendril-mcp.mjs,tendril-mcp.zip,tendril-skill.zip}
      
      Site:
      - real Tendril logo (spiral-vine SVG) used as favicon + header/footer brand
      - "Give it to your agent" section with download buttons + copy-paste MCP/skill config
      - playground result upgrade: metrics row (status/latency/tier/cached/pipeline),
        metadata card with thumbnail, reading view with word count + copy/download .md,
        link explorer with internal/external filter + search + export, structured/metadata
        tabs, loading skeleton, richer error view
      
      Deployed to m3u96a; live at https://www.ten-dril.com.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 11 files +22,628 −56
    3. feat(api): serve interactive playground + docs platform at /
      …
      Self-contained landing page served via @fastify/static (apps/api/public):
      - hero with Tendril identity (botanical/terminal theme, animated vine SVG)
      - live playground: scrape/map/status, formats & options, latency, rendered
        markdown preview, links/metadata/structured tabs, curl/python/js snippets
        with copy, live /v1/status pill
      - collapsible API reference with param tables + examples, §15 error table
      Explicit API routes keep priority over the static wildcard.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 4 files +780
    4. feat: add /map, robots.txt enforcement, and m3u96a deployment
      …
      - frontier: RFC 9309 robots.txt parser + matcher (longest-match, *,$),
        24h cache with 5xx=disallow-1h, recursive sitemap/index discovery,
        mapSite() merging sitemaps + homepage links + /llms.txt (§10.1, §14.3)
      - scrape: enforce robots.txt by default (respectRobots), ERR_ROBOTS_DENIED (§26)
      - api: POST /v1/map, GET /v1/status, @fastify/compress (br/gzip), graceful
        shutdown; workspace packages now expose dist/ for production node execution
      - deploy: PM2 ecosystem (loopback API + ngrok www.ten-dril.com), ngrok.yml,
        scripts/deploy.sh + health.sh, deployed to m3u96a:8092 (§16)
      
      96 tests green. Ingress blocked only on reserving www.ten-dril.com in the
      ngrok dashboard (DNS CNAME already live).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 28 files +1,077 −20
    5. feat: scaffold Tendril monorepo with Phase 1 foundations
      …
      Web ingestion platform (scrape/crawl/map/search) for macOS Apple Silicon,
      following CLAUDE.md. Phase 1 (§24) delivered and fully tested (74 tests):
      
      - shared: Result<T,E>, §15 error taxonomy (single source), types, Pino
        logger with redaction, URL normalization (§10.1)
      - router: pure shouldEscalate escalation decision (§3.4)
      - egress: SSRF validation with resolve-then-validate + IP pinning (§16.5)
      - fetcher-http: Tier 0 undici client, Safari header order, manual redirects
        with per-hop SSRF re-validation, meta-refresh, gzip/br (§3)
      - extract: deterministic pipeline (§8) — JSON-LD/OG/Twitter harvest,
        Readability + density fallback, Turndown rules (GFM tables, fenced code,
        figures, dl), link extraction
      - api: Fastify POST /v1/scrape + /healthz, errors.ts HTTP mapping (§15)
      
      TypeScript strict (noUncheckedIndexedAccess, exactOptionalPropertyTypes),
      fetchers/extractors return Result, author header on every code file.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 60 files +5,669