Publish or update one local HTML file with Frevana Space CMS on the user's Frevana custom domain and return its public URL, file key, and content ID to the caller.
Publish or update one local HTML file with Frevana Space CMS on the user's Frevana custom domain and return its public URL, file key, and content ID to the caller.
Use this skill whenever the user asks to publish, update, host, share, or upload an agent-generated HTML app, page, or report through Frevana Space CMS.
For non-HTML input, tell the user that only .html files are supported and ask for an .html file.
Similar popular skills
Related neighbors and high-traction skills in the same topics — useful to compare before installing.
Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.
Claude CodeNot declared
CursorNot declared
CodexNot declared
GitHub CopilotNot declared
WindsurfNot declared
Gemini CLINot declared
ClineNot declared
OpenCodeNot declared
Repository health
Stars2
LicenseMIT
Default branchmaster
Open issues1
Status
Active
Package contents
Files included with this skill beyond the listing page.
skill mdSKILL.md8,207 B
docsSUMMARY.md438 B
History
First seen on skills.sh
First recorded snapshot · 2 installs
SKILL.md
Frevana Space CMS
Publish one local .html file through Frevana's custom-domain upload flow.
The script first checks custom_domain from GET /subscriptions/user. When no custom domain is configured, it stops before requesting an upload URL and directs the user to:
the previous file_key supplied by the caller when the user wants to update existing content
FREVANA_TOKEN in the environment, or a one-time --token override
curl
bash
python3
network access to https://api.frevana.com
Do not guess the file path. If the user has not identified a file, ask for it.
Fixed Publishing Contract
The bundled script owns these request values:
category: agentappresult
scenetype: contenthtml
publishtype: customdomain
agent_id: use the available Agent ID; fall back to frevana-space-cms
team_id: use the available team ID; otherwise use the current session/task ID; omit only when neither is available
file_extension: fixed to html
content_type: fixed to text/html
file_title: use --title when provided; otherwise extract it from the HTML and fall back to the filename stem
source file: pass the user-specified path directly to the upload command
file_key: omit for a new publication; for an update, pass the exact value from the previous publication
Do not override or reproduce this payload with ad hoc API calls. Do not modify the specified file as part of the publishing workflow.
Execution Order
Confirm the requested path exists, is a regular file, and ends in .html (case-insensitive). Before any network request, reject every other file type, tell the user that Frevana Space CMS only supports .html, and ask for an .html file.
Determine whether the user wants a new publication or an update. For an update, require the previous file_key from the caller; do not guess it or silently create new content.
If the script reports that custom_domain is not configured, give the user the exact configuration link it prints and stop. Do not request a pre-upload URL or upload the file.
If the custom domain is configured, let the script call POST /s3/custom-upload-url. For an update, the request includes the previous filekey; for a new publication, it omits filekey.
Upload the specified file directly to the returned pre-signed destination.
After the upload succeeds, let the script call PUT /s3/content/{contentid}/publish?optype=publish.
After both upload and publish succeed, return a JSON object containing url, filekey, and contentid to the caller.
Explicitly tell the caller that a later update must send the returned filekey value unchanged as the filekey request parameter, which the script accepts through --file-key.
Let the caller associate and persist that result with its own Agent App ID. The skill must not save publication state locally.
Do not expose the pre-signed upload URL, its query parameters, the bearer token, or raw credential files.
Options
--token <token> One-time Frevana bearer token override
--file <path> Local .html file to publish
--file-key <key> Previous file_key; include only when updating existing content
--title <title> Optional title override
--agent-id <id> Optional Frevana Agent ID
--team-id <id> Optional team ID
--session-id <id> Session/task ID fallback when team ID is unavailable
FREVANAAPIBASE_URL can override the API host for local testing.
ID Resolution
Resolve agentid in this order: --agent-id, FREVANAAGENTID, CODEXAGENT_ID, then fixed fallback frevana-space-cms.
Resolve teamid in this order: --team-id, FREVANATEAMID, CODEXTEAM_ID, then the session fallback.
Resolve the session fallback in this order: --session-id, FREVANASESSIONID, CODEXTHREADID, CODEXSESSIONID.
If neither a team ID nor session ID is available, omit optional team_id.
HTML and Title Resolution
Use --title when the user explicitly provides a title.
Otherwise use the first non-empty <h1>, then <title>, then og:title or twitter:title.
If the HTML does not contain a usable title, use the filename without its .html extension.
Reject .htm, Markdown, JSON, images, PDFs, documents, and every other non-.html input before checking the custom domain or calling Frevana.
Upload Behavior
For a new publication, the custom upload URL request omits file_key.
For an update, the custom upload URL request includes the exact previous file_key so Frevana updates the existing content instead of creating a new item.
The script uploads the file with PUT to the returned presigned_url.
It passes the original path directly to curl --upload-file; it does not create or upload a transformed copy.
Title extraction and fixed HTML metadata construction never write to the source file.
It sends Content-Type: text/html during the upload.
It never forwards the Frevana authorization header to the object-storage upload URL.
It reads content_id from the custom upload URL response.
After a successful object upload, it sends title, fixed publishtype=customdomain, and fixed category=agentappresult to PUT /s3/content/{contentid}/publish?optype=publish.
It treats the operation as successful only when both upload and publish return 2xx.
It uses the public URL returned by the API. If the API returns only a file key, it builds the URL from the configured custom domain and that key.
It prints one JSON object containing only url, filekey, and contentid.
Caller-Owned State
The skill is stateless and must not create a history file, sidecar file, or app-state directory.
The caller owns the mapping between its Agent App ID and the returned url, filekey, and contentid.
Treat the returned filekey as the update handle. For a later update, pass that exact value as the filekey field to POST /s3/custom-upload-url, or equivalently through --file-key when using the bundled script.
If an update response omits key/filekey, the result retains the previous filekey supplied by the caller.
Example:
bash <skill-path>/scripts/publish_file.sh \
--file /absolute/path/to/updated.html \
--file-key "<file_key returned by the previous publish>"
Error Handling
Missing or unreadable file: ask the user for a valid local file path.
Non-.html input: reject it before any network request, tell the user that Frevana Space CMS only supports .html, and ask for a local .html file.
Update requested without a caller-supplied previous file_key: ask the caller for it and stop before any API request.
Missing token in a non-interactive run: tell the user to set FREVANA_TOKEN or use --token.
Missing custom domain: direct the user to https://www.frevana.com/dashboard/domain.
Unexpected API response: report the error without printing credentials or a pre-signed URL.
Upload failure: do not claim the file was published.
Publish failure after upload: report that the file was uploaded but publishing failed, and do not return the public URL as a successful result.