Remote Content
Upload content from registered cloud sources via the AgentOS Knowledge API.
Register sources
This configuration fragment assumes existing vector_db and contents_db objects. Start from Manage Knowledge for a complete server, then add the content_sources below to its Knowledge object and register that object with AgentOS. Configure the provider dependencies, read permissions, and credentials described in Cloud Storage Sources. Replace the bucket, repository, and paths with resources you control.
Install requests for the Python client examples. They assume the server is running on port 7777; add authentication headers when required. JSON responses below illustrate shape, not a populated service.
from agno.knowledge.knowledge import Knowledge
from agno.knowledge.remote_content import S3Config, GitHubConfig
knowledge = Knowledge(
vector_db=vector_db,
contents_db=contents_db,
content_sources=[
S3Config(id="company-s3", name="Company S3", bucket_name="my-bucket"),
GitHubConfig(id="docs-repo", name="Docs Repo", repo="acme/docs", token="..."),
],
)See Cloud Storage Sources for the provider classes (S3Config, GcsConfig, SharePointConfig, GitHubConfig, AzureBlobConfig) and their parameters.
Once a Knowledge instance has content_sources registered, AgentOS exposes them through the Knowledge API.
# Upload a file from a registered S3 source
curl -X POST http://localhost:7777/knowledge/remote-content \
-F "config_id=company-s3" \
-F "path=reports/q4-2025.pdf" \
-F "name=Q4 Report"Discover registered sources
The root /knowledge/config endpoint lists every configured remote source under remote_content_sources:
curl http://localhost:7777/knowledge/config | jq '.remote_content_sources'[
{ "id": "company-s3", "name": "Company S3", "type": "s3", "metadata": null, "prefix": null },
{ "id": "docs-repo", "name": "Docs Repo", "type": "github", "metadata": null, "prefix": null }
]To scope to a specific Knowledge instance, use the per-instance endpoint:
curl http://localhost:7777/knowledge/{knowledge_id}/sourcesThe id returned here is the value to pass as config_id when uploading.
type value | Provider |
|---|---|
s3 | Amazon S3 |
gcs | Google Cloud Storage |
sharepoint | SharePoint |
github | GitHub |
azureblob | Azure Blob Storage |
Upload remote content
POST /knowledge/remote-content accepts application/x-www-form-urlencoded and schedules processing as an in-process background task. A 202 acknowledges acceptance, not completed indexing or durable queueing; use the content status endpoints to check completion.
import requests
response = requests.post(
"http://localhost:7777/knowledge/remote-content",
data={
"config_id": "company-s3",
"path": "reports/q4-2025.pdf",
"name": "Q4 Report",
"metadata": '{"team": "finance", "year": 2025}',
},
)
# 202 Accepted while the content is being processed
print(response.status_code, response.json())Path semantics
- A trailing
/ingests every file under the prefix as a folder. Example:reports/. - No trailing
/ingests a single file. Example:reports/q4-2025.pdf.
See the upload-remote-content reference for the full field list.
Per-request overrides with source_params
source_params lets one configured source serve multiple targets. GitHub is the currently supported case: pass repo to point a single GitHubConfig at a different repository per request.
curl -X POST http://localhost:7777/knowledge/remote-content \
-F "config_id=docs-repo" \
-F "path=README.md" \
-F 'source_params={"repo": "acme/other-repo"}'Without source_params, the request uses the values baked into the registered config.
Browse files in a source
GET /knowledge/{knowledge_id}/sources/{source_id}/files returns paginated files and folder prefixes inside a source.
File listing is currently supported in S3 only.
curl "http://localhost:7777/knowledge/{knowledge_id}/sources/company-s3/files?prefix=reports/&limit=50"{
"source_id": "company-s3",
"source_name": "Company S3",
"prefix": "reports/",
"folders": [
{ "prefix": "reports/2025/", "name": "2025", "is_empty": false }
],
"files": [
{
"key": "reports/annual-summary.pdf",
"name": "annual-summary.pdf",
"size": 102400,
"last_modified": "2025-01-15T10:30:00Z",
"content_type": "application/pdf"
}
],
"meta": { "page": 1, "limit": 50, "total_pages": 1, "total_count": 1 }
}See the list-files-in-source reference for prefix, limit, page, delimiter, and db_id.
For non-S3 sources, list available content with the provider's own tooling (for example, the GitHub API or the Azure portal) and pass the resulting path directly to POST /knowledge/remote-content.
Next Steps
Cloud Storage Sources
Configure S3, GCS, SharePoint, GitHub, and Azure Blob providers.
Manage Knowledge
Attach Knowledge instances to AgentOS and find their IDs.
Filter Knowledge
Apply metadata filters when agents search the knowledge base.
Upload Remote Content API
Full reference for POST /knowledge/remote-content.