Skip to main content
A requirement source is any document Kane CLI saves as a snapshot in the context graph, so that use-cases can be extracted from it and cited back to it. You add sources with kane-cli context ingest. When a source changes later, maintain reconcile --from accepts the same URLs. Kane CLI accepts only the media types listed on this page. Anything else is rejected with UNSUPPORTED_MEDIA. Each type has its own size cap, and a larger file is refused with FILE_TOO_LARGE.

Supported sources at a glance

The citation granularity column shows how precisely the agent can point at evidence in each type of source.

Files

Text and structured text

Accepted extensions are .txt, .md and .markdown, plus the structured-text formats .json, .yaml and .yml, .toml, .xml, and .log. Each line can be cited word for word. The size cap is 2 MB. Structured files are ingested as they are, so even a malformed JSON file can be cited as evidence. Files must be valid UTF-8; otherwise the ingest refuses with ENCODING_UNSUPPORTED. A file with very long lines, such as minified JSON, is ingested with a warning, because each line anchor then covers too much text to be a useful citation. Pretty-print the file first if you want precise citations.

Images

PNG, JPEG and WebP, up to 5 MB. An image is cited as a whole, because it has no text to quote.

PDF

Up to 25 MB. The document’s text becomes the text you can cite, marked by page, and any embedded images become citable parts of the same source. A PDF must have selectable text. A scanned document is refused with PDF_NO_TEXT_LAYER, and a password-protected one with PDF_ENCRYPTED. Every refusal tells you how to fix it, such as splitting a very large document or saving an encrypted one again.

Word documents

.docx files up to 25 MB. Kane CLI converts the document to plain text covering the body, headers and footers, footnotes, and tables. Tracked changes appear as the final version. Embedded images become citable parts. Any content that cannot be extracted is replaced by an explicit marker, so nothing disappears silently. Password-protected files and the older binary .doc format are refused, with guidance on which format to save as.

Remote sources

You pass a remote source as a URL instead of a file path. Each type needs the matching connection on your account, which you set up in the Integrations screen. If the connection is missing or expired, the ingest refuses before doing anything and points you to that screen.

Jira issues

Kane CLI ingests the summary, the description, custom fields, the list of attachments (image attachments become citable parts), and all comments with their author, timestamp and body. Every line can be cited. Comments are part of the issue’s identity. If they cannot be read, the whole ingest is refused rather than recording the issue without them. Ingesting the same URL again results in unchanged or versioned, exactly as for a file you ingest again. The default source id is the issue key in lowercase, and --as overrides it. Each refusal tells you what to do in the Integrations screen:
  • An expired Atlassian connection: resync it.
  • A missing connection: create one.
  • An issue outside the integration’s selected projects: add that project.
The issue’s project must be one of the integration’s selected projects. An issue from any other project is refused, and the message points you to the Integrations screen so you can add the project.

Confluence pages

Jira and Confluence use the same Atlassian connection, but the connection needs Confluence access. A Jira-only connection is refused before anything is read, with guidance to reconnect. Kane CLI ingests the title, space, labels, the page body (every line can be cited), and the list of attachments, with image attachments as citable parts. Ingesting the page again reads its latest version, and identity follows the content. An edit that changes nothing you would cite, or a version number change on its own, is unchanged. A change to the body is versioned, and items extracted from the old snapshot become stale. The default source id is page-<id>. Short links such as /wiki/x/... are not supported. Open the page and use its full URL.

Linear issues

URLs that point to the same issue with a different slug, a query string, or a #comment fragment all resolve to one source. Kane CLI ingests the title, the description (every line can be cited), the workflow fields (status, priority, project and labels), all comments including threaded replies, and images, both inline and attached, as citable parts. Attachment links to other apps are listed but never fetched. As with Jira, comments are part of the issue’s identity, so if the comments cannot be read in full, the whole ingest is refused. Identity follows the issue itself:
  • If a team key is renamed, the same source continues as a versioned update.
  • If a key is recycled, meaning the same key now points at a different issue, the ingest is refused and offers two ways to recover: retire the existing source, or use --as.
The default source id is the key in lowercase, for example eng-42, and --as overrides it.

Linear documents

The slug must end in the document’s 12-character hexadecimal id. The connection needs access to documents; if it does not have it, the refusal tells you to resync. Kane CLI ingests the document body (every line can be cited) and its inline images. The default id is doc-<id>, and --as overrides it. Workspace pages, meaning project, team or view URLs, cannot be ingested and are refused with a clear message. Ingest their issues or documents one at a time instead.

Public web pages

Use this for any public page URL that is not a Jira issue, a Confluence page, or a Linear issue or document. The service fetches the page and converts it to text, with every line citable. The CLI itself never fetches pages. The default id is a slug of the URL plus a short hash, so the same URL always maps to the same source. --as lets you choose a custom id. If you ingest a different URL under an id you already chose, Kane CLI asks first on a terminal and refuses when headless, so keep separate pages under separate ids. Ingesting an unchanged page again is unchanged. A change to the content is versioned, and items extracted from the old snapshot become stale. Changes to the title, redirects, status, or timestamps never move the head (the source’s current version). A web source always reads the live page; you cannot read the page as it was at an earlier time. If a page cannot be read because it is not found, requires a login or a paywall, blocks bots, is not HTML, is too large, or times out, the ingest is refused with the reason in plain language. Private and internal addresses are refused.

Remote ids share one space

A Jira ENG-42 and a Linear ENG-42 both create the source id eng-42. If a URL’s id already belongs to a different kind of source, the ingest refuses and offers a way to recover: retire the existing source, or ingest the new one under a different id with --as. Kane CLI never replaces a source silently.
A Linear page stored in your graph as a web source stays a separate source. It does not merge with the same page ingested as a Linear issue or document. Retire the web source, or keep both knowing they stay separate.

Keeping a source current

When a source document changes, use kane-cli maintain reconcile instead of a plain re-ingest. Reconcile records the same new version and works out what the change means for your suite, in one step. It accepts the same remote URLs listed on this page.

Next steps