Skip to Content
We are live but in Staging 🎉
PipelinesCLI Guidedodil k3 ingest

dodil k3 ingest

Rules, triggers, and jobs. Aliased as dodil k3 rule. The single group covers three concerns:

  • Rule lifecycle — full CRUD: add, get, list, update, delete
  • Sync triggerstrigger (dispatch matched objects), trigger-discovery (scan source for new objects)
  • Jobsjobs (list ingest jobs in a bucket)

--bucket / -b is persistent on the group.

Rules

dodil k3 ingest add

dodil k3 ingest add [name] \ -b BUCKET \ --source SOURCE_ID \ --collection PIPELINE_ID \ [--include PATTERN] [--include PATTERN ...]

Creates an ingest rule. The --collection flag maps to the API’s pipeline_id — historical naming the CLI hasn’t caught up on.

FlagShortTypeDescription
--bucket-bstringRequired (persistent).
--source-sstringRequired. Source ID the rule fires against.
--collection-cstringRequired. Pipeline ID (despite the name) to bind to.
--include-istring listInclude glob patterns (case-insensitive, supports * / ** / ? — see Glob syntax). Default: **/* (match everything). Repeatable.

Examples:

# Index all PDFs under contracts/ via your embedding pipeline dodil k3 ingest add pdf-rule \ -b kb-prod \ --source "$SOURCE_ID" \ --collection "$PIPELINE_ID" \ --include "contracts/**/*.pdf" # Match anything (default --include) dodil k3 ingest add all-rule \ -b kb-prod \ --source "$SOURCE_ID" \ --collection "$PIPELINE_ID" # Multiple include patterns dodil k3 ingest add docs-rule \ -b kb-prod \ --source "$SOURCE_ID" \ --collection "$PIPELINE_ID" \ --include "docs/**/*.pdf" \ --include "docs/**/*.md"

Exclude patterns, MIME filters, size thresholds, and priority aren’t on CLI flags today. Set them via UpdateRule over the API after add, or create the rule via the API directly with CreateRule.

dodil k3 ingest get

dodil k3 ingest get [rule_id] -b BUCKET

Example:

dodil k3 ingest get rule_a1b2... -b kb-prod -o json

dodil k3 ingest list

dodil k3 ingest list -b BUCKET [-s SOURCE_ID] [-p PIPELINE_ID]
FlagShortDescription
--source-sFilter by source ID
--pipeline-pFilter by pipeline ID

Examples:

# All rules in the bucket dodil k3 ingest list -b kb-prod -o json # Filter by source dodil k3 ingest list -b kb-prod -s "$SOURCE_ID" -o json # All rules bound to a specific pipeline (useful when you have multiple sources feeding one pipeline) dodil k3 ingest list -b kb-prod -p "$PIPELINE_ID" -o json

dodil k3 ingest update

dodil k3 ingest update [rule_id] -b BUCKET [flags]

Patches mutable fields on a rule. Pass only the flags you want to change.

FlagTypeDescription
--namestringRename the rule
--descriptionstringReplace description
--includestring listReplace include glob patterns (empty = clear)
--excludestring listReplace exclude glob patterns (empty = clear)
--include-mimestring listReplace include MIME types (empty = clear)
--exclude-mimestring listReplace exclude MIME types (empty = clear)
--min-sizeint64Minimum object size in bytes
--max-sizeint64Maximum object size in bytes (0 = no limit)
--enabledboolEnable (true) or disable (false) — pauses the rule without deleting it
--priorityint32Higher value = matched first
--pipelinestringRe-bind the rule to a different pipeline ID

Examples:

# Pause a rule without deleting it dodil k3 ingest update rule_a1b2... -b kb-prod --enabled=false # Re-enable dodil k3 ingest update rule_a1b2... -b kb-prod --enabled=true # Tighten the include set dodil k3 ingest update rule_a1b2... -b kb-prod --include "contracts/2026/*.pdf" # Add MIME filtering on top dodil k3 ingest update rule_a1b2... -b kb-prod \ --include-mime application/pdf # Re-bind to a new pipeline (e.g. after spawning a v2 pipeline) dodil k3 ingest update rule_a1b2... -b kb-prod --pipeline pipe_new... # Combine — rename + change priority + re-enable dodil k3 ingest update rule_a1b2... -b kb-prod \ --name "contracts-rule-v2" \ --priority 200 \ --enabled=true

List-typed flags REPLACE the existing values. --include with an empty list clears the include set; with one or more patterns it replaces the whole set. Same for --exclude, --include-mime, --exclude-mime. To accumulate, list-get the existing values first, then pass the combined list.

dodil k3 ingest delete

dodil k3 ingest delete [rule_id] -b BUCKET

Example:

dodil k3 ingest delete rule_a1b2... -b kb-prod

Existing in-flight jobs continue; new ones stop. To pause without deleting, use update --enabled=false above.

Sync triggers

dodil k3 ingest trigger-discovery

Scans a source for new / changed objects.

dodil k3 ingest trigger-discovery -b BUCKET -s SOURCE_ID [--rule RULE_ID] [--full-sync]
FlagShortTypeDescription
--source-sstringRequired. Source to scan.
--rule-rstringScope discovery to one rule’s matchers
--full-syncboolIgnore the source’s checkpoint and rescan from scratch

Examples:

# Delta scan dodil k3 ingest trigger-discovery -b kb-prod -s "$SOURCE_ID" # Full rescan (after fixing pipeline options / rules) dodil k3 ingest trigger-discovery -b kb-prod -s "$SOURCE_ID" --full-sync # Narrow to one rule's matchers dodil k3 ingest trigger-discovery -b kb-prod -s "$SOURCE_ID" --rule "$RULE_ID"

dodil k3 ingest trigger

Dispatches already-discovered objects to ingest — replay / backfill.

dodil k3 ingest trigger -b BUCKET -s SOURCE_ID \ [--rule RULE_ID] [--source-object-id OBJ_ID] [--retry-failed]
FlagShortTypeDescription
--source-sstringRequired. Source to ingest from.
--rule-rstringRestrict to one rule’s pending objects
--source-object-idstringRestrict to a single source-object row
--retry-failedboolInclude objects in FAILED / PARTIAL status

Examples:

# Replay all failed/partial objects dodil k3 ingest trigger -b kb-prod -s "$SOURCE_ID" --retry-failed # Replay a single object dodil k3 ingest trigger -b kb-prod -s "$SOURCE_ID" --source-object-id obj_a1b2...

One-shot single-object ingest (without going through a source’s queue) is TriggerIngest on the API — not currently in the CLI.

Jobs

dodil k3 ingest jobs

dodil k3 ingest jobs -b BUCKET [-r RULE_ID] [-p PIPELINE_ID]

Lists all ingest jobs in the bucket. Filter by rule and/or pipeline.

FlagShortDescription
--rule-rFilter by rule ID
--pipeline-pFilter by pipeline ID

Examples:

# All jobs in the bucket dodil k3 ingest jobs -b kb-prod -o json # Only jobs from one rule dodil k3 ingest jobs -b kb-prod -r "$RULE_ID" -o json # All jobs for one pipeline (useful when the pipeline has multiple rules feeding it) dodil k3 ingest jobs -b kb-prod -p "$PIPELINE_ID" -o json # Failed jobs only (status filter is still client-side via jq) dodil k3 ingest jobs -b kb-prod -o json \ | jq '.jobs[] | select(.status == "INGEST_STATUS_FAILED")'

Status enum, counters, and Scriptum thread linkage are documented at Core Concepts → IngestJob.

Server-side status_filter is supported on the API but not as a CLI flag today — filter client-side with jq as above.


See also