Show HN: Recalc – Spreadsheet where cells can be Claude Code or Codex terminals (github.com)

2 points by sshah03 ↗ HN
I built this because it was useful for me when building evals/benchmarks, and I decided to put it up for free for others. The goal was quite simple, make it easy to use a lead claude code / codex session in a panel on the side, while allowing every cell to also be a terminal session running claude/codex, and make it possible to continue a session in an actual terminal window if I needed to. They can all talk to each other using cells on the grid, named cells, or the MCP server that effectively glues the app together. I also found it useful for managing context within related but disparate sessions.

My real benchmark runs with recalc are internal to my startup, so to demonstrate some of the functionality I built a small FDA Bench with the tool (obtain and put together dossier's of FDA submissions, and see if a harnessed Claude could have accurately predicted pass/fail): https://github.com/sshah03/recalc#a-model-benchmark

It is still very much a work in progress, but given the versatility of spreadsheet apps, wanted to see how others see themselves using it and what doesn't exist that would be useful to them. Currently runs locally on macs, linux as well but that's less tested, and Windows hasn't been tested at all so that'll come in the future.

14 comments

[ 3.1 ms ] story [ 34.3 ms ] thread
[flagged]
I punt on this a little bit, in that to make it easier I don't allow actions that would cause issues with this when an agent is still running (insert, delete, sort rows etc...) because it's tough to handle for mid-execution.

However, in the other cases, references get rewritten the same way everywhere (whether it's a formula, or an agent's watch list), so {A3} becomes {A4} etc... everywhere with the same process. Also in that case, it doesn't get marked for needing to be "re-run" because it checks value itself is unchanged, even if the cell being referred to changed.

I've tested it quite a bit. Given all of the moving parts in a spreadsheet app there's still the possibility that given enough usage someone encounters some combination of moves where this fails, but I think if that does happen it should be a fixable bug.

I also provide a backup solution with "Named cells", basically off sheet cells that can be used for constants and such and referenced by name instead of by cell, if needed.

I think you could use named cells to fix the insert/delete row problem in general.

The named cell can have a trivial `=SheetName!a3`. Those will be automatically updated with insert and delete just like any other formula.

They can be referenced directly for reading, and for writing you can do a quick parse and find the original.

That's a good point. I can keep it separate from user named cells, but make sure everything has a unique identifier I track. Even a million cell workbook would really only add about 50mb of memory, so should be doable.

I'll play around with this, thanks for the idea!

[flagged]
Export does exist, and the citation does travel with the cell as a cell comment (should show up as a red triangle in the corner of the cell in Excel). This feature does need more testing.

As an alternative, I can provide a checkbox on export to have a "sources" sheet created in the workbook with references back to the cell if that works better.

If you do decide to use it, I'm happy to work with you to make sure the export works reliably. I haven't had a good test user for this yet.

Interesting to see more people thinking in this direction. I started working on https://truecalc.app/agents sometime ago.
Nice! I am surprised it's not more common, but part of it is possibly that for the industries that use spreadsheets the most, copilot+excel does the trick.

What have your use cases for it been so far?

[flagged]
On reads, an agent gets a history of old and new values since it started running. For writes, unfortunately, for now it's just last write wins (though there are some guards, like if the user verifies a value an agent writes then it's locked from being re-written).
Nice direction

Another direction I would consider for someone who needs this approach is Grist's MCP integration and a local agent harness.