Skip to content

Releases: gurmohitghuman/cubex

Cubex v0.7.0

Choose a tag to compare

@gurmohitghuman gurmohitghuman released this 23 Oct 14:40
0a0d395

Cubex v0.7.0

Release date: October 23, 2026
Since v0.6.1: 10 commits · 206 files changed · +9,418 / −398

This release adds AI visibility tables: ask ChatGPT, Gemini, Google AI Mode, Perplexity and Copilot
the questions your buyers ask, and see whether they name you and which sites they cite. It also
makes Cubex safer to run: an update keeps a copy of your data and can be undone with
cubex rollback, runs can no longer hang or keep paying while the provider or the disk is failing,
and rows a list rerun replaces go to the trash. Updating upgrades your database on first start,
which takes a moment.

Highlights

  • AI visibility tables: Check AI visibility on the dashboard makes a table that asks AI
    engines (ChatGPT, Gemini, Google AI Mode, Perplexity and Copilot, through treg) the questions your
    buyers ask. For each answer you see whether you're named, your place among the brands it names and
    who comes first, and a Cited sites sheet lists every source the answers cite. It shows the cost
    before it asks. Check again keeps the earlier answers in dated sheets and shows what went up or
    down since. Agents use ai_visibility. (1902cd4) (5b255bf)
  • Updates you can undo: before a new version starts, the update keeps a copy of your data. If the
    new version doesn't start, the previous version and your data come back by themselves. If it starts
    but something is wrong, cubex rollback goes back to the version and the data from before the
    update. This update already works this way. cubex start now waits for a big database instead of
    giving up after a minute. (c080324)
  • Runs that can't hang or keep spending: every AI call has a time limit, and Stop reaches a run
    even while all its rows are waiting on the provider. An AI or HTTP API run pauses itself when rows
    keep failing on the provider's side (an outage, a rejected key, no credits) instead of filling the
    column with ❌. A full disk stops paid calls, the health check warns when space runs low, and a run
    that stopped moving is started again. (090fada)
  • Copy a sheet's values: Copy values to a new sheet in the sheet tab's menu (agents:
    manage_sheet with copy) makes a plain copy right after it. New rows also get time-ordered ids,
    so a million rows import in 8 to 9.5 seconds instead of 26 to 38. (cc69a98)
  • List jobs fill the asking row too: a job that adds people or companies as rows in another sheet
    can also write fields of the same answer into the row that asked, from the same call.
    (f0c9e51)

Fixes

  • A list job's rerun deleted the rows it had added before, with no way back. They now go to the
    trash and show in History, so an answer that comes back shorter can't cost you rows.
    (8527eda)
  • A lookup waited forever while a paused run in the other sheet held a column it reads, and a new
    lookup there was refused. A paused run no longer holds it: the rows it hasn't reached read as
    empty, and the lookup says so while the run stays paused. (d47e31f)
  • A waterfall's auto-run that OpenRouter paused (a refused key, no credits) stayed paused until its
    settings were saved again. Saving an OpenRouter key now resumes it, and after running out of
    credits it goes on once OpenRouter reports credits for the key. (d47e31f)
  • The grid stuttered while a run filled its rows. Scrolling stays smooth now. (6239bd2)

Security

  • Sign-in lockout (medium, for installs open to the internet): anyone who could reach your
    sign-in page could keep you from signing in by sending about 10 wrong passwords every 15 minutes.
    A browser you've signed in with before now has a limit of its own, so it still signs in, even
    after you sign out. Changing the password makes every browser count as new again. Found in our own
    review. (0a0d395)

Updating

  • One-line install: run cubex update. Your data and settings stay, and if the new version
    doesn't start, the previous one comes back.
  • Docker: in your checkout, run git fetch --tags && git checkout v0.7.0, then
    docker compose up -d --build.
  • Coolify: Redeploy.
Every commit in this release
  • f0c9e51 List jobs can fill the asking row too: a job that adds its results as rows elsewhere may also write fields of the same answer (outside its results) into the row that asked, from one call ("✅ No rows to add" when it had none); a rerun whose answer has no results removes the rows that row added before (a waterfall miss its provider answered, or a single tool's empty list; a provider error, a soft failure or a budget stop keeps them), queued behind results still on their way and never by a test whose fields aren't picked; copy_columns takes {to, value} to write the same text into every added row; a single tool may name another list of its answer as its results (list.items_path, get_enrichment other_lists); the drawer shows "Outputs in this sheet" beside the list part, all off at first (#15)
  • cc69a98 Copy a sheet's values to a new sheet: "Copy values to a new sheet" in the sheet tab's menu, REST POST /api/v1/sheets/:id/copy and MCP manage_sheet action copy make a new sheet right after the source, holding its rows in order under plain columns (values only: no runs, formulas, lookups, rules, views or descriptions; a run's ⏳ ❌ ⏭️ ➕ cells left empty; columns to copy only some; the name defaults to "Copy of "), answering once every row is in. The rows go in slices with the source held for reading (edits and new rows go on, sorts and renames wait) and the copy busy, journaled in sheet_copy_jobs (migration 047), so a restart goes on from the cursor. Only the rows the source had at the start are copied, and History says how many. Every new row now gets a time-ordered id (UUIDv7) instead of a random one, so a million rows import in 8 to 9.5 s instead of 26 to 38 s and copy in about 8 s, with other requests waiting well under a second. A sheet in the trash isn't emptied while an export or a copy reads it. Each token gets 5 copies a minute. (#18)
  • 6239bd2 Grid: the ⏳ spinner turns inside an image, so a run's rows fill without stutter (#17)
  • 090fada AI and HTTP API runs never hang, and stop instead of spending: every call has a hard deadline, a stop reaches a run whose rows are all still out, rows failing in a row on the provider's side pause the run, a full disk stops paid calls, and a run whose worker stopped is started again (#21)
  • d47e31f Paused runs hold nothing forever: a lookup doesn't wait for a paused run in the other sheet (the rows it hasn't reached read as empty, and the lookup says so while it's paused), and a waterfall auto-run that OpenRouter paused goes on again once an OpenRouter key is saved, or, out of credits, once OpenRouter reports credits for the key (#23)
  • 1902cd4 AI visibility tables: Check AI visibility (dashboard, New Table) makes a table that asks AI engines (ChatGPT, Gemini, Google AI Mode, Perplexity, Copilot, through treg) the questions buyers ask: a Questions sheet with one enrichment column per engine set up and not run (setup-only runs, setup_only 2 = set up by a template), its answer, and formula columns (You in : your place among the brands an answer names, or Not named; Named by; Named first), and a Cited sites sheet of every source the answers cite (question, engine, position, title, URL, domain, your site); the guide asks after an estimate and edits the brands looked for (formulas rewritten, no cost); REST /v1/ai-visibility and the MCP tool ai_visibility (ask estimates by default; each start takes the token's run-start slot); migration 046 (#16)
  • c080324 Updates you can undo: before a new version starts, the installer keeps a copy of your data, puts it back with the previous version when the new one doesn't start, and cubex rollback goes back to the version and the data from before the last update; cubex start waits for a big database (#22)
  • 8527eda A list job's rerun moves the rows it added before to the trash instead of deleting them: one batch per sheet a day (trash how "rerun", "Replaced by a rerun" on the Trash page, list_trash and GET /trash), restorable with their cells, or gone at once when Settings keeps the trash 0 days (#20)
  • [5b255bf](https:...
Read more

Cubex v0.6.1

Choose a tag to compare

@gurmohitghuman gurmohitghuman released this 19 Oct 20:36
621326e

Cubex v0.6.1

Release date: October 19, 2026
Since v0.6.0: 2 commits · 103 files changed · +1,169 / −777

A small release. The sheet header is tidier, every dropdown in the app looks and works the same
way, and a browser tab left open while Cubex updates opens tables again instead of showing
"Something went wrong". There is no database upgrade this time.

Highlights

  • A tidier sheet header: the row of 11 buttons is now three. AI Column has an arrow that
    lists every kind of column: AI, Enrichment, Waterfall and HTTP API (they run with your keys), and
    the built-in Clean data, Formula and Lookup, which used to sit only under "+ Add Column".
    Data holds Import CSV, Export, Webhook and Remove duplicates, with a dot when auto-dedupe is
    on. ⋯ holds Setups, Usage and History. On a narrow window the header stays on one line and
    the labels turn into icons. (eb513c3)
  • One kind of dropdown everywhere: all of the app's dropdowns (about 40) are drawn like its
    menus, work with the keyboard and type-to-jump, and their lists fit the options and open above
    dialogs. (eb513c3)

Fixes

  • A tab left open while Cubex updated showed "Something went wrong" when you opened a table. It
    now reloads itself once and opens the table. If the table still can't load, the error page says
    what failed and has a Reload button. (ea708ca)
  • The filter in a column's header no longer applies itself before you finish typing its value.
    (eb513c3)
  • Dialogs and panels opened from a menu now take keyboard focus, and hand it back to the menu's
    button when they close. Escape in a dropdown closes only the dropdown, not the dialog around it.
    (eb513c3)

Updating

  • One-line install: run cubex update. Your data and settings stay, and if the new version
    doesn't start, the previous one comes back.
  • Docker: in your checkout, run git fetch --tags && git checkout v0.6.1, then
    docker compose up -d --build.
  • Coolify: Redeploy.
Every commit in this release
  • ea708ca A tab left open across an update opens tables again: the table page reloads once when its old file is gone
  • eb513c3 Sheet toolbar in three controls, the app's own dropdowns everywhere, Delete instead of delete for good (#14)

Full changelog: v0.6.0...v0.6.1

Cubex v0.6.0

Choose a tag to compare

@gurmohitghuman gurmohitghuman released this 19 Oct 15:33
48d6870

Cubex v0.6.0

Release date: October 19, 2026
Since v0.5.0: 34 commits · 854 files changed · +47,469 / −2,827

This release brings Cubex to Windows with a one-command install, and adds waterfall columns that
try several sources in order until one finds the value. Runs are easier to trust and to take back:
undo a run, keep deleted rows in a trash, see what's out of date and retry failed rows in one
click. Sheets can drop duplicates as rows arrive, and an agent's access token can have a spend cap.
Updating upgrades your database on first start, which can take a minute on a big one.

Highlights

  • Windows, natively: in PowerShell, irm https://raw.githubusercontent.com/gurmohitghuman/cubex/main/install.ps1 | iex
    installs Cubex with no admin rights, no Docker and no WSL. It starts at login, and cubex has the
    same commands as on macOS and Linux, including update with rollback and uninstall. Windows on ARM
    isn't supported yet; the installer says so and leaves nothing behind. (2c616b0)
  • Waterfall columns: get one value per row (a work email, a phone, a domain, a LinkedIn URL)
    from steps tried in order until one answers: treg tools, AI prompts, your own HTTP APIs, free
    formula steps, or a free lookup in another sheet such as your CRM list. A row without a step's
    inputs skips it at no cost. A step can check its value first (for example an email verify).
    "Try on 3 rows" runs it for real without writing to the sheet, and a real run then reuses what
    the dry run paid for. There are starters for a work email from name and domain, and for a mobile
    or direct phone. (8d9c4f8) (39c75c3) (ecb8401) (b912102)
  • Undo a run: "Undo last run…" in the column menu puts back what an AI, HTTP API, enrichment
    or waterfall run wrote, for 7 days. Cells changed since are skipped. Nothing runs again and
    nothing is billed. Agents use undo_run. (c160492)
  • Trash and History: deleted rows, sheets and tables go to the trash for 30 days (you can set
    0 to 90 in Settings), and you can restore them to where they were. Each sheet's History lists its
    setup changes and big row changes, with when and who made them. (c3543f7)
  • Run controls: a run's result goes out of date when a cell it read changes. The column menu
    runs the empty or out-of-date rows, retries the failed ones or runs all of them, and shows the
    cost first. A header with failures says "N failed, retry". Hover a cell for ▶ to run that one
    row. (e6203ce)
  • Auto-dedupe: pick a key column (text, email, domain, phone, company or person name) and
    whether to keep the oldest or newest row. Rows that arrive from webhooks, imports, agents or
    typing are checked as they come in, and duplicates go to the trash. Rows already in the sheet
    stay as they are. (e9c8a81)
  • Spend cap per access token: give an agent's token a dollar limit on AI and enrichments.
    Settings shows what it has spent and what's left. At the cap its new runs are refused, and a
    running AI run pauses itself. Existing tokens have no cap until you set one. (6aac2ee) (dbd25ea)
  • Setup versions: save a sheet's column setup by name, compare it with the sheet, and restore
    it. A restore runs nothing, bills nothing and writes no cell. (4a99cf5)
  • Date filters and filter groups: compare dates written in several formats, nest AND/OR
    groups, and switch a rule off without deleting it. "Only run if" rules can compare dates too.
    (a7da92b)
  • Search the grid: press "/" or Cmd/Ctrl+F to find text through the view you're looking at,
    even in a million-row sheet. (ded05cc)
  • HTTP API columns retry: a failed request is tried again up to 3 times, waiting longer each
    time and following Retry-After. You can also leave out empty values and add a column with the
    response code. (0a38390)
  • Run webhooks: get a signed POST at your URL when a run finishes. (47353fb)
  • Reuse found answers and see usage: a row an earlier run already found fills from that answer
    at $0, for 30 days by default. Usage shows what each sheet's runs did and cost, by column, day or
    run, with a CSV download. (ea04f9a) (f228216)
  • JSON tree for HTTP replies: an HTTP API column's stored reply shows as a tree you can page
    through. Click a value to copy its path, or add it as a column. (c84a8d2)
  • For agents: read_rows can count, sum and average per value. get_sheet explains what fills
    each column, and sheets and columns take descriptions. There is also a Cubex plugin for Claude Code,
    Codex and Cursor (docs/agent-plugin.md). (1ddcec7) (fd4f3d3) (9d61000)
  • Try with sample data: one click makes a small sample table of made-up leads, with free columns
    already filled and an AI column ready to try. (716020a)

Fixes

  • An HTTP API reply with keys like @odata.nextLink, @type, user's name or $ref filled the column
    with ❌ or nothing. These keys are now read as written. (c84a8d2)
  • A view whose filter had a run-state rule on a column that had lost its run blocked every filter
    save, and made reads and exports through that view fail. It now works. (c2adb32)
  • A run with a limit no longer stops at rows that cost nothing, and one slow row no longer holds up
    the rest. (ea04f9a)
  • Dropdowns now line up their arrow with their text, and look the same in every browser.
    (48d6870)

Updating

  • One-line install: run cubex update. Your data and settings stay, and if the new version
    doesn't start, the previous one comes back.
  • Docker: in your checkout, run git fetch --tags && git checkout v0.6.0, then
    docker compose up -d --build.
  • Coolify: Redeploy.
Every commit in this release
  • 0a38390 HTTP API columns: a failed request is tried again (429 and 503 for any method; other 5xx and no answer for GET, HEAD, PUT and DELETE, POST too when asked), up to 3 more times by default, each wait longer and following Retry-After up to a minute, pausing or cancelling stops a waiting row; Leave out empty values; a column with the response code; cell values escaped for where they go; REST/MCP retries, retry_post, skip_empty_values, status_code_column
  • 47353fb Run webhooks: a signed POST (X-Cubex-Signature, HMAC-SHA256 of the body) to your URLs when an AI, HTTP, enrichment or setup run finishes; set in Settings, Run webhooks or over REST, the secret shown once and kept encrypted, sent through the SSRF guard with 3 tries, the last 50 deliveries logged; runs started over REST or MCP can name one (webhook_id); MCP list_run_webhooks
  • ea04f9a Reuse found answers: a row whose lookup an earlier run found (same tool, inputs and provider choices, any sheet, within 30 days by default) fills from that answer at $0 with no call; estimates, confirms and estimate_only count those rows, the answer panel says where each came from, Always call again (fresh) and Rerun this row call again, Settings sets the days (0 turns it off), a limit no longer stops rows that cost nothing, and the run loop no longer piles up waits on a slow row
  • f228216 Usage: what a sheet's runs ran and cost (AI, HTTP API and enrichment columns, deleted ones too) by column, day or r...
Read more

Cubex v0.5.0

Choose a tag to compare

@gurmohitghuman gurmohitghuman released this 17 Oct 23:35

Cubex v0.5.0

Release date: October 17, 2026
Since v0.4.3: 6 commits · 206 files changed · +9,583 / −1,028

This release is about finding and connecting your data. Pull values from another sheet with
lookup columns, save filters and hidden columns as views, and filter rows by whether their runs
failed, never ran or are still running. Stopping everything on a sheet is now one click.
Updating upgrades your database on first start, which can take a minute on a big one.

Highlights

  • Lookup columns: fill a column from another sheet, in any table, for free. Match a column of
    this row by "is exactly" or "contains", then bring back a column of the first match, yes/no, a
    count, or every matching row as a list. The column follows its own input, so new and edited rows
    fill on their own. Renaming a column in the other sheet carries over, and deleting it stops the
    lookup with a message instead of a wrong answer. A sheet you look into keeps an index of the
    column you match on, which uses some disk space and makes writes to that sheet a little slower.
    Agents use lookup_column; the API has POST /api/v1/sheets/:id/lookup-columns.
    (32fe813)
  • Views and hidden columns: save a sheet's filters and hidden columns as a named view and
    switch views from the bar above the grid. Hide columns from the column menu or the columns
    picker. Start from "Rows with errors" or "Fully filled rows", and export either the view you're
    looking at or the whole sheet. Agents and the API can read and export through a view.
    (a1aea0a)
  • Filter by run state: show only the rows whose AI, HTTP or enrichment run failed, never ran,
    was kept out by "Only run if", or is still running. You can also filter by a list of values.
    Exports, row transfers, read_rows and rows/query use the same filters, and agents can
    combine conditions with OR.
    (be79e6a)
  • Run status for agents: read_rows and rows/query can return each run cell as
    {status, value, error}, so agents no longer have to read status text out of the cells.
    (be79e6a)
  • Stop all: one click in the header stops every run and setup on a sheet. Agents use
    control_run with cancel_all, the API has POST /api/v1/sheets/:id/runs/stop, and
    get_sheet lists what is running.
    (e72db3c)
  • AI prompt starters: start an AI column from a ready prompt (qualify, classify, write an
    opener, score a lead, or build a company profile), written with your sheet's own columns. The
    AI column dialog can now also fill several typed columns from one answer.
    (e6cc57f)

Updating

  • One-line install: run cubex update. Your data and settings stay, and if the new version
    doesn't start, the previous one comes back.
  • Docker: in your checkout, run git fetch --tags && git checkout v0.5.0, then
    docker compose up -d --build.
  • Coolify: Redeploy.
Every commit in this release
  • e417656 Migration 010: describe enrichments without naming another product
  • be79e6a Filters: find rows by run state (failed, not run yet, kept out, running), by a list of values and with OR groups, in the grid, read_rows, rows/query, export and transfer; include_status reads run cells as {status, value, error}
  • e72db3c Stop all: every run and setup on a sheet stops at once, from the header, POST /api/v1/sheets/:id/runs/stop and MCP control_run cancel_all; get_sheet lists what's running
  • e6cc57f AI prompt starters: qualify, classify, an opener, a lead score and a company profile, written with the sheet's own columns; the AI column dialog fills several typed columns from one answer
  • a1aea0a Views: save a sheet's filters and hidden columns as named views and switch them from the bar above the grid; hide columns from the column menu or the columns picker; start from Rows with errors or Fully filled rows; export this view or the whole sheet. read_rows, rows/query and exports read through a view; REST creates and changes views
  • 32fe813 Lookups: a free column filled from another sheet (any table), matching a column of this row by "is exactly" or "contains": a column of the first match, yes/no, a count or the matching rows as a list; it follows its own column, renames in the other sheet carry over and deletes stop it with a message; MCP lookup_column, POST /api/v1/sheets/:id/lookup-columns

Full changelog: v0.4.3...v0.5.0

Cubex v0.4.3

Choose a tag to compare

@gurmohitghuman gurmohitghuman released this 17 Oct 00:44

Cubex v0.4.3

Release date: October 16, 2026
Since v0.4.2: 4 commits · 124 files changed · +6,035 / −169

Setups: build a chain of columns once, then use it on every sheet that needs it. Save how your columns are filled (prompts, models, requests, cleaners and formulas) as a named setup, build the same columns on another client's sheet in one go, and use it again there to fill new rows. Also new: run an AI or HTTP API column on its first rows to check it before a big run.

Highlights

  • Setups: save a chain of filled columns (AI, HTTP API, enrichment, clean data and formula columns, with their "Only run if" rules and auto-run) as a named setup, from a column's menu or Setups in the toolbar. On another sheet, choose Use a setup…: match the columns it reads to that sheet's columns, rename any column the sheet already has, see what each step could cost, then test it on the first rows or run it on every row. The steps run in order, each once the columns it reads are filled, and a chip in the toolbar shows where it is, with pause and stop. Saved keys are kept by name only, never their value. Rename, export, import and delete setups in Settings, Setups. Agents use save_setup, apply_setup (an estimate unless estimate_only is false), get_setup_run and control_setup_run. (5ce8c98, 8152902)
  • Use a setup again for new rows: on a sheet you used a setup on, its steps carry their columns on. Each fills only the rows it hasn't done, with the column's own model and settings, and you see what that costs first. It also picks up a setup that failed or was stopped: the dialog starts from the choices you made last time on that sheet. (2098309)
  • Run First Rows: an AI or HTTP API column's menu can run it again on the sheet's top rows (10 by default, up to 1,000), so you can check a changed prompt or request before running the rest. Agents pass first_rows to control_run. (2098309)

Fixes

  • A run on a big sheet whose "Only run if" rule keeps most rows out starts sooner: rows already marked "⏭️ Condition not met" aren't written again. (2098309)

Updating

  • One-line install: run cubex update. Your data and settings stay, and if the new version
    doesn't start, the previous one comes back.
  • Docker: in your checkout, run git fetch --tags && git checkout v0.4.3, then
    docker compose up -d --build.
  • Coolify: Redeploy.
Every commit in this release
  • 0567680 Docs, tool descriptions and comments: describe features on their own, without comparing them to other products
  • 5ce8c98 Setups: save a chain of filled columns as a named setup; list, rename, export, import and delete them
  • 8152902 Setups: use a saved setup on another sheet, its steps run in order with an estimate first
  • 2098309 Setups: used again where its columns are, its steps carry them on; run an AI or HTTP API column on its first rows

Full changelog: v0.4.2...v0.4.3

Cubex v0.4.2

Choose a tag to compare

@gurmohitghuman gurmohitghuman released this 15 Oct 19:07

Cubex v0.4.2

Release date: October 15, 2026
Since v0.4.1: 11 commits · 217 files changed · +13,326 / −293

Free data cleaning, right in the sheet. Clean names, companies, emails, domains and phone numbers into new columns, work a column out with a formula, and remove duplicate rows, all without AI or credits. Setting up an HTTP API column is quicker too: paste a cURL command.

Highlights

  • Clean data, free: + Add Column has Clean data. It fixes names typed in ALL CAPS and turns "Smith, John" around, splits first and last names, drops Inc and LLC from company names, checks email formats, turns websites and emails into root domains, and puts phone numbers in one format. You see the first rows before and after, the original column stays as it was, and auto-run keeps the new column current as rows arrive or change. Agents use clean_column. (359119f)
  • Formulas, free: + Add Column has Formula: one line of JavaScript that reads the row's cells as {{Column name}}. Pick the work email out of an API response, join names, do math. Describe what you want and your default AI model writes the formula once; every row after that costs nothing. Formulas run in a sandbox with no access to your files, the network or the server. Agents use formula_column and write_formula. (ad037d8)
  • Remove duplicates: a new toolbar button. Pick the columns rows must match on, as text, email, domain, phone, company or person name (upper/lower case and extra spaces never matter), and keep the first, last or most filled-in row of each group. You see how many rows would go and a few of the groups before anything is removed, and a row missing a value you matched on always stays. Agents use remove_duplicates, which only reports unless they pass dry_run: false. (9bc30dd, ff6f70b)
  • Paste a cURL command: in the HTTP API column dialog, paste a curl command (from an API's docs or your browser's network tab) and the method, URL, headers and body fill in. A key in the command never ends up in the column: you save it as a saved key, use one you already have, or leave it out. (08e4267)

Fixes

  • The sheet stays fast while a run fills many columns: live results now redraw only the cells that changed, not every cell on screen. (d66e8ff)
  • An HTTP API column using DELETE now sends its body; it was dropped before. (9fa0ca6)
  • Starting an HTTP run through the REST API now honors "Only run if" (run_if); every row ran before. (9fa0ca6)

Security

  • Server freeze from a crafted request body (moderate): a request template or body with a long run of { or spaces made the {{name}} matching slow down sharply with its length. A 2 MB body, which an access token with only the run scope can send, could hold the server for about 20 minutes. Matching is now linear. Found in our own review. (f4a0eca)

Updating

  • One-line install: run cubex update. Your data and settings stay, and if the new version
    doesn't start, the previous one comes back.
  • Docker: in your checkout, run git fetch --tags && git checkout v0.4.2, then
    docker compose up -d --build.
  • Coolify: Redeploy.
Every commit in this release
  • 359119f Clean data columns: free cleaners for names, companies, emails, domains, phones and text, kept current by auto-run
  • ad037d8 Formula columns: a free column worked out from each row by a JavaScript formula
  • 89b9650 Tests: e2e requests follow E2E_PORT
  • f4a0eca HTTP templates: {{name}} matching stays fast on long runs of braces or spaces
  • 9fa0ca6 HTTP runs: DELETE sends its body, and the REST start passes run_if
  • 08e4267 Paste a cURL command: fill an HTTP column from curl; keys it finds become saved keys
  • 445c41e CI on Node 22: the formula worker starts from source, and the cURL tests load
  • d66e8ff Grid: live run updates redraw only the changed cells, not every column
  • 9bc30dd Remove duplicates: match rows on chosen columns, see the groups, keep the first, last or fullest row
  • ff6f70b Remove duplicates: the dialog never opens on a column that merges different companies or people
  • 2989720 Tests: the MCP tool list includes remove_duplicates

Full changelog: v0.4.1...v0.4.2

Cubex v0.4.1

Choose a tag to compare

@gurmohitghuman gurmohitghuman released this 14 Oct 17:29

Cubex v0.4.1

Release date: October 14, 2026
Since v0.4.0: 2 commits · 27 files changed · +394 / −105

Enrichment runs cope better with providers that say "too many requests" (429). Rows wait and ask again for free instead of failing at once, a failed row says what each provider answered, and you choose how many rows run at once, also when you resume a run.

Highlights

  • 429s are retried for free: when a provider answers 429 (a single tool, or every provider in a waterfall), the row waits and asks again, up to 5 times over a few minutes. treg charges nothing for these, so it costs nothing. Free providers on treg's own key can be shared by everyone on treg (ContactOut's free email check takes about 20 calls a minute in all), so a low concurrency still helps there. (c18f906)
  • Failed rows say why: a row where every provider failed now names each one's answer, for example "ContactOut answered 429: Too Many Attempts.", and agents see it as retryable in get_run_results. (c18f906)
  • You choose the speed: enrichment runs take 20 rows at once by default (was 5), and HTTP API and enrichment runs go up to 100. Agents can change it on a rerun and now on a resume too (control_run, POST /api/v1/http-runs/:id/resume). (2c306f5, c18f906)

Fixes

  • A provider saying a page doesn't exist no longer stops the whole enrichment run; that row is marked "Not found". (c18f906)
  • When treg is busy, a run waits at most 2 minutes before asking again. (c18f906)
  • The per-provider counts in a run's status now include providers that failed inside a waterfall, and every retry. (c18f906)

Updating

  • One-line install: run cubex update. Your data and settings stay, and if the new version
    doesn't start, the previous one comes back.
  • Docker: in your checkout, run git fetch --tags && git checkout v0.4.1, then
    docker compose up -d --build.
  • Coolify: Redeploy.
Every commit in this release
  • 2c306f5 Users choose concurrency: enrichments default to 20, HTTP and enrichment runs up to 100
  • c18f906 Enrichments: 429s retried for free, failed waterfalls name each provider's error, resume takes concurrency

Full changelog: v0.4.0...v0.4.1

Cubex v0.4.0

Choose a tag to compare

@gurmohitghuman gurmohitghuman released this 13 Oct 21:15

Cubex v0.4.0

Release date: October 13, 2026
Since v0.3.0: 4 commits · 89 files changed · +1,763 / −266

Faster enrichments, and clearer numbers on what your runs cost and what you can still spend. Agents can now choose how many rows run at once, see what each provider in a waterfall did, and read your treg and OpenRouter balances directly.

Highlights

  • Enrichments run faster: a run starts the next row as soon as one finishes, instead of waiting for the slowest row in a group. Agents can set concurrency (1 to 20, default 5) on run_enrichment and on reruns. (bbd09a2)
  • See what each provider did: for a waterfall run, get_run_status lists every provider with its tries, hits, misses, rate limits (429s) and cost. A provider that answers "Too Many Attempts" three times in a row is skipped for 5 minutes, then asked again, so rows stop waiting on it. (bbd09a2)
  • Change concurrency on an AI rerun: control_run rerun (and POST /v1/ai-runs/:id/rerun) takes concurrency, so you can retry failed rows more slowly instead of deleting the columns and starting over. (bbd09a2)
  • Read your balances: the new get_balances tool (and GET /v1/balances) shows your treg balance, the enrichment daily limit and what OpenRouter reports for your key. (bbd09a2)
  • OpenRouter credit warnings: an AI run's estimate_only and preview_rows show how much OpenRouter credit the run holds at once at its concurrency, and warn when that's more than your balance. (bbd09a2)
  • Costs with your own provider key: when a model runs on your own provider key through OpenRouter (BYOK), runs, results, previews and estimates now show what the provider charged (provider_cost_usd), not just OpenRouter's fee, which is often $0. (bbd09a2)

Fixes

  • AI rows that OpenRouter turned away because too many calls were running at once ("exceed your available credits given your current in-flight requests") are now retried automatically after the wait OpenRouter asks for. Rows that still fail say to rerun with a lower concurrency, instead of telling you to fix a setting. (bbd09a2)
  • An enrichment provider's rate limit (for example "429: Too Many Attempts") now reads as a temporary error you can rerun, not an unknown one. (bbd09a2)
  • When treg's shared key for a provider is busy, the row waits and asks again instead of pausing the whole run. (bbd09a2)

Updating

  • One-line install: run cubex update. Your data and settings stay, and if the new version
    doesn't start, the previous one comes back.
  • Docker: in your checkout, run git fetch --tags && git checkout v0.4.0, then
    docker compose up -d --build.
  • Coolify: Redeploy.
Every commit in this release
  • 5ad1997 README: brand logos instead of text badges
  • 1cef3d2 README: only official logos, used as their owners provide them
  • 334518f Settings: OpenRouter's new official logo
  • bbd09a2 Agent feedback: run concurrency, balances, BYOK cost, waterfall provider counts

Full changelog: v0.3.0...v0.4.0

Cubex v0.3.0

Choose a tag to compare

@gurmohitghuman gurmohitghuman released this 13 Oct 17:21

Cubex v0.3.0

Release date: October 13, 2026
Since v0.2.0: 11 commits · 80 files changed · +2,580 / −526

This release moves Cubex to the AGPL-3.0 license and fixes what an audit of enrichments and auto-run turned up, most of it about money: the daily limit now holds when several enrichments run at once, and auto-runs can no longer keep adding rows to each other. The README is shorter, with the reference parts in their own guides.

License change

Cubex is now licensed under the GNU AGPL-3.0 instead of MIT. (5f73121)

  • Using Cubex, hosting it yourself, and running it for your business or your clients work as before.
  • If you let other people use a changed version, including over the web, you have to give them the source code of your version under the same license.

Highlights

  • Enrichments share the daily limit: before a batch starts, Cubex sets aside the most its rows can cost, so enrichments running at the same time can no longer pass your daily limit together. A run that finds the rest of the day set aside waits for the others, then goes on or pauses at the limit. (deaeaa9)
  • Auto-runs can't loop: when list enrichments with auto-run would add rows to each other's sheets without end, auto-run now pauses and names the auto-run to turn off. Starting such a run by hand is refused with the same explanation. (ef4231f)
  • New guides: the README is shorter. Every setting, your data and backups, performance on a million rows, and Docker, Coolify and running from source now have their own pages under docs/. (f1f207e)
  • Where lookups come from: the enrichment drawer and the treg card in Settings say lookups go through treg.to on your own treg key, with treg's logo. (40522ed, f8f0823)

Fixes

  • Rows an "Only run if" rule marked "⏭️ Condition not met" now run with auto-run once an edit makes them pass. (ef4231f)
  • Resuming a paused enrichment more than a day later no longer pays again for single-provider lookups that were in flight when you paused: Cubex gets their answers back for free. (deaeaa9)
  • Enrichments billed on your own provider key now stop at your daily limit, and at a column's daily cap, if treg does charge for them. (4577ae5)
  • A row's cost is no longer counted twice when treg's answer was cut off and fetched again, so Verified work email no longer runs out of budget early. (4577ae5)
  • Renaming or deleting a column in a sheet that list enrichments add rows to no longer holds up Cubex when many runs fill that sheet. (b506bd8)
  • List results waiting on a paused run in the sheet they go to now say so ("Resume or cancel it") and no longer block their column. (b506bd8)
  • Turning an HTTP API auto-run back on after one of its input columns was deleted is now refused, instead of failing every new row. (b506bd8)

Security

  • Medium: a saved API key could stand in for a deleted column. After you deleted a column that an HTTP API column read as {{X}}, a rerun or auto-run of that column sent the value of a saved API key also named X in its place, to the API the column calls. Now a deleted column's name never resolves to a saved key, and the rerun is refused until you edit the column. Columns deleted before v0.3.0 aren't tracked, so if you deleted an input of an HTTP API column and have a saved key with the same name, edit that column before running it again. Found in an internal audit. (b506bd8)
  • Low: pause messages that include text from treg are now redacted before they're stored, as error messages already were. Found in an internal audit. (4577ae5, b506bd8)

Updating

  • One-line install: run cubex update. Your data and settings stay, and if the new version
    doesn't start, the previous one comes back.
  • Docker: in your checkout, run git fetch --tags && git checkout v0.3.0, then
    docker compose up -d --build.
  • Coolify: Redeploy.
Every commit in this release
  • 13a4c80 Tests: fictional people in the treg fixtures
  • 40522ed Enrichment drawer: say where lookups come from, with treg's mark
  • 5f73121 License: AGPL-3.0 instead of MIT
  • 2c79284 README: logo, badges and quick links at the top
  • deaeaa9 Enrichments: runs share the daily limit; a resume gets paid answers back
  • ef4231f Auto-run: catch list loops on every start; rows that failed a rule run once they pass
  • 4577ae5 Enrichments: own-key runs stop at the limits; a retried call counts once
  • b506bd8 List jobs into a sheet rewrite by page; a deleted column never becomes a saved key
  • f8f0823 Settings: treg's logo on the treg card
  • f1f207e README: shorter, with the reference parts moved to docs
  • 96bdffb README: HTTP API columns can auto-run too

Full changelog: v0.2.0...v0.3.0