.claude/skills/senso-ingest/SKILL.md
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 skillsauth add kvn8888/MultiModalAgentsHackathon senso-ingestInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Add 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 contenttesting
Search a Senso knowledge base for verified answers, context chunks, or content IDs. Use when the user asks a question that should be grounded in organizational knowledge, says "check Senso", or needs factual answers backed by verified documents.
documentation
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.
development
the best framework to build agent for claude code.
development
PermitPulse project skill — the living source of truth for this repository. Read this skill at the start of every new session to understand the project, its architecture, tech stack, APIs, file layout, and current feature status. Update this skill whenever features are added, changed, or removed so future LLM sessions never need to re-learn the codebase from scratch.