The currently served API still exposes
/v1/file-trees for multi-file uploads and Git repository workflows. Treat that as the exact compatibility contract for those workflows, not as the final meaning of File, Skill, Memory, or every other resource.
Plain HTTP against the Checkfu API needs no private package.
The Checkfu CLI and TypeScript SDK are optional private-alpha artifacts; the HTTP requests work without them.
The documented path is usable as written for an admitted Workspace.
Confirm capability status before making availability part of your application’s contract.
Files
A File is a first-class Workspace resource. Upload it once, attach its ID to a Session, and let Session admission freeze the exact object the run may read. The Files API is intentionally small:POST /v1/filesuploads exactly one multipart file with anIdempotency-Key;GET /v1/files/{id}reads its credential-free metadata; andDELETE /v1/files/{id}removes it under the File lifecycle contract.
Content-Type becomes the File’s mime_type, and image and document message content accept only a matching type. Browsers type the part from the file name, and so does the CLI (checkfu operation invoke files.createFile --input <path>); with the SDK or a raw request, set the type on the part you send. MCP doesn’t project uploads, so upload through another client and pass the File ID.
A Session that references a File records the selected File identity and content digest. Replacing a local file later does not change an admitted Session.
Captured outputs and reuse
Files published through a supported Session output-capture path are scoped to that Session and markeddownloadable: true. Use GET /v1/files/{id}/content
under current authority to download their exact bytes. A user upload is marked
downloadable: false; attaching it as input does not turn it into a captured
output.
A captured File ID remains scoped to its producing Session. A native Session
cannot read another Session’s scoped File ID. To reuse the bytes where downloads
are supported and you are authorized to copy them, download the File and upload
those exact bytes through POST /v1/files. This creates a new File ID; compare
its content digest with the downloaded source before attaching it to the new
Session. The new upload and Session selection need their own current authority.
An earlier mount or download grants no continued access.
Native Workspace execution currently has no path that publishes its generated
artifacts as downloadable Session Files. Its retained Tool results and private
working files do not prove capture, downloads, or later reuse. Check the
selected Harness’s capability status for the
supported output path. Private Workspace state and native private memory are
not automatically promoted into shared resources.
Uploaded folders
An uploaded FileTree is a nested folder published directly to Checkfu. A developer with an API key can attach one to a native Session and the Agent can list and read it. No acting Principal is involved: the Session keeps its real API key, Workspace, and scopes.- Upload the folder with
POST /v1/file-treesandsource.kind: "upload". Paths can be nested. - Create the Session without
acted_as. - Attach the tree with
POST /v1/sessions/{id}/resource-bindingsusingkind: "file_tree"andaccess: "read_only". - Send a message. The Agent’s
list_directoryandreadtools see the mount.
latestresolves once for that message and the exact version is recorded. A version published later does not change what that message reads, including after recovery. Usepinnedto select a version yourself.- Uploaded trees are read-only here. A writable mount, a Git tree, or a mount that combines an uploaded tree with Memory or Skills in an API-key Session without
acted_asis not supported by this path and gains no authority from it. - You can mix individual Files and uploaded trees in one Session.
Git-backed source
Use Git-backed source when the Agent needs a repository tree rather than one uploaded object. The source resolves a branch or ref to an exact commit and immutable tree before execution. Provider access goes through a governed Connection. The acting Principal must hold the required PermissionAssignment, and Checkfu rechecks live Connection authority before provider reads or writes. Checkfu does not inject or return the Git Connection’s custodied Credential value through the Session, sandbox, commit message, pull-request body, or event log. Repository bytes remain customer content. A committed secret can still reach the Agent because it is part of the selected tree; review and scan repositories independently of Connection credential custody.Current FileTree compatibility operations
The current/v1/file-trees contract serves two narrow source kinds:
Each publication or refresh creates an immutable FileTree version.
latest, a pinned version, or an already-published Git ref can select which version a Run receives. The resolved version is recorded with the Run.
Create a Git-backed FileTree with the Principal that owns and may use the Connection:
Runtime overlays
A repository or multi-file tree can be mountedread_only or read_write. A writable mount gives the sandbox a disposable overlay. It does not mutate the source resource in place.
These overlay and writeback behaviors belong to the FileTree compatibility path. The native Session reader currently supports uploaded trees, not Git checkout mounts. Preparing recorded Git metadata does not enable native repository reads, writable overlays, or Git writeback.
A native Session started with an API key and no acted_as can read an uploaded
tree. See Uploaded folders. Git checkout mounts still need
the acting Principal that holds the Connection; an API key alone never supplies
one. Supplying acted_as still requires current delegation and resource
permissions; it is not a substitute for them.
Publishing work back to Git is a separate external effect. The current FileTree compatibility contract can push a new non-force branch and open a pull request through the same live Connection. Those mutations need stable idempotency keys, exact base versions, policy evaluation, and provider-side reconciliation. The human merge remains outside the Session.
A Session-owned pull-request writeback policy may capture a bounded overlay at settlement under standard retention. Omission keeps the overlay disposable. Uploaded trees and zero-data-retention placements can reject writeback where retained content is required.
A lost response after push or pull-request creation is not proof that the provider rejected the request. Reconcile the retained provider receipt or provider state before retrying; never turn uncertainty into a blind second Git effect.
Repository Skills
A frozen Git tree may contain repository-local Skill instructions at an admitted path. Those files remain repository content. They do not create a Skill resource or SkillVersion automatically. The native recorded-Git preparation does not discover or load repository-local Skills automatically. Select reusable Skills through their own versioned resource contract. Mounting a repository is therefore also an instruction-trust decision. Review contributions before letting an Agent read repository-local instructions. Use a real Skill when you need an independently versioned, reusable capability.Choosing the resource
Use a File for a document the user supplied. Use Git-backed source for a repository and explicit Git effects. Use a Skill for reusable authored capability. Use Memory for retained knowledge. Keeping these separate lets Session admission freeze the right selection policy and each Run record the exact version it receives. It also lets revocation target the correct authority and lets retention or erasure operate without inventing one mutable aggregate that owns everything.Capabilities, Tools, and Skills
See how SkillVersion differs from repository content.
Memory
Retain knowledge under a different version and erasure boundary.