Upload files or raw text into a Senso knowledge base. Handles file upload via presigned URLs, raw text/markdown creation, folder targeting, and processing status polling. Use when the user wants to add documents, files, or text content to their Senso KB.
npx @senso-ai/shipables install senso-ai/senso-ingestAdd documents and text content to a Senso knowledge base. The CLI handles the full upload flow — reading files, computing hashes, requesting presigned S3 URLs, and uploading.
npm install -g @senso-ai/cli
export SENSO_API_KEY=<your-key>
Every senso command must include --output json --quiet.
Upload local files to the knowledge base. The CLI handles hashing, presigned URL requests, and S3 upload automatically.
senso ingest upload <file1> <file2> ... --output json --quiet
Constraints:
Upload to a specific folder:
senso kb upload <file1> <file2> --folder-id <kb_node_id> --output json --quiet
The kb upload command accepts a --folder-id option to place files into a specific KB folder. Without it, files go to the root.
Response includes:
summary.total — number of files submittedsummary.success — number accepted for uploadsummary.skipped — number skipped (duplicate, conflict, invalid)results[] — per-file status with content_id for each accepted filePer-file statuses:
upload_pending — file accepted and uploaded to S3duplicate — identical file already exists (check existing_content_id)conflict — filename conflictinvalid — unsupported format or other validation errorCreate a content item directly from text or markdown without uploading a file:
senso kb create-raw --data '{
"title": "My Document",
"text": "# Heading\n\nContent goes here...",
"kb_folder_node_id": "<parent-folder-uuid>"
}' --output json --quiet
The kb_folder_node_id is optional — omit it to create at the root level. The text field accepts plain text or markdown.
To update an existing content item with a new version of a file:
senso ingest reprocess <kb_node_id> <new-file-path> --output json --quiet
Or using the KB command:
senso kb update-file <kb_node_id> <new-file-path> --output json --quiet
This replaces the file on the existing node and triggers background re-processing.
When the user asks to upload files, follow these steps:
If the user wants files in a specific folder:
# List top-level folders
senso kb my-files --output json --quiet
# Search for a folder by name
senso kb find --query "folder name" --output json --quiet
# Create a new folder if needed
senso kb create-folder --name "New Folder" --output json --quiet
# Create a folder inside another folder
senso kb create-folder --name "Subfolder" --parent-id <parent_kb_node_id> --output json --quiet
senso ingest upload report.pdf handbook.docx --output json --quiet
Or with a target folder:
senso kb upload report.pdf handbook.docx --folder-id <kb_node_id> --output json --quiet
After upload, files are parsed, chunked, and embedded by a background worker. Check status:
senso kb sync-status --output json --quiet
To check a specific content item's processing status:
senso content get <content_id> --output json --quiet
Look for processing_status:
processing — still being parsed and embeddedcomplete — ready for searchfailed — processing errorOnce processing is complete, verify the content is searchable:
senso search "a term from the uploaded document" --max-results 1 --output json --quiet
To update text/markdown content that was created with kb create-raw:
Full replacement (overwrites all fields):
senso kb update-raw <kb_node_id> --data '{
"title": "Updated Title",
"text": "# New content\n\nReplacement text..."
}' --output json --quiet
Partial update (only changes specified fields):
senso kb patch-raw <kb_node_id> --data '{
"title": "Just Update the Title"
}' --output json --quiet
| HTTP Status | Meaning | Action |
|---|---|---|
| 401 | Invalid or missing API key | Check SENSO_API_KEY |
| 402 | Insufficient credits | Check balance with senso credits --output json --quiet |
| 409 | Conflict (e.g., duplicate file) | Check the existing_content_id in the response — the file may already exist |
| 422 | Unprocessable — invalid file format or data | Verify the file format is supported |
duplicate status with the existing_content_idsenso kb sync-status shows the index is up to date before relying on search results for newly uploaded contentSENSO_API_KEYSenso API key for authenticating CLI commands