{"id":48111640,"url":"https://github.com/xiaojiou176-open/docsiphon","last_synced_at":"2026-04-11T07:04:58.762Z","repository":{"id":346666927,"uuid":"1191368369","full_name":"xiaojiou176-open/docsiphon","owner":"xiaojiou176-open","description":"Export documentation sites into AI-ready local Markdown corpora with preserved paths, reproducible runs, and audit artifacts.","archived":false,"fork":false,"pushed_at":"2026-03-25T20:40:41.000Z","size":835,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-26T03:37:40.236Z","etag":null,"topics":["ai-rag","audit-trail","corpus-preparation","developer-tools","docs-export","documentation","knowledge-ingestion","llms-txt","markdown","python-cli","rag","retrieval-augmented-generation","sitemap"],"latest_commit_sha":null,"homepage":"https://xiaojiou176-open.github.io/docsiphon/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xiaojiou176-open.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-25T07:07:12.000Z","updated_at":"2026-03-25T20:39:32.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/xiaojiou176-open/docsiphon","commit_stats":null,"previous_names":["xiaojiou176-open/docsiphon"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/xiaojiou176-open/docsiphon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiaojiou176-open%2Fdocsiphon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiaojiou176-open%2Fdocsiphon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiaojiou176-open%2Fdocsiphon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiaojiou176-open%2Fdocsiphon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xiaojiou176-open","download_url":"https://codeload.github.com/xiaojiou176-open/docsiphon/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiaojiou176-open%2Fdocsiphon/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31405529,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-rag","audit-trail","corpus-preparation","developer-tools","docs-export","documentation","knowledge-ingestion","llms-txt","markdown","python-cli","rag","retrieval-augmented-generation","sitemap"],"created_at":"2026-04-04T16:08:32.003Z","updated_at":"2026-04-11T07:04:58.753Z","avatar_url":"https://github.com/xiaojiou176-open.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Docsiphon\n\n**Turn documentation sites into AI-ready local Markdown corpora with preserved\npaths, reproducible exports, and audit artifacts.**\n\nDocsiphon is a Python CLI for AI / RAG builders who need something better than\n\"just mirror the site and hope for the best.\" It keeps URL hierarchy intact,\nprefers Markdown when the docsite exposes it, falls back to HTML extraction\nwhen it does not, and writes a run ledger you can review, resume, or hand to\nanother operator.\n\n**Best fit:** teams turning vendor docs into reviewable local Markdown corpora\nfor retrieval, eval, and offline documentation work.\n**Not for:** fully generic website mirroring, JS-heavy browser automation, or\npixel-perfect site archiving.\n\n[First Success](#first-success-in-one-command) · [Proof Ladder](#proof-ladder) · [Repo Map](./docs/README.md) · [Examples](./examples/README.md) · [Latest Release](https://github.com/xiaojiou176-open/docsiphon/releases/latest)\n\n![Docsiphon hero showing scoped documentation export, preserved Markdown tree, and audit artifacts](./assets/docsiphon-hero.svg)\n\n_What a first success looks like: a scoped export, a preserved file tree, and\naudit artifacts you can hand to another operator._\n\n[![Release](https://img.shields.io/github/v/release/xiaojiou176-open/docsiphon?label=release)](https://github.com/xiaojiou176-open/docsiphon/releases/latest)\n[![CI](https://img.shields.io/github/actions/workflow/status/xiaojiou176-open/docsiphon/ci.yml?branch=main\u0026label=ci)](https://github.com/xiaojiou176-open/docsiphon/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/license-MIT-0f172a?labelColor=111827\u0026color=f59e0b)](./LICENSE)\n\n\u003e If you build retrieval, eval, or offline doc pipelines, star this repo now.\n\u003e It is the kind of tool you do not need every day, but you will want to find\n\u003e instantly the next time a vendor docsite becomes your ingestion problem.\n\n## First Success In One Command\n\nIf you only want to give Docsiphon 30 seconds, do not start with a wall of\nexplanation. Start with this:\n\n```bash\nuvx --from git+https://github.com/xiaojiou176-open/docsiphon.git \\\n  docsiphon \"https://developerdocs.instructure.com/services/canvas\" \\\n  --scope-prefix /services/canvas \\\n  --max-pages 6 \\\n  --out ./_outputs \\\n  --site-root auto\n```\n\nAfter the command finishes, you should see three concrete signals right away:\n\n- `_outputs/canvas/` contains a Markdown tree that still follows source-path\n  semantics\n- `manifest.jsonl`, `report.json`, `toc.md`, and `report.html` are written as a\n  reviewable audit bundle\n- you can inspect one small but real documentation export without bringing in\n  browser automation\n\n\u003e Think of this like testing a key before remodeling the whole lock.\n\u003e Confirm the door opens first, then decide whether you want the deeper\n\u003e mechanics.\n\nFor the longer explanation, copyable profiles, and troubleshooting path,\ncontinue to [Quickstart](#quickstart).\n\n## Proof Ladder\n\nDo not treat every public asset in this repository as interchangeable. Each one\nproves a different part of the story:\n\n| Asset | What it proves | Best placement |\n| --- | --- | --- |\n| `docsiphon-hero.svg` | What the tool is | First screen |\n| `docsiphon-before-after.svg` | Why it is worth trying over naive crawling | Below the fold / second screen |\n| `docsiphon-demo.gif` | What a real local result looks like after the first run | Second screen |\n\n## Why Docsiphon\n\n- **Ship an LLM-ready corpus, not a pile of scraped HTML.** Docsiphon prefers\n  Markdown twins when a docsite publishes them and only falls back to HTML\n  conversion when needed.\n- **Keep structure humans and pipelines can still reason about.** Exported files\n  preserve path hierarchy instead of flattening everything into opaque blobs.\n- **Keep an audit trail for every run.** `manifest.jsonl`, `report.json`,\n  `toc.md`, and `report.html` make the export inspectable, resumable, and easy\n  to review.\n\n## Who It Is For\n\n- AI / RAG builders preparing retrieval corpora from vendor documentation\n- Teams that want a local, reviewable snapshot before chunking or embedding\n- Operators who need reproducible doc exports with a ledger, not one-off copy\n  and paste sessions\n\n## Trade-offs / Not For\n\nDocsiphon is a strong fit when the source is a documentation site and the goal\nis to produce a clean local corpus.\n\nIt is **not** the right tool when:\n\n- you need a universal website mirroring solution\n- the site depends on heavy browser-side rendering or authenticated product UX\n- you need to preserve every visual detail of a live site rather than extract\n  structured, text-first content\n\n## At A Glance\n\nIf you want a fast filter before reading deeper, start with this table:\n\n| What you need to know | Current answer |\n| --- | --- |\n| Primary surface | `CLI-first` |\n| Current flagship public packet | GitHub repo front door + `uvx` quickstart + release assets / example profiles |\n| What success looks like | scoped export + preserved file tree + audit artifacts |\n| What not to assume | This is not a universal website mirror or a browser-heavy product archiver |\n\n## Current Product Boundary\n\n- **Only current primary surface and front door today:** `CLI-first`\n- **Current flagship public packet:** GitHub repo front door + `uvx` quickstart + release assets / example profiles\n- **Future secondary surface only:** MCP-aware secondary surface is allowed later, but it stays **future secondary** until it ships its own install contract, verification gate, public packet, and lane truth\n- **Current start path:** stay on this README + the `uvx` quickstart below before treating any future secondary surface as part of the public flagship path\n\nPut more plainly:\n\n\u003e Docsiphon can grow an MCP-aware secondary surface later.\n\u003e Today, the front door is still the CLI, and any new secondary surface must\n\u003e earn its own install contract, verification gate, public packet, and lane\n\u003e truth.\n\n## Quickstart\n\n### Fastest Way To Try It\n\nYou only need two things for the default first run:\n\n1. install [`uv`](https://docs.astral.sh/uv/getting-started/installation/)\n2. copy the command below and let Docsiphon export a small, scoped sample\n\n```bash\nuvx --from git+https://github.com/xiaojiou176-open/docsiphon.git \\\n  docsiphon \"https://developerdocs.instructure.com/services/canvas\" \\\n  --scope-prefix /services/canvas \\\n  --max-pages 6 \\\n  --out ./_outputs \\\n  --site-root auto\n```\n\nThis first run is intentionally small. It proves the path-preserving export,\nthe report artifacts, and the Markdown-first fetch path without asking you to\nmirror an entire vendor docsite.\n\nIf `uv` is not installed yet, start here:\n[Installing uv](https://docs.astral.sh/uv/getting-started/installation/).\nIf you want a prefilled profile instead of flags, use the release assets under\n[`examples/README.md`](./examples/README.md).\n\n## Why It Beats Naive Crawling\n\n![Docsiphon before/after comparison between manual copying, generic mirrors, and an audit-friendly Markdown export](./assets/docsiphon-before-after.svg)\n\n_The point of this comparison is simple: Docsiphon is trying to give you a\nlocal corpus you can trust later, not just a pile of fetched bytes._\n\n| Approach | Preserves path hierarchy | Prefers Markdown | Emits audit artifacts | Resume support | Filtering and scope controls | LLM ingestion friendliness |\n| --- | --- | --- | --- | --- | --- | --- |\n| Manual copy / paste | No | Sometimes | No | No | No | Low |\n| Raw crawler | Rarely | No | Rarely | Rarely | Varies | Medium |\n| Generic site mirror | Sometimes | No | No | Rarely | Medium | Medium |\n| **Docsiphon** | **Yes** | **Yes** | **Yes** | **Yes** | **Yes** | **High** |\n\nDocsiphon is not trying to be a universal web archiver. It is opinionated about\none job: turning documentation sites into clean local assets that are easier for\nAI systems and humans to inspect.\n\n### Copyable Profiles Without a Checkout\n\nIf you want a first run with less flag typing after the default path works,\ndownload one of the current `v0.1.2` release assets first:\n\n- [canvas-quickstart.toml](https://github.com/xiaojiou176-open/docsiphon/releases/download/v0.1.2/canvas-quickstart.toml)\n- [rag-corpus.toml](https://github.com/xiaojiou176-open/docsiphon/releases/download/v0.1.2/rag-corpus.toml)\n- [strict-audit.toml](https://github.com/xiaojiou176-open/docsiphon/releases/download/v0.1.2/strict-audit.toml)\n\nThen run Docsiphon with the profile you downloaded:\n\n```bash\nuvx --from git+https://github.com/xiaojiou176-open/docsiphon.git \\\n  docsiphon \"https://developerdocs.instructure.com/services/canvas\" \\\n  --profile ./canvas-quickstart.toml\n```\n\n## Release Shelf Truth\n\nUse the latest release entrypoint when you want the newest **published**\nartifact shelf:\n\n- tagged wheel / sdist builds\n- downloadable starter profiles\n- release notes for the current published cut\n\nUse the README and Pages docs when you want the newest **repository**\ntruth on `main`:\n\n- current front-door wording\n- current governance and docs contracts\n- the latest Pages routing surface\n\nThese are related, but they are not the same shelf. A future `main` commit can\nmove the docs, governance, or Pages truth forward before a new tagged release\nis cut.\n\n### If The First Run Does Not Work\n\n- Need the full repository map and support boundary? Start with\n  [`docs/README.md`](./docs/README.md)\n- Want copyable profile examples? Jump to [`examples/README.md`](./examples/README.md)\n- Need the contributor workflow instead of the end-user path? Use\n  [`CONTRIBUTING.md`](./CONTRIBUTING.md)\n\n## Common Commands\n\nDry-run discovery before downloading content:\n\n```bash\nuvx --from git+https://github.com/xiaojiou176-open/docsiphon.git \\\n  docsiphon \"https://developerdocs.instructure.com/services/canvas\" \\\n  --scope-prefix /services/canvas \\\n  --dry-run\n```\n\nScoped crawl against a docs subtree:\n\n```bash\nuvx --from git+https://github.com/xiaojiou176-open/docsiphon.git \\\n  docsiphon \"https://example.com/docs/start\" \\\n  --scope-prefix /docs \\\n  --max-pages 500\n```\n\nResume an existing export:\n\n```bash\nuvx --from git+https://github.com/xiaojiou176-open/docsiphon.git \\\n  docsiphon \"https://example.com/docs/start\" \\\n  --resume \\\n  --skip-existing\n```\n\nUse a profile file:\n\n```bash\nuvx --from git+https://github.com/xiaojiou176-open/docsiphon.git \\\n  docsiphon \"https://example.com/docs/start\" \\\n  --profile ./examples/rag-corpus.toml\n```\n\n## What You Get\n\nEach non-dry run writes:\n\n- exported Markdown or saved HTML files\n- `manifest.jsonl` as the page-level ledger\n- `report.json` as the run summary\n- `index.json`, `toc.md`, and `report.html` as derived views\n- `_errors/` snapshots when error sampling is enabled\n\n## Real Example Output\n\n![Docsiphon demo showing a scoped export command, report summary, and generated file tree](./assets/docsiphon-demo.gif)\n\n_The demo below is not a generic animation. It is showing the exact kind of\nsmall first success the README is asking you to reproduce._\n\nThe snapshot below comes from a real sample run against the Canvas developer\ndocs with `--scope-prefix /services/canvas --max-pages 6`.\n\n```text\n_outputs/\n└── canvas/\n    ├── basics.md\n    ├── basics/\n    │   ├── file.changelog.md\n    │   ├── file.compound_documents.md\n    │   ├── file.endpoint_attributes.md\n    │   └── file.file_uploads.md\n    ├── canvas.md\n    ├── index.json\n    ├── manifest.jsonl\n    ├── report.html\n    ├── report.json\n    ├── toc.md\n    └── urls.txt\n```\n\n```json\n{\n  \"run_id\": \"7477bdf950af\",\n  \"discovery_source\": \"sitemap\",\n  \"total\": 336,\n  \"scheduled_urls\": 6,\n  \"ok\": 6,\n  \"failed\": 0,\n  \"path_collisions\": 0\n}\n```\n\nThe exported Markdown preserves path semantics instead of flattening everything\ninto generic filenames:\n\n```md\n---\nsource_url: https://developerdocs.instructure.com/services/canvas/basics\nfetched_url: https://developerdocs.instructure.com/services/canvas/basics.md\n---\n# Basics\n\n- [GraphQL](/services/canvas/basics/file.graphql.md)\n- [API Change Log](/services/canvas/basics/file.changelog.md)\n- [Pagination](/services/canvas/basics/file.pagination.md)\n```\n\n## Use Cases for AI / RAG\n\n- Build a clean retrieval corpus before chunking and embedding vendor docs\n- Snapshot third-party documentation into a reviewable tree for eval or audit\n- Keep an offline Markdown mirror with a ledger you can diff, resume, and rerun\n\n## Evidence Snapshot\n\nThis is the section for people evaluating whether Docsiphon is merely\nwell-written or actually grounded in runnable evidence.\n\n| Surface | Current public evidence | How to reproduce it | Why it matters |\n| --- | --- | --- | --- |\n| Markdown twin docsites | `scripts/verify_instructure.sh` currently confirms `200 text/markdown` responses for both the Canvas root page and a nested subpage | `bash scripts/verify_instructure.sh` | Proves the Markdown-first path is real on a public vendor docsite |\n| Sitemap-scoped export | A fresh sample run discovered `336` URLs through sitemap, scheduled `6`, wrote `6`, and failed `0` under `--scope-prefix /services/canvas --max-pages 6` | `uv run docsiphon \"https://developerdocs.instructure.com/services/canvas\" --scope-prefix /services/canvas --max-pages 6 --out /tmp/docsiphon-sample --site-root auto` | Shows the \"small first success\" story is not hypothetical |\n| Discovery coverage | The current engine covers `llms.txt`, sitemap, search index, and BFS fallback in code and automated tests | `uv run pytest tests/test_discovery.py tests/test_discovery_more.py` | Explains why Docsiphon is more than a single-site probe |\n| Audit artifacts | `manifest.jsonl`, `report.json`, `index.json`, `toc.md`, `report.html`, and sampled `_errors/` snapshots all have dedicated test coverage | `uv run pytest tests/test_report.py tests/test_storage.py tests/test_cli_run.py` | This is the part generic mirrors usually do not give you |\n| Release assets and copyable profiles | The latest public release ships hero/demo/social-preview assets plus downloadable starter profiles | [Release v0.1.2](https://github.com/xiaojiou176-open/docsiphon/releases/tag/v0.1.2) | Lets evaluators try the repo without reverse-engineering local setup |\n\nEvidence refreshed from a local verification run on `2026-03-26`.\n\n## What's Next\n\nDocsiphon already covers the core export loop, but the near-term public focus is\nclear:\n\n- expand compatibility with more real-world documentation site shapes through\n  the docs-site compatibility intake path\n- keep tightening the public example profiles so first-time users can move from\n  README to a successful export faster\n- keep improving the review and artifact story around `manifest.jsonl`,\n  `report.json`, `report.html`, and `toc.md`\n\nIf you want a vote in what gets optimized next, the most useful entrypoint is\nthe repo-local roadmap and the live GitHub issues / discussions indexes:\n\n- Repo roadmap: `docs/roadmap.md`\n- Roadmap issue queue:\n  `https://github.com/xiaojiou176-open/docsiphon/issues?q=is%3Aissue+is%3Aopen+label%3Aroadmap`\n- Discussions index:\n  `https://github.com/xiaojiou176-open/docsiphon/discussions`\n- Current roadmap themes:\n  - expand docs-site compatibility coverage\n  - strengthen public example profiles\n  - improve audit artifact review surfaces\n\n## Community Pulse\n\nDocsiphon keeps a few public threads active so the repository does not feel\nlike a one-shot dump:\n\n- Discussions home:\n  `https://github.com/xiaojiou176-open/docsiphon/discussions`\n- Categories to look for there:\n  - Announcements for release highlights\n  - Q\u0026A for first-run blockers\n  - Ideas for docsite requests and workflow proposals\n  - Show and Tell for real exported corpora\n\nIf you use Docsiphon on a real documentation stack, the most useful thing you\ncan share is the command you ran, the target docs surface, and a short\n`report.json` excerpt.\n\n## Why Not Just `wget` or a Generic Crawler?\n\nBecause the hard part is not fetching bytes. The hard part is getting a local\nresult that still feels like documentation, still maps back to source URLs, and\nstill leaves behind enough run evidence that you can trust what happened.\n\nGeneric crawlers are like dumping a filing cabinet onto the floor and saying\n\"technically, everything is here.\" Docsiphon is trying to put the papers into a\nfolder structure you can actually use again.\n\n## How It Works\n\nDocsiphon follows a CLI-driven export pipeline:\n\n1. parse CLI arguments and optional profile settings\n2. discover candidate URLs through `llms.txt`, sitemap, search index, or BFS\n3. filter and normalize the candidate set\n4. export each page through Markdown-first fetch with HTML fallback\n5. write page artifacts and derived run artifacts\n\n## Verification\n\n### Verification / Trust\n\nThis repository keeps a thin public docs surface, but the trust boundary is\nreal:\n\n- the CLI entrypoint is checked in CI\n- repository contracts and hygiene gates are enforced\n- tests cover the current documented behavior\n- export runs produce reproducible operator artifacts instead of silent side\n  effects\n\nCurrent verification entrypoints:\n\nSee [`CONTRIBUTING.md`](./CONTRIBUTING.md) for the full contributor verification\ncommands and the canonical local cleanup path.\n\n## Local Cleanup Contract\n\nDocsiphon already ships a repo-local cleanup path for rebuildable noise:\n\n```bash\nuv run python scripts/clean_local_state.py\nuv run python scripts/clean_local_state.py --apply\n```\n\nCurrent boundary:\n\n- the script above is the default repo-local cleanup lane today\n- `build/`, `htmlcov/`, `*.egg-info/`, `__pycache__/`, `.pytest_cache/`, and\n  `.runtime-cache/temp/` are disposable local noise\n- `.venv/` is a rebuildable local environment, but it is intentionally **not**\n  part of `clean_local_state.py`\n- `_outputs/` remains operator data and is intentionally excluded from cleanup\n\nThis repository does not define a repo-owned Docker cleanup lane today, and the\ncleanup contract above should be read as repo-local only.\n\n## Documentation\n\nThe public docs surface stays intentionally thin and high-signal.\n\n- Repository map, execution model, and support boundary: `docs/README.md`\n- GitHub Pages landing page: `docs/index.md`\n- GitHub Pages repo map: `docs/repo-map.md`\n- Latest public release: `https://github.com/xiaojiou176-open/docsiphon/releases/latest`\n- Release body source for `v0.1.2`: `.github/release-body-v0.1.2.md`\n- GitHub social preview source file for repository settings:\n  `assets/docsiphon-social-preview.png`\n- Citation metadata: `CITATION.cff`\n- Copyable profile examples: `examples/README.md`\n- Downloadable example profile assets also ship on the latest release page\n- Contribution workflow: `CONTRIBUTING.md`\n- Security reporting: `SECURITY.md`\n- Support policy: `SUPPORT.md`\n\n## Collaboration\n\n- `CODEOWNERS` defines the review routing baseline\n- PR and Issue templates are part of the live repository contract\n- Current roadmap themes live in `docs/roadmap.md`\n- GitHub Discussions remains the community front door:\n  `https://github.com/xiaojiou176-open/docsiphon/discussions`\n- Generated outputs, caches, runtime state, and local editor files stay out of Git\n\n## Development Environment\n\nA minimal DevContainer is available under `.devcontainer/` for contributors who\nprefer a containerized Python 3.11 + `uv` workflow.\n\n## FAQ\n\n### Does Docsiphon require a full checkout and local setup?\n\nNo. The public-first path is `uvx --from git+https://github.com/xiaojiou176-open/docsiphon.git ...`.\nUse the contributor workflow only if you plan to hack on the repository itself.\n\n### Does it only work on sites that publish Markdown?\n\nNo. Docsiphon prefers Markdown when available, but it can fall back to HTML\nfetch and extraction when the source site does not expose a Markdown twin.\n\n### Is this a general browser automation crawler?\n\nNo. Docsiphon is optimized for documentation exports, not arbitrary product\nsurfaces that need a headless browser to render authenticated UI flows.\n\n## Security\n\nUse the process described in `SECURITY.md` for vulnerabilities or accidental\nsecret exposure. Do **not** post sensitive details in public issues.\n\n## Contributing\n\nSee `CONTRIBUTING.md` for setup, validation, and pull-request expectations.\n\n## License\n\nDocsiphon is released under the MIT License. See `LICENSE`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxiaojiou176-open%2Fdocsiphon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxiaojiou176-open%2Fdocsiphon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxiaojiou176-open%2Fdocsiphon/lists"}