Upload a file to the Content Search backend and poll the ingestion task until the file is fully indexed (status COMPLETED).

Apache-2.0Auto-check passedDocuments & Office

Install Sc Upload

skills CLI
$ npx skills add open-edge-platform/edge-ai-suites --skill sc-upload -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install open-edge-platform/edge-ai-suites sc-upload --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/open-edge-platform/edge-ai-suites.git skills-src && mkdir -p .claude/skills && cp -r skills-src/education-ai-suite/.github/skills/sc-upload .claude/skills/sc-upload && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
sc-upload
GitHub stars
140
Token cost
~2.6k tokens
SKILL.md length
841 words
Files
2 (incl. references)
Skills in repo
13
Repo updated
First seen
Licence
Apache-2.0

At a glance

Upload a file to the Content Search backend and poll the ingestion task until the file is fully indexed (status COMPLETED).

  • Works in 4 steps: Upload and trigger ingestion → Poll task status until complete → Confirm the file appears in the index → …
  • The user says upload a file
  • SKILL.md covers Preconditions, 1. Upload and trigger ingestion, 2. Poll task status until… and 3. Confirm the file appears in…, plus 4 more sections
  • Needs FILE_KEY

What it does

Sc Upload is an agent skill from open-edge-platform/edge-ai-suites. Upload a file to the Content Search backend and poll the ingestion task until the file is fully indexed (status COMPLETED). Handles duplicate detection (code 40901), cleanup-and-retry, and task timeout. Supported file types: pdf, txt, docx, doc, pptx, ppt, xlsx, xls, jpg, jpeg, png, mp4, avi, mov, mkv. Use when the user says "upload a file", "ingest a document", "upload pdf", "index a file", "add course material", "upload video", "upload image", or "ingest content".

Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/upload-request.md`).

It sits in Documents & Office, covering PowerPoint presentations, Word documents and Excel spreadsheets. It works with Microsoft Excel, Microsoft PowerPoint and Microsoft Word. The repository describes itself as: A curated collection of sample applications intended for reference in developing optimized AI solutions and testing hardware performance across various industry use cases. The licence is Apache-2.0.

When your agent uses it

  • The user says upload a file
  • Ingest a document
  • Add course material

Example prompts

  • “upload a file”
  • “ingest a document”
  • “upload pdf”
  • “/sc-upload”

Requirements

  • A credential in FILE_KEY

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Upload and trigger ingestion
  2. Poll task status until complete
  3. Confirm the file appears in the index
  4. Advanced Backend Features

What it can do on your machine

Read from SKILL.md and the folder at commit 6e2ba00. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are powershell and json).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • FILE_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Sc Upload loads about 2.6k tokens when it runs, and up to ~3.1k if it reads all its reference files. Until then it costs about 120 tokens; SKILL.md has 841 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~120
When it runs · the whole SKILL.md, loaded when a task matches
~2.6k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~3.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from open-edge-platform/edge-ai-suites at commit 6e2ba00, republished under its Apache-2.0 licence (© open-edge-platform). 841 words, ~2,578 tokens.

Download SKILL.mdSave it as .claude/skills/sc-upload/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
sc-upload
description
Upload a file to the Content Search backend and poll the ingestion task until the file is fully indexed (status COMPLETED). Handles duplicate detection (code 40901), cleanup-and-retry, and task timeout. Supported file types: pdf, txt, docx, doc, pptx, ppt, xlsx, xls, jpg, jpeg, png, mp4, avi, mov, mkv. Use when the user says "upload a file", "ingest a document", "upload pdf", "index a file", "add course material", "upload video", "upload image", or "ingest content".

SC Upload

Upload a file to the Content Search backend and wait for ingestion to complete. Agent: execute every command below directly using your terminal tool and relay the output. Endpoints use the base URL http://127.0.0.1:9011.

Set $BASE = "http://127.0.0.1:9011" for all snippets.


Preconditions

Set corporate proxy (required for any outbound download; localhost API calls bypass it)

Probe health first — if the backend is unreachable, use sc-doctor / sc-up:

powershell
$BASE = "http://127.0.0.1:9011"
# 200 = all services ready; 503 = degraded, body names the failing one
try   { (Invoke-WebRequest -Uri "$BASE/api/v1/system/health" -UseBasicParsing).Content }
catch { $_.ErrorDetails.Message }

The file must be one of the supported extensions: pdf, txt, docx, doc, pptx, ppt, xlsx, xls, jpg, jpeg, png, mp4, avi, mov, mkv.


1. Upload and trigger ingestion

🤖 Agent instruction: Before executing the command below, use the vscode_askQuestions tool to:

  1. Get the file path to upload (user must provide full path)
  2. Optionally ask for tags (comma-separated, e.g., "knowledge,ai,tutorial")

POST /api/v1/object/upload-ingest is a multipart form request with two fields:

  • file — the binary file
  • meta — a JSON string with optional metadata (tags, description)

See references/upload-request.md for the full meta schema.

powershell
$BASE     = "http://127.0.0.1:9011"
# Agent: Set $FilePath to the user-provided file path from ask_user
$FilePath = "<USER_PROVIDED_FILE_PATH>"
# Agent: Set $Tags to user-provided tags (or empty string if none)
$Tags     = "<USER_PROVIDED_TAGS_OR_EMPTY>"

# Determine file type from extension
$extension = [System.IO.Path]::GetExtension($FilePath).TrimStart('.').ToLower()
$fileType = switch ($extension) {
    { $_ -in @('pdf','txt','docx','doc','pptx','ppt','xlsx','xls') } { "document" }
    { $_ -in @('jpg','jpeg','png') } { "image" }
    { $_ -in @('mp4','avi','mov','mkv') } { "video" }
    default { "document" }
}

$fileName = [System.IO.Path]::GetFileName($FilePath)

# Manually construct JSON to ensure tags is always an array (not a string)
if ($Tags) {
    $tagsList = ($Tags -split ',' | ForEach-Object { "`"$($_.Trim())`"" }) -join ","
    $meta = "{`"file_name`":`"$fileName`",`"type`":`"$fileType`",`"tags`":[$tagsList]}"
} else {
    $meta = "{`"file_name`":`"$fileName`",`"type`":`"$fileType`"}"
}

# Build multipart form and POST
Add-Type -AssemblyName System.Net.Http
$client   = [System.Net.Http.HttpClient]::new()
$content  = [System.Net.Http.MultipartFormDataContent]::new()
$fileBytes = [System.IO.File]::ReadAllBytes($FilePath)
$fileContent = [System.Net.Http.ByteArrayContent]::new($fileBytes)
$fileContent.Headers.ContentType =
    [System.Net.Http.Headers.MediaTypeHeaderValue]::Parse("application/octet-stream")
$content.Add($fileContent, "file", $fileName)
$content.Add([System.Net.Http.StringContent]::new($meta), "meta")

$response = $client.PostAsync("$BASE/api/v1/object/upload-ingest", $content).Result
$body     = $response.Content.ReadAsStringAsync().Result | ConvertFrom-Json
$body | ConvertTo-Json -Depth 5

Expected response:

json
{
  "code": 20000,
  "data": {
    "task_id": "<TASK_ID>",
    "status": "PROCESSING",
    "file_key": "<FILE_KEY>"
  },
  "message": "Success",
  "timestamp": 1234567890
}

Duplicate detection: if code == 40901, the file already exists (detected by SHA256 hash). The response includes the existing task_id and file_hash. Re-upload is allowed if the previous task status is FAILED. Go to step 1b (cleanup and retry) or skip directly to step 2 to poll the existing task.

1b. Handle duplicate (code 40901)

The cleanup endpoint deletes:

  • Entire run directory: runs/{run_id}/ (raw files, derived files, OCR outputs)
  • ChromaDB vector index entries
  • FileAsset database record
  • AITask database record
powershell
# Agent: Extract task_id from the 40901 response ($body.data.task_id)
$TASK_ID = $body.data.task_id
Invoke-WebRequest -Uri "$BASE/api/v1/object/cleanup-task/$TASK_ID" `
    -Method Delete -UseBasicParsing
# Now retry the upload from step 1

[!NOTE] Cleanup fails if the task status is PROCESSING. Wait for completion or failure first.


2. Poll task status until complete

Poll GET /api/v1/task/query/{task_id} every 3 seconds. Terminal statuses are COMPLETED and FAILED.

[!NOTE] The progress field is always 100 (hardcoded) and is not a real progress indicator. Status transitions are: QUEUED → PROCESSING → COMPLETED/FAILED.

powershell
# Agent: Extract $TASK_ID from the response in step 1 ($body.data.task_id)
$TASK_ID = $body.data.task_id
$deadline = (Get-Date).AddMinutes(10)

do {
    Start-Sleep -Seconds 3
    $r = Invoke-WebRequest -Uri "$BASE/api/v1/task/query/$TASK_ID" `
         -UseBasicParsing
    $task = ($r.Content | ConvertFrom-Json).data
    Write-Host "[$([datetime]::Now.ToString('HH:mm:ss'))] status=$($task.status)  progress=$($task.progress)"

    if ($task.status -in @("COMPLETED","FAILED")) { break }
} while ((Get-Date) -lt $deadline)

Write-Host "Final status: $($task.status)"
  • COMPLETED → file is indexed and ready for Q&A. Note the file_key for deletion later. If the file is a PDF and OCR is enabled, the result will include ocr_text_key. If video summarization was requested, result includes video_summary and video_summary_status.
  • FAILED → ingestion error. Read task.result.error for the reason; check backend logs with sc-doctor. Failed tasks trigger automatic cleanup of FileAsset, physical file, and ChromaDB entries.
  • Timeout (10 min) → the backend is overloaded or stalled. Check sc-doctor.

3. Confirm the file appears in the index

powershell
$r = Invoke-WebRequest -Uri "$BASE/api/v1/object/files/list?page=1&page_size=20" `
     -UseBasicParsing
$files = ($r.Content | ConvertFrom-Json).data.files
$files | Select-Object file_name, @{N="type";E={$_.meta.type}}, @{N="vectors";E={$_.index.vector_count}}, status |
    Format-Table -AutoSize

Note: The file is searchable when the task status is COMPLETED. Vector indexing may take a few additional seconds to appear in the list, but the task completion is the source of truth for searchability.


4. Advanced Backend Features

OCR Processing (PDFs)

When OCR_ENABLED=true (environment variable), PDF files are automatically processed:

  1. External OCR service is called at http://127.0.0.1:8000 (timeout: 120s)
  2. Extracted text is saved as .ocr.txt file in the same run directory
  3. Vector indexing uses the OCR text file instead of the original PDF
  4. The task.result includes ocr_text_key pointing to the extracted text
Video Summarization

When VIDEO_SUMMARIZATION_ENABLED=true (default), videos can be summarized:

  1. Pass vs_enabled: true in the meta object to enable per-file
  2. Optionally provide prompt and chunk_duration in the upload request
  3. Summarization runs AFTER the task is marked COMPLETED (file is already searchable)
  4. The task.result includes video_summary and video_summary_status
  5. Generated summaries are stored in runs/{run_id}/derived/
Show full SKILL.md (312 more words)Show less
File Integrity Validation

PDF and video files (PDF, MP4, AVI, MOV, MKV) undergo integrity validation:

  • PDF: checked for valid structure
  • Video: validated for proper format and codec
  • Corrupted files result in FAILED task with error_type: "corrupted_file"
Automatic Cleanup on Failure

When indexing fails, the backend automatically cleans up:

  • FileAsset database record
  • Physical file in storage
  • ChromaDB vector index entries

This prevents orphaned data and allows re-upload with the same file.


Response Codes Reference

CodeMeaningAction
20000SuccessContinue to next step
40000Bad requestCheck request parameters
40002Invalid fileFile failed validation (unsupported type)
40901File already exists (duplicate)Cleanup and retry, or poll existing task
41301File too largeReduce file size or increase backend limits
50002Task not foundTask may have expired or been deleted
50003Process failedCheck backend logs for details

Troubleshooting

SymptomLikely causeAction
code: 40901File already exists (duplicate hash)Cleanup task (step 1b) then retry, or skip to step 2 if re-uploading after FAILED task
code: 40002Invalid/unsupported file typeCheck file extension against allowed list; convert to supported format
code: 41301File too largeDefault limits: documents 100MB, videos 1024MB; check/update env vars DOCUMENT_MAX_MB, VIDEO_MAX_MB
FAILED statusIngestion pipeline errorCheck task.result.error; check backend logs via sc-doctor
Timeout after 10 minBackend overloaded or stalledRestart backend (sc-up); reduce file size
Connection reset during uploadLarge video upload timeoutBackend accepts large files; check network/firewall settings
Corrupted file errorFile integrity check failedRe-download or re-export the file; ensure proper encoding
OCR timeoutOCR service unavailableEnsure OCR service is running at port 8000; check OCR_ENABLED env var

Output

Report: task_id → status polling log → final COMPLETED → file appears in GET /api/v1/object/files/list.

Note: Task COMPLETED status means the file is searchable. Vector counts in the file list may take a few seconds to update, but searchability is determined by task completion.

© open-edge-platform, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (references) in education-ai-suite/.github/skills/sc-upload of open-edge-platform/edge-ai-suites.

  • SKILL.md
  • references/upload-request.md

Open the folder on GitHubat commit 6e2ba00

Compare with similar skills

Sc Upload next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Sc Upload compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Sc Upload this skillopen-edge-platform/edge-ai-suites140—~2.6kAutomated safety check: PassApache-2.0
MarkitdownImCa0/just-laws78114 repos~3.2kAutomated safety check: NotesMIT
Markitdownjimmc414/Kosmos5942 repos~1.7kAutomated safety check: PassNone
Office DocumentsZS520L/HanakoPro102—~1.6kAutomated safety check: PassApache-2.0
PaperJSX Document Generatorcomposio-community/awesome-codex-skills17k—~842Automated safety check: PassApache-2.0
Skill Doc Deliverynyldn/claude-octopus4.2k1 repos~2.4kAutomated safety check: PassMIT

Similar skills

  • Markitdown

    ImCa0/just-laws

    Convert files and office documents to Markdown. An agent skill from ImCa0/just-laws.

    781 GitHub starsUsed in 14 repos~3.2k tokens
    Documents & OfficeAuto-check: notes
  • Markitdown

    jimmc414/Kosmos

    Convert various file formats (PDF, Office documents, images, audio, web content, structured data) to Markdown optimized for LLM processing.

    594 GitHub starsUsed in 2 repos~1.7k tokens
    Documents & OfficeAuto-check passed
  • Office Documents

    ZS520L/HanakoPro

    A skill your agent uses when the user asks to open, read, inspect, understand, summarize, analyze, extract tables/text from, modify, update, repair, split, merge, rotate, or convert information from…

    102 GitHub stars~1.6k tokensUpdated 4 mo ago
    Documents & OfficeAuto-check passed
  • PaperJSX Document Generator

    composio-community/awesome-codex-skills

    Generates PPTX, DOCX, XLSX and PDF files from a JSON layout spec through PaperJSX's packages, creating new documents rather than editing them.

    17k GitHub stars~842 tokensUpdated 2 mo ago
    Documents & OfficeAuto-check passed
  • Skill Doc Delivery

    nyldn/claude-octopus

    Convert markdown to DOCX, PPTX, XLSX, PDF office documents — use when you need exportable deliverables

    4.2k GitHub starsUsed in 1 repo~2.4k tokens
    Documents & OfficeAuto-check passed
  • Exam Ingest

    ZeKaiNie/universal-examprep-skill

    从学生上传的课件/大纲/老师勾的重点/真题,一键初始化并验证备考工作区:解析 PDF、DOCX、PPTX、 XLSX、常见独立图片与 txt/md,建立分章节 LLM Wiki、标准题库、结构化接管队列与进度状态;仅在 Python 确实无法运行时 明确降级为手动写盘。当工作区尚未建立、资料发生变化、或建库 readiness 被阻断时使用。

    303 GitHub stars~5.6k tokensUpdated 10 days ago
    Documents & OfficeAuto-check passed

More from open-edge-platform/edge-ai-suites

All 13 skills in this repo
  • Onboarding Validation

    open-edge-platform/edge-ai-suites

    Validate the get-started experience of Open Edge Platform (OEP) software components from the perspective of a first-time user.

    140 GitHub stars~3.3k tokensUpdated yesterday
    Auto-check passed
  • Sc QA

    open-edge-platform/edge-ai-suites

    Ask a natural-language question against indexed content via the Content Search RAG Q&A endpoint.

    140 GitHub stars~2.3k tokensUpdated yesterday
    Auto-check passed
  • Uav Vision Analytics

    open-edge-platform/edge-ai-suites

    Build an end-to-end UAV object detection and telemetry overlay application on Intel hardware using DL Streamer Pipeline Server with MAVLink telemetry.

    140 GitHub stars~2.6k tokensUpdated yesterday
    Auto-check: notes
  • Knowledgebase

    open-edge-platform/edge-ai-suites

    Generic RAG query skill - Retrieve any information from the local knowledge base and generate structured reports, summaries, or Q&A responses.

    140 GitHub stars~900 tokensUpdated yesterday
    Auto-check passed
  • Lvc Run App

    open-edge-platform/edge-ai-suites

    Run, start, or smoke-test the Live Video Captioning app (Docker Compose stack with dashboard on :4173).

    140 GitHub stars~796 tokensUpdated yesterday
    Auto-check passed
  • Sc Doctor

    open-edge-platform/edge-ai-suites

    Diagnose Content Search backend availability by probing the health endpoint, then surface connectivity issues between Flutter and backend when unhealthy.

    140 GitHub stars~1.4k tokensUpdated yesterday
    Auto-check: notes

Questions about Sc Upload

What does Sc Upload do?

Upload a file to the Content Search backend and poll the ingestion task until the file is fully indexed (status COMPLETED). Sc Upload is an agent skill from open-edge-platform/edge-ai-suites. Upload a file to the Content Search backend and poll the ingestion task until the file is fully indexed (status COMPLETED).

When should I use Sc Upload?

Sc Upload fits situations like: the user says upload a file; ingest a document; add course material.

How do I install Sc Upload in Claude Code?

Run `npx skills add open-edge-platform/edge-ai-suites --skill sc-upload -a claude-code`. Or copy the skill folder (education-ai-suite/.github/skills/sc-upload in open-edge-platform/edge-ai-suites) into .claude/skills/sc-upload in your project. Claude Code loads it when a task matches its description.

How do I install Sc Upload in Codex?

Run `npx skills add open-edge-platform/edge-ai-suites --skill sc-upload -a codex`. Or copy the skill folder (education-ai-suite/.github/skills/sc-upload in open-edge-platform/edge-ai-suites) into .agents/skills/sc-upload in your project. Codex loads it when a task matches its description.

Can I use Sc Upload in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add open-edge-platform/edge-ai-suites --skill sc-upload -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/sc-upload, .gemini/skills/sc-upload, .github/skills/sc-upload and .opencode/skills/sc-upload in your project.

What does Sc Upload need to run?

Going by SKILL.md and its folder, Sc Upload needs credentials named FILE_KEY. Our summary lists: A credential in FILE_KEY.

Does Sc Upload access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Sc Upload safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Sc Upload use?

Sc Upload is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Sc Upload use?

About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 572 tokens, read only when the agent opens those files.

What are the alternatives to Sc Upload?

Skills that share tags, products or a category with Sc Upload: Markitdown (ImCa0/just-laws, 781 stars), Markitdown (jimmc414/Kosmos, 594 stars), Office Documents (ZS520L/HanakoPro, 102 stars) and PaperJSX Document Generator (composio-community/awesome-codex-skills, 17k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Sc Upload?

open-edge-platform (a GitHub organization) maintains it in open-edge-platform/edge-ai-suites, which has 140 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 7, 2026.

Source: open-edge-platform/edge-ai-suites on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.