Skip to content

Releases: cloudglue/tinycloud

v0.3.18 — expressive live sites: the full embed v8–v12 family

Choose a tag to compare

@kdr kdr released this 04 Aug 02:03
8b18927

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 the query verb'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 cancelable cg-resultopen/cg-citationopen)
  • Kitchen sink refresh — the bundled references/kitchen-sink.html wires every component, including the new query/transcript/chapters-auto sections and live-panel event handling.

🛡️ Hardening

  • tinycloud publish now 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 | bash

The 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

Choose a tag to compare

@kdr kdr released this 03 Aug 07:15
d92a441

✨ 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> --json

Queries 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 done

A 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/tinycloud

v0.3.15 — iconik connector, metadata collections, and stored-field search filters

Choose a tag to compare

@kdr kdr released this 23 Jul 19:34
1cae4de

✨ 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> --json

Synced 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 --json

Use 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" --json

Operators: = != > < ~= (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> --json

Notes

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/tinycloud

Existing installs: tinycloud update.

v0.3.14 — opt-in link previews for private sites and shares

Choose a tag to compare

@kdr kdr released this 19 Jul 04:11
0816c6f

✨ 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 none is 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-only action. On an existing share it reuses the share.
  • --preview-image must be publicly fetchable: site assets sit behind the same gate the bot can't pass. It's validated as an absolute http(s) URL before anything uploads.
  • --preview-title / --preview-image are 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@latest

v0.3.13 — Playback speed on every video embed

Choose a tag to compare

@kdr kdr released this 18 Jul 15:32
657cf5d

✨ 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×.
  • playbackrates attribute: 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.
  • playbackRate JS 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 like muted and currentTime. 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@latest

v0.3.12 — watch speech segments: speech-only/audio fix + --transcript & --content

Choose a tag to compare

@kdr kdr released this 17 Jul 16:39
d0e837e

✨ New

  • Speech lands in watch segments (fixes the critical speech-only gap): watch --speech-only and audio sources used to return segments: [], forcing a detour through caption to get words out of a watch. Every segment (and embedded shot) now carries its overlapping utterances as speech: 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 speech now 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 as data.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 as data.content, served from cache on hits. Asking for either flag never re-runs an analysis.

🛡️ Hardening

  • Background watch jobs reach full foreground parity: completed jobs persist the same cache artifacts, honor the analysis window, and derive --transcript/--content onto 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-index removed. 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@latest

Contract: 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`

Choose a tag to compare

@kdr kdr released this 16 Jul 23:06
65b7c64

✨ 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_metadata when you sync, and library connectors files rows carry per-file provider metadata (participants, host, duration, AI summary) so you can pick the right files before syncing.
  • library connectors inspect [<connector-id>] <uri-or-share-link> (feature library.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 as connectors sync. S3/GCS objects have nothing richer than the listing to inspect.
  • Broader connector listing filters (server-side — older binaries benefit too): --from/--to dates on every provider except S3/GCS (Zoom and Gong default to a 6-month lookback — pass --from for older recordings), case-insensitive --title-search on Grain, Zoom, Google Drive, Dropbox, and Gong. Filtered pages can come back short or even empty while more remain — keep paging until next_page_token is null.

🛡️ Hardening

  • connectors inspect remediation is never a dead end: YouTube URLs point at tinycloud grab, already-Cloudglue sources at watch/extract, and only genuinely ingestable public URLs at connectors sync. Upstream 501/502 map to coherent, non-contradictory retry semantics, and advisory link warnings (e.g. best-effort Zoom rec/share guidance) stay attached to failures.

Install

curl -fsSL https://app.cloudglue.dev/tinycloud.sh | bash
# or
npx @cloudglue/tinycloud@latest

Contract: 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`

Choose a tag to compare

@kdr kdr released this 12 Jul 20:37
acd324c

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 login

Runs 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 login verb (feature login.v1), present in commands --json. Cost class network, no auth required.
  • --no-browser prints the URL only (SSH/containers); --web-url / $CLOUDGLUE_WEB_URL targets a non-default dashboard; --label names 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_credentials envelopes now advertise setup.login_command (tinycloud login) alongside setup.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_KEY remain 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 | bash

The 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

Choose a tag to compare

@kdr kdr released this 10 Jul 17:17
d0449d4

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 as innerHTML/template strings — the common generator/LLM output shape — including escaped-quote variants. Previously only statically-written or createElement-built tags were caught.
  • Republish resolves real visibility. Republishing a site without --visibility no 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 (--json scripting) 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 ffprobe resolution on darwin/arm64.

Install / upgrade

npm install -g @cloudglue/tinycloud@latest    # or: tinycloud update
# or
curl -fsSL https://app.cloudglue.dev/tinycloud.sh | bash

The 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

Choose a tag to compare

@kdr kdr released this 03 Jul 07:35
fb0b313

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-only without 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=hard to a ?s=&e= moment link.
  • Viewing experience, not access control — the underlying asset is still one request away; use --visibility private to 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 | bash

The launcher downloads and checksum-verifies the matching platform binary on first run (darwin-arm64/x64, linux-x64/arm64).