Repository navigation
Releases: cloudglue/tinycloud
Release list
v0.3.18 — expressive live sites: the full embed v8–v12 family
tinycloud 0.3.18 teaches the full expressive-live-sites embed surface (sites embed v8–v12) and extends the publish safety guard to the new private-only elements. No new verbs or flags — the embed features ship in the Cloudglue-served script, so already-published sites pick them up without republishing.
✨ New
- Live-site elements, fully taught — the skill and bundled references now cover the whole sites-embed v8–v12 family for private shareable sites:
<cg-chat instructions="…">— per-site system prompt, plus a built-in Stop button<cg-search>tuning:scope,modalities,label-filters,threshold,limit,group-by="file",sort-by<cg-deep-search>— streamed synthesis,exclude-weak-results<cg-face-search threshold limit>— face hits play as short bounded moments<cg-query>— natural-language analytical questions answered as an inline table with the compiled SQL shown (the site-side face of thequeryverb's engine)<cg-transcript>— click-to-seek speech turns that follow a bound player's playhead (unbilled)<cg-chapters auto>— chapters self-populate from the live API, no baked-in markup- Every live panel is restylable via
::part()and emits host events (cg-results,cg-answer,cg-error, and the cancelablecg-resultopen/cg-citationopen)
- Kitchen sink refresh — the bundled
references/kitchen-sink.htmlwires every component, including the new query/transcript/chapters-auto sections and live-panel event handling.
🛡️ Hardening
tinycloud publishnow hard-rejects<cg-query>,<cg-transcript>, and<cg-chapters auto>on a public site — their live calls only work on a private site of the same account. A<cg-chapters>list with explicit children stays public-safe.
Install
npx @cloudglue/tinycloud@0.3.18
# or
curl -fsSL https://app.cloudglue.dev/tinycloud.sh | bashThe agent-skill floor rises to 0.3.18 (tinycloud update moves an existing install).
v0.3.17 — structured queries: SQL & natural-language analytics over collections
✨ New
The query verb — analytics over your video library. Where probe/ask find content semantically, query measures it: run a single read-only SQL SELECT — or ask in plain English and let Cloudglue compile it to SQL — over the structured data your collections already hold. Counts, rankings, group-bys, and joins across file attributes, user metadata, connector source_metadata, and extracted entities:
tinycloud query schema --in collection:<id> --json # what's queryable (always start here)
tinycloud query "how many videos per source platform?" --in collection:<id> --json
tinycloud query --sql "SELECT source, COUNT(*) AS n FROM files GROUP BY source ORDER BY n DESC" \
--in collection:<id> --jsonQueries execute against three virtual tables built per request from the collections you select (up to 20, joinable): files (one row per file+collection — filename, title, duration, dimensions, plus metadata and source_metadata JSON columns), entities (file-level extracted fields), and segment_entities (segment-level entities with timestamps). Natural-language runs return the compiled statement in data.sql — inspect it, tweak it, resubmit it as --sql (which also bills less). A question that can't compile fails with the attempted SQL rather than guessing.
Dry runs and full-result exports. --dry-run validates/compiles and previews the output columns without executing (reduced cost). Sync results cap at --max-rows (default 1000, max 10000); for everything else, --export csv|jsonl streams the full result server-side to a gzipped file and downloads it:
tinycloud query --sql "SELECT * FROM files ORDER BY filename" --in collection:<id> --export csv --json
tinycloud query --sql "..." --in collection:<id> --export jsonl --background --json # pending → poll
tinycloud query show <query-id> -o ./exports/ --json # download when doneA stored run history, free to read. Every run is stored server-side: query list browses history, query show <id> re-fetches results (and re-downloads a completed export while its 24h link lives), and query cancel <id> aborts an in-flight export with a refund. schema, list, show, and cancel are all free.
Notes
Verbs 16 → 17; features 40 → 42 with query.v1 and query.export.v1. The bundled Cloudglue SDK moves to 0.7.23. Entity tables reflect each file's most recent completed extraction only; metadata collections have no extraction — query their files.metadata / files.source_metadata JSON columns instead. Runs are billed per the rate card (SQL cheaper than natural language; failed runs auto-refund). The skill floor rises to 0.3.17, since the skill teaches the new verb.
Install
curl -fsSL https://app.cloudglue.dev/tinycloud.sh | bash
# or
npm install -g @cloudglue/tinycloudv0.3.15 — iconik connector, metadata collections, and stored-field search filters
✨ New
Iconik joins the connector lineup as the seventh metadata-bearing provider. Browse, peek, and sync iconik assets like any other connector — with date and title filters native to iconik's API:
tinycloud library connectors files <iconik-connector-id> --title-search "onboarding" --from 2026-06-01 --json
tinycloud library connectors inspect iconik://asset/<id> --json # provider metadata, no file created
tinycloud library connectors sync iconik://asset/<id> --jsonSynced iconik files carry full source_metadata — title, media type, creation date, the iconik URL, and your custom metadata-view fields under source_metadata.iconik_metadata.<Field>.
Metadata collections: index a whole connector library without processing a single frame. The new --type metadata collection indexes connector source_metadata plus your own metadata into file-level search documents — free, near-instant, no describe/transcribe jobs:
tinycloud library collections create meetings --type metadata --json
tinycloud library collections add zoom://uuid/<uuid> --to <col> --metadata '{"deal":"acme"}' --json
tinycloud probe "renewal pricing call" --in collection:<col> --scope file --jsonUse one to triage hundreds of recordings by title, participants, dates, and tags — then send only the keepers through full (billed) processing in a media-descriptions collection.
probe --filter — search by what you know, rank by what you mean. Repeatable stored-field filters narrow any collection search before semantic ranking, ANDed together and with the search's own planning:
tinycloud probe "kickoff walkthrough" --in collection:<col> --scope file \
--filter "source_metadata.host_email=kevin@acme.com" \
--filter "source_metadata.tags*=demo,intro" --jsonOperators: = != > < ~= (SQL LIKE) *= (contains-any) &= (contains-all) ^= (in). Paths route by prefix: source_metadata.* (connector fields, including array traversal like source_metadata.parties.email), metadata.* (your fields from collections add --metadata), video_info.duration_seconds|has_audio, and file.filename|bytes|uri|created_at|id. Filtered probes keep deep search's ranking and answer synthesis.
connectors refresh — un-stale your metadata. Re-fetches an existing file's source_metadata live from its provider and re-indexes any metadata collections it belongs to. Free, no media downloaded:
tinycloud library connectors refresh <file-id | cloudglue-uri | connector-url> --jsonNotes
Still 16 verbs; features 34 → 38 with library.connectors.iconik.v1, library.collections.metadata.v1, probe.filters.v1, and library.connectors.refresh.v1. The bundled Cloudglue SDK moves to 0.7.21 (API spec v0.7.11). Probing a metadata collection requires --scope file (its documents are file-level), and --filter applies to collection scopes only. The skill floor rises to 0.3.15, since the skill teaches the new flags and subcommands.
Install
curl -fsSL https://app.cloudglue.dev/tinycloud.sh | bash
# or
npm install -g @cloudglue/tinycloudExisting installs: tinycloud update.
v0.3.14 — opt-in link previews for private sites and shares
✨ New
Paste a Cloudglue link into Slack, iMessage, Notion, or Discord and it can now unfurl as a real card — title, description, thumbnail — instead of a bare URL or a generic "Sign in" box.
Public sites and shares already previewed. For a public site, the card comes from the Open Graph tags in the HTML you generate, so this release teaches every authoring surface to emit them on each publish: og:title, og:description, og:image (an absolute URL — a share's preview_url works), og:url, twitter:card. Regenerating a page without them silently reverts the card to a bare link, which is the failure this guidance exists to prevent. Unfurl bots don't run JavaScript, so the tags must be in the static HTML.
Private sites and shares never reached the bot at all — the edge gate redirects it to sign-in before any HTML is served. They now opt in explicitly:
# Private site: card = --preview-title + the site description + --preview-image
tinycloud publish ./site --visibility private --link-preview full \
--preview-title "Q3 launch clips" \
--preview-image "https://…/preview.png" --json
# Private share: card = the share's own title, description, and thumbnail
tinycloud publish video ./launch.mp4 --visibility private \
--name "Q3 launch review" --link-preview full --json--link-preview noneis the default and stays today's behavior.- Flipping the setting on an existing site is a settings PATCH — no re-upload, no new version — reported as the new
settings-onlyaction. On an existing share it reuses the share. --preview-imagemust be publicly fetchable: site assets sit behind the same gate the bot can't pass. It's validated as an absolutehttp(s)URL before anything uploads.--preview-title/--preview-imageare site-only and require--link-preview full; both rules are enforced rather than silently ignored.
⚠️ Before you turn it on
--link-preview full makes the card title, description, and image readable by anyone who fetches the link — the user-agent check only routes requests; the setting is the security boundary. Nothing else is exposed: no site content, no video, no tokens or cookies, and playback stays sign-in gated in every mode. Platforms cache the unfurl per exact URL and rehost the image, so switching back to none stops future previews but does not retract cards already posted.
Because of that, the skill and system prompt both tell the agent to ask you first before opting a private artifact in.
Notes
Still 16 verbs; features 33 → 34 with the new publish.link.preview.v1 id. The bundled Cloudglue SDK moves to 0.7.20 for the share link_preview parameter. The skill floor rises to 0.3.14, since the skill now teaches the new flags.
Install
curl -fsSL https://app.cloudglue.dev/tinycloud.sh | bash
# or
npx @cloudglue/tinycloud@latestv0.3.13 — Playback speed on every video embed
✨ New
- Playback speed on every Cloudglue video embed.
<cg-video>now shows a playback-speed menu at every player size — including the narrow ones where it matters most, like grid cells, chat citations, and phones, which previously hid the control entirely. The default rates are 1× / 1.5× / 2×. playbackratesattribute: supply your own speed list as a space-separated string, e.g.<cg-video share-id="…" playbackrates="0.5 1 1.5 2">. Your list replaces the default.playbackRateJS property: get or set the speed from page code (player.playbackRate = 1.5). Safe to set before the player mounts — the write queues behind the ready promise, exactly likemutedandcurrentTime. Non-positive and non-numeric values are ignored.
The speed menu ships in the Cloudglue-served site embed script (sites embed v7), so already-published sites pick it up with no republish and no version gate — nothing to upgrade on their side. This release updates the guidance tinycloud gives agents when they author site HTML: the bundled references/cg-video.md and kitchen-sink example, the media-artifact skill, and the publish command notes all now teach the speed surface.
Notes
Contract unchanged from 0.3.12 — same 16 verbs, same 33 features, same envelope and workflow schemas. The skill floor stays 0.3.12; no new feature ids gate the speed menu because it lives in the embed script rather than the binary.
Install
curl -fsSL https://app.cloudglue.dev/tinycloud.sh | bash
# or
npx @cloudglue/tinycloud@latestv0.3.12 — watch speech segments: speech-only/audio fix + --transcript & --content
✨ New
- Speech lands in
watchsegments (fixes the critical speech-only gap):watch --speech-onlyand audio sources used to returnsegments: [], forcing a detour throughcaptionto get words out of a watch. Every segment (and embedded shot) now carries its overlapping utterances asspeech: string[], and a source with speech but no visual segmentation — an audio file,--speech-only, a very short or windowed source — gets uniform 20s speech segments synthesized ("segmentation": "uniform:20") instead of an empty list.search --field speechnow works over cached watches, and caches written by older versions heal automatically on the next watch or search (nothing is re-billed). watch --transcript: the full transcript asdata.transcript, speaker-labeled when more than one speaker. Derived per invocation — never persisted, never part of the cache key.watch --content: the complete describe markdown inlined asdata.content, served from cache on hits. Asking for either flag never re-runs an analysis.
🛡️ Hardening
- Background
watchjobs reach full foreground parity: completed jobs persist the same cache artifacts, honor the analysis window, and derive--transcript/--contentonto the completed envelope. A transient markdown fetch failure keeps the job retriable instead of failing a completed analysis. - Every registry-declared flag is now contract-tested against its handler, so advertised-but-inert flags can't ship again.
⚠️ Breaking
watch --json-indexremoved. It has been a silent no-op since 0.3.0 (its consumer was deleted in the ops rewrite); passing it now errors as an unknown flag.
Install
curl -fsSL https://app.cloudglue.dev/tinycloud.sh | bash
# or
npx @cloudglue/tinycloud@latestContract: 16 verbs, 33 features (+watch.speech.v1). Skill floor raised to 0.3.12 — the speech fix is load-bearing for speech workflows, so the bundled agent skills now require 0.3.12+ (npx @cloudglue/tinycloud skills install --force after updating).
v0.3.11 — connector source metadata everywhere + `connectors inspect`
✨ New
- Connector source metadata everywhere (Cloudglue SDK 0.7.19): all six metadata-bearing connectors — Grain, Zoom, Recall, Google Drive, Dropbox, Gong — now populate
source_metadatawhen you sync, andlibrary connectors filesrows carry per-file providermetadata(participants, host, duration, AI summary) so you can pick the right files before syncing. library connectors inspect [<connector-id>] <uri-or-share-link>(featurelibrary.connectors.inspect.v1): peek one item's provider metadata without creating a Cloudglue file. The connector id is optional — the URI's type routes to the oldest active matching connector, and it accepts the same URI/share-link forms asconnectors sync. S3/GCS objects have nothing richer than the listing to inspect.- Broader connector listing filters (server-side — older binaries benefit too):
--from/--todates on every provider except S3/GCS (Zoom and Gong default to a 6-month lookback — pass--fromfor older recordings), case-insensitive--title-searchon Grain, Zoom, Google Drive, Dropbox, and Gong. Filtered pages can come back short or even empty while more remain — keep paging untilnext_page_tokenis null.
🛡️ Hardening
connectors inspectremediation is never a dead end: YouTube URLs point attinycloud grab, already-Cloudglue sources atwatch/extract, and only genuinely ingestable public URLs atconnectors sync. Upstream 501/502 map to coherent, non-contradictory retry semantics, and advisory link warnings (e.g. best-effort Zoomrec/shareguidance) stay attached to failures.
Install
curl -fsSL https://app.cloudglue.dev/tinycloud.sh | bash
# or
npx @cloudglue/tinycloud@latestContract: 16 verbs, 32 features (+library.connectors.inspect.v1); command_spec_revision unchanged. Skill floor stays at 0.3.7 — the tinycloud skill keeps working on 0.3.7–0.3.10 binaries, with inspect gated on its feature id.
v0.3.10 — browser sign-in: `tinycloud login`
tinycloud 0.3.10 adds a Claude-Code / gh auth login-style first-run experience: sign in to Cloudglue with your browser, no copy-pasting API keys. The rest of the command surface is unchanged from 0.3.9, and paste-a-key setup is fully backward compatible — so existing agents and skills keep working as-is.
✨ New: browser sign-in
tinycloud loginRuns an OAuth-style device-authorization flow: the CLI prints a short code + verification URL and best-effort opens the Cloudglue dashboard. You approve the code, pick an account, and a normal cg- API key is minted and saved to ~/.tinycloud/config.json (0600) — exactly like a pasted key. You never see or handle the raw key (it never appears on stdout, in envelopes, or in logs — masked only).
- New
loginverb (featurelogin.v1), present incommands --json. Cost classnetwork, no auth required. --no-browserprints the URL only (SSH/containers);--web-url/$CLOUDGLUE_WEB_URLtargets a non-default dashboard;--labelnames the provisioned key (default: hostname).- Also wired into the interactive first-run chooser,
/login,/setup, and/factory-reset, with a consistent☁ Signed in as …confirmation. needs_credentialsenvelopes now advertisesetup.login_command(tinycloud login) alongsidesetup.command, so tools can surface the browser path.- Revoke anytime by deleting the key in the dashboard. Paste-a-key (
tinycloud setup cloudglue --api-key <key>) and$CLOUDGLUE_API_KEYremain fully supported for headless/scripted setup.
🛡️ Hardening
- Config is written owner-only (0600) through a single unified writer, and every config write re-reads from disk before merging so a concurrent writer during the minutes-long sign-in poll is never clobbered.
- Write-before-success discipline throughout: the provisioned key is persisted before any success is shown, and a save failure yields a clear "run it again" message (with correct consumed-code vs. preferences-only guidance) rather than a stranded key or a crash.
- A cancel (Ctrl-C / Esc) that races a completing sign-in never persists a credential after you cancel.
Install / upgrade
npm install -g @cloudglue/tinycloud@latest # or: tinycloud update
# or
curl -fsSL https://app.cloudglue.dev/tinycloud.sh | bashThe launcher downloads and checksum-verifies the matching platform binary on first run (darwin-arm64/x64, linux-x64/arm64).
v0.3.9 — reliability: publish guards, workflow correctness, credential hygiene
tinycloud 0.3.9 is a reliability release: publish-guard and workflow correctness fixes, security hardening around credentials, and a faster CLI path for scripted use. The command surface is unchanged from 0.3.8 — same verbs, flags, and capability ids — so agents and skills need no changes.
🛡️ Fixes & hardening
- Publish guards catch string-built embeds. The pre-upload checks that reject a private-share
<cg-video>embed (or a live-API component on a public site) now also detect embeds assembled asinnerHTML/template strings — the common generator/LLM output shape — including escaped-quote variants. Previously only statically-written orcreateElement-built tags were caught. - Republish resolves real visibility. Republishing a site without
--visibilityno longer guesses when the stored visibility is unknown — it fetches the site's actual visibility so the embed guards check against reality (and persists it, sparing the lookup next time). - Workflow steps fail loudly on corrupt output. A step whose output can't be read back now fails that step instead of being treated as empty and silently cascading.
- Background library sync actually runs. The background refresh of the file index and collection manifests never executed in packaged installs; it now runs in-process (self-throttled, off the startup critical path).
- Credential hygiene. Secret-shaped text is scrubbed before session history is persisted, and bearer tokens, inline credentials, and userinfo-style URLs are redacted in string values. The agent's shell tool now enforces read-only execution via a command allowlist, and the artifact preview server is scoped to the artifact directory.
⚡ Performance
- Ops verbs (
--jsonscripting) skip loading the agent/TUI runtime entirely — noticeably faster startup for pipelines. - Streamed source fingerprinting with a stat-keyed digest cache, a memoized source index, and a cheaper session-listing path.
- Arch-correct
ffproberesolution on darwin/arm64.
Install / upgrade
npm install -g @cloudglue/tinycloud@latest # or: tinycloud update
# or
curl -fsSL https://app.cloudglue.dev/tinycloud.sh | bashThe launcher downloads and checksum-verifies the matching platform binary on first run (darwin-arm64/x64, linux-x64/arm64).
v0.3.8 — hard clips: publish video --clip-only
tinycloud 0.3.8 adds hard clips for published video moments: alongside the existing soft "back to moment" window, you can now share a link (or embed) that plays only the moment — the stream itself is trimmed, so the seek bar is the clip.
✨ New: publish video --clip-only
Add --clip-only to a --clip-start/--clip-end window and data.moment_url gains &clip=hard — the share page plays only [clip-start, clip-end] instead of the full recording with a soft overlay.
tinycloud publish video ./demo.mp4 --clip-start 18 --clip-end 33 --clip-only --json
# → data.moment_url = https://…/share/…?s=18&e=33&clip=hard- Requires both clip flags —
--clip-onlywithout a full window is rejected before anything uploads. - The flag rides the pending → re-run flow, so a share that's still processing returns the hard-clip URL once it's ready.
- The same suffix works hand-built on an existing share: append
&clip=hardto a?s=&e=moment link. - Viewing experience, not access control — the underlying asset is still one request away; use
--visibility privateto actually restrict access.
New capability flag: publish.video.moment.hard.v1 (so agent skills can preflight before passing a flag older binaries reject).
✨ <cg-video> embed v6: clip-only
The site embed gains a matching clip-only attribute, honored alongside a valid clip-start/clip-end pair:
<cg-video share-id="…" clip-start="18" clip-end="33" clip-only></cg-video>The timeline is re-based to the clip (no badge, region strip, or "back to moment" pill — there's nothing to scrub back to). Older embed scripts and share pages ignore clip-only / &clip=hard and degrade gracefully to the soft window, so nothing breaks mid-rollout.
Install / upgrade
npm install -g @cloudglue/tinycloud@latest # or: tinycloud update
# or
curl -fsSL https://app.cloudglue.dev/tinycloud.sh | bashThe launcher downloads and checksum-verifies the matching platform binary on first run (darwin-arm64/x64, linux-x64/arm64).