Files
chemenu/docs/how-to/ingest-a-source.md
T
torbenandClaude Opus 5.5 5994b2a88c
CI / verify (push) Successful in 8m8s
CI / pwsh (push) Successful in 2m40s
Release / release (push) Successful in 35s
Release / wiki-mirror (push) Skipped
raw: fetch behind a login - raw login stores the user's session as a secret outside the tree, fetch.routes sends a host through it or to an external fetcher, a handler's render goes through the optional browser component (preflight --with browser) (#169); 10.0.0-beta.8
Files changed:
- CHANGES.md
- INSTALL.md
- VERSION
- docs/how-to/README.md
- docs/how-to/fetch-pages-behind-a-login.md
- docs/how-to/ingest-a-source.md
- docs/reference/commands/README.md
- docs/reference/commands/instance-health.md
- docs/reference/commands/raw-material-and-uploads.md
- docs/reference/configuration.md
- docs/reference/exit-codes.md
- instructions/preflight.md
- instructions/wiki-ingest/SKILL.md
- raw/CONTRACT.md
- sites/CONTRACT.md
- tools/CONTRACT.md
- tools/README.md
- tools/chemenu/browser.py
- tools/chemenu/cli_contract.py
- tools/chemenu/commands/doctor.py
- tools/chemenu/commands/raw/__init__.py
- tools/chemenu/commands/raw/fetch.py
- tools/chemenu/commands/raw/login.py
- tools/chemenu/config_shapes.py
- tools/chemenu/fetch_routes.py
- tools/chemenu/reference_doc.py
- tools/chemenu/settings.py
- tools/chemenu/sites/__init__.py
- tools/chemenu/sites/data.py
- tools/chemenu/sites/site.schema.json
- tools/chemenu/tests/test_cli.py
- tools/chemenu/tests/test_config_shapes.py
- tools/chemenu/tests/test_doctor.py
- tools/chemenu/tests/test_preflight.py
- tools/chemenu/tests/test_preflight_pwsh.py
- tools/chemenu/tests/test_raw_fetch_routes.py
- tools/chemenu/tests/test_raw_login.py
- tools/chemenu/tests/test_site_files.py
- tools/chemenu/web_capture.py
- tools/chemenu/web_session.py
- tools/preflight.ps1
- tools/preflight.sh
- tools/requirements-browser.txt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SnAJ7Z3CpVD3PRbN73QtU2
2026-10-11 20:50:23 +02:00

6.5 KiB

Ingest a source

Turn a file, a folder or a web page into wiki pages: a source page that summarises it, and the entity and concept pages it touches, cross-referenced and published. The agent does the work, using the wiki-ingest skill (skill catalogue). This page covers what you hand it and where it waits for you.

Contents

What you prepare

Put the material into incoming/ at the root of the instance. You don't have to classify it or pick a directory:

  • One file goes in directly: incoming/my-article.md.
  • Several files that belong together go into one folder, incoming/<name>/. The folder is one source. It is accepted whole, and its structure is kept.
  • A web page needs no download of your own. Name the URL to the agent, and tools/wikitool raw fetch puts two files into incoming/: the HTML exactly as received, and a text derived from it with a header recording where and when it was fetched. For the pages of a website the stack knows - Microsoft Learn, for one - the tool fetches the same page in the website's standard form (the English one, whatever language your link was in), leaves the page's menus, sign-in notice and feedback footer out of the derived text, and prints CHECK lines for what it could not do for you: the agent acts on those before it accepts the capture. Your instance can switch such a handler off, choose another language and add hint lines of its own per website; see the configuration reference. Some pages are an index of further pages - the overview of a PowerShell module on Microsoft Learn lists its cmdlet pages. The tool then says so in a CHECK line, and raw fetch <url> --scope fetches the page and those pages as one folder, incoming/<name>/, which is accepted whole like any other folder. It respects the website's robots.txt, pauses between requests and refuses a page that offers more than the instance's max_pages.
  • A document that is not text - a PDF, a Word, PowerPoint or Excel file, a mail (.eml or Outlook .msg) or a ZIP archive - is put into incoming/ as it is. tools/wikitool raw derive incoming/<file> turns it into a folder with the untouched original and a readable text beside it, with a header saying how it was made. The folder is accepted whole; the agent runs this itself when it meets such a file. An Excel file's sheets land beside the text as tab-separated files, with their formulas listed apart. A ZIP is unpacked into a folder instead, and a mail's attachments land beside it. A scanned PDF has no text to derive - the tool warns, and there is no OCR.
  • A page behind a paywall or a login is saved from your browser into incoming/, HTML only. The agent derives the same text from that file with raw fetch --html. For a website you read often, sign in once instead and let the wiki fetch it with your session: Fetch pages behind a login. When that session has expired the agent stops and asks you to run tools/wikitool raw login <host> - it never signs in itself.

Where a file ends up in raw/ is computed by tools/wikitool raw accept: a YYYY/MM shard for the day it was accepted. So is whether several files of one source get bundled. You never choose either. incoming/ itself is gitignored, so whatever waits there is never published by accident.

What you say

Ingest incoming/my-article.md
Ingest https://example.org/post
Ingest

A bare Ingest takes the oldest entry waiting in incoming/. tools/wikitool raw pending lists what is waiting and names the entry the next bare Ingest will take.

Where the agent asks you

  • Before promoting the file into raw/, the agent asks how faithful the capture is (fidelity) and what the material may claim about its subject (authority). Both are recorded once and never guessed: you know the answers now, and nobody can recover them later. raw/CONTRACT.md defines the values.
  • Before writing pages, the agent presents the key takeaways and asks which points matter most and what to emphasise. The pages follow your answer.
  • When it publishes, a source that touches ten or more files stops at the Mass-Update Gate (exit 42). The generated indexes, kb/log.md and kb/provenance.md do not count, so a small source goes straight through. The agent shows you the file list and the --confirm line. Nothing is committed until you approve. Exit codes and gates lists every gate.

What you get back

A source page under kb/sources/, new or updated entity and concept pages, cross-references among them, a rebuilt catalog, an entry in kb/log.md, and one commit. If the source also contains something you have to do, and a task tracker is configured, the agent files it there as an open item. A commitment never becomes a page (why).

Every ten sources, the agent suggests a lint run - see Maintain the wiki.

A document submitted from outside

When the MCP read server has its optional submit tool turned on, documents can arrive from another machine. They land in the quarantine mcp-upload/, not in incoming/, and nothing else reads them there. Before an ingest can start, a human has to promote the submission:

tools/wikitool upload list            # what is waiting
tools/wikitool upload show <id>       # one submission's manifest: who sent it, size, checksum

Ask the agent to review the queue, and it follows instructions/ingest-queue.md. Accepting a submission stops at the Upload Review Gate (exit 42), which shows you the manifest and the --confirm line. Once you approve, the file is in incoming/, and from there it is ingested like any other. Rejecting it needs no clearance. The file is deleted, and its checksum and your reason stay in the ledger.