Skip to main content

Artifacts

Library Artifacts: agent-produced deliverables (reports, dashboards, plans, PDFs, documents). Metadata lives in Mongo and content in S3 with SSE-KMS; callers always go through this resource, never the S3 keys.

Access it as client.artifacts on a Strongly client, or the same path on AsyncStrongly with await. All methods exist on both with identical signatures.

Quick start

from strongly import Strongly

client = Strongly()

# List (auto-paginates as you iterate) # filters: search, artifact_type, tags, producer_agent_id, producer_skill_id
for artifact in client.artifacts.list():
print(artifact.id)

# Create
created = client.artifacts.create(
title="...",
artifact_type="...",
content_type="...",
content="...",
)
print(created.id)

# Read it back
fetched = client.artifacts.retrieve(created.id)

# Delete (returns None; raises on failure)
client.artifacts.delete(created.id)

Methods

Core

list

list(*, search: Optional[str] = None, artifact_type: Optional[str] = None, tags: Optional[List[str]] = None, producer_agent_id: Optional[str] = None, producer_skill_id: Optional[str] = None, limit: Optional[int] = None) -> SyncPaginator[Artifact]

List artifacts visible to the caller, with pagination and filters.

Args: search: Full-text search over title and summary. artifact_type: Filter by artifact type. tags: Filter by tags. producer_agent_id: Restrict to artifacts produced by an agent. producer_skill_id: Restrict to artifacts produced by a skill. limit: Maximum number of items to return (default: all matching items).

Returns: A paginator yielding Artifact objects.

create

create(*, title: str, artifact_type: str, content_type: str, content: str, summary: Optional[str] = None, tags: Optional[Sequence[str]] = None) -> Artifact

Create an artifact.

Args: title: Human-readable artifact title. artifact_type: The artifact type (e.g. report, dashboard). content_type: MIME content type of the payload. content: The artifact payload (base64 for binary, plain string for text). summary: Optional short summary. tags: Optional tags.

Returns: The created Artifact.

retrieve

retrieve(artifact_id: str) -> Artifact

Retrieve a single artifact by id.

update

update(artifact_id: str, *, title: Optional[str] = None, summary: Optional[str] = None, tags: Optional[Sequence[str]] = None) -> Artifact

Update editable artifact metadata (title, summary, tags).

delete

delete(artifact_id: str) -> None

Delete an artifact. Raises on failure; returns nothing.

Sharing & scope

share

share(artifact_id: str, user_id: str) -> Dict[str, Any]

Grant user_id access to this artifact (iterate for bulk share).

unshare

unshare(artifact_id: str, user_id: str) -> Dict[str, Any]

Revoke user_id's access to this artifact.

toggle_public

toggle_public(artifact_id: str) -> Dict[str, Any]

Flip the public visibility flag (owner/admin only).

toggle_org_share

toggle_org_share(artifact_id: str) -> Dict[str, Any]

Flip org-wide visibility (distinct from fully public).

update_scope

update_scope(artifact_id: str, *, scope: Optional[Dict[str, Any]] = None) -> Dict[str, Any]

Re-scope an artifact (owner-only). An empty scope moves it to user-global.

Other

download_url

download_url(artifact_id: str, *, ttl_seconds: Optional[int] = None) -> ArtifactDownloadUrl

Return a short-lived pre-signed URL for the artifact content.

Default TTL is 5 minutes; pass ttl_seconds up to 900 (15 minutes) when the downstream consumer needs longer.

refresh_size

refresh_size(artifact_id: str) -> Artifact

Re-read the S3 object size and refresh contentSizeBytes (idempotent).