en un clic
file-download
Download app files, generated blobs, or external URLs
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Menu
Download app files, generated blobs, or external URLs
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Basé sur la classification professionnelle SOC
Build animejs.com-grade scroll-driven kinetic pages with the vendored anime.js v4 bundle (website/vendor/anime.esm.min.js). Use when working on the prime-silo marketing site (website/) or any scrollytelling/animation surface. Contains the VERIFIED v4 API, the design language to emulate, the Prime-Silo set-piece specs, and the verification protocol.
Operate, analyze, or extend the LONGVIEW session-synthesis pipeline (cards, graph, reports, book, audiobook). Use when working on scripts/longview, reviewing card output, planning card schema changes, or debugging a LONGVIEW run.
Operate the Prime-Silo delivery board (delivery/) autonomously — select, claim, execute, verify, and log work contracts without frontier supervision. Use whenever picking up a task from delivery/board/BOARD.md, authoring a gate script, verifying another agent's task, or deciding which model tier should take which contract.
The Prime-Silo product experience contract — identity (Prime-Silo + Agent Benny, never Space Agent), earth-tone design tokens, progressive-discovery doctrine, and the "motion is meaning" choreography rules that bring animejs.com-grade kinetics INTO the app without violating the C0 calm contract. Use for any user-facing UI work in app/, server/pages/, or packaging/ (login, first-run, shell, mascot, Studio, Bridge).
DRAFT — pick up and deliver one delivery/tasks/ work contract under the six-sigma protocol (deterministic selection, TDD, allowlist discipline, author≠verifier). Use when asked to "take the next task", "work the board", or deliver a specific task id. Full mechanization lands with W1 (work next) and W2 (sandbox provisioning).
Create, patch, inspect, and remove widgets in the current space
| name | File Download |
| description | Download app files, generated blobs, or external URLs |
| metadata | {"when":{"tags":["onscreen"]}} |
Use this skill when the user asks how to let the browser download a file, whether it lives in the app filesystem, is generated at runtime, or comes from an external URL.
The server serves authenticated files directly at their layer paths. Use a URL built from location.href so the request carries the session cookie and the server enforces read permissions.
~/)/~/... maps to L2/<username>/... for the currently logged-in user.
const u = new URL(location.href);
u.pathname = "/~/BTC_ETH_ratio_chart.pdf";
const a = document.createElement("a");
a.href = u.toString();
a.download = "BTC_ETH_ratio_chart.pdf";
a.click();
/L0/, /L1/, /L2/)Use the full layer path directly. The server checks that the authenticated user has read access before serving.
function downloadAppFile(layerPath, filename) {
// layerPath example: 'L0/_all/mod/_core/reports/template.pdf'
const u = new URL(location.href);
u.pathname = `/${layerPath}`;
const a = document.createElement("a");
a.href = u.toString();
a.download = filename;
a.click();
}
// Examples:
downloadAppFile("L0/_all/mod/_core/reports/template.pdf", "template.pdf");
downloadAppFile("L2/alice/exports/summary.csv", "summary.csv");
Read permissions follow the same rules as the file APIs:
L2/<username>/ own files onlyL0/<group>/ and L1/<group>/ group members onlyFor files generated on the fly, create a Blob, make an object URL, and revoke it after the click.
function downloadBlob(content, filename, mimeType = "text/plain") {
const blob = new Blob([content], { type: mimeType });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = filename;
a.click();
URL.revokeObjectURL(url);
}
downloadBlob("hello world", "note.txt", "text/plain");
const csv = "name,value\nalice,42\nbob,17";
downloadBlob(csv, "data.csv", "text/csv");
const json = JSON.stringify({ status: "ok", items: [1, 2, 3] }, null, 2);
downloadBlob(json, "result.json", "application/json");
const bytes = new Uint8Array([0x25, 0x50, 0x44, 0x46]);
downloadBlob(bytes, "output.pdf", "application/pdf");
Fetch the remote file through the server proxy so the request is not blocked by CORS, then turn the response into a Blob download.
async function downloadExternalFile(externalUrl, filename) {
const response = await space.api.call("proxy", {
method: "POST",
body: { url: externalUrl }
});
if (!response.ok) throw new Error(`Fetch failed: ${response.status}`);
const blob = await response.blob();
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = filename;
a.click();
URL.revokeObjectURL(url);
}
await downloadExternalFile("https://example.com/report.pdf", "report.pdf");
If the external URL is public and CORS allows direct access from the browser, you can skip the proxy and fetch it directly with fetch(externalUrl) and the same Blob pattern.