DeepSeek Harness Remote
DeepSeek Harness Remote: DeepSeek Harness 실행 PC와 모바일·PC를 안전하게 연결해 어디서나 작업 이어받기
Dexterity Sheets is the spreadsheet of Dexterity Design Services. Edit the same workbook together on the office network, see who changed what, go back to any version, and keep working with Excel .xlsx
생산성Rust · PythonGitHub @vikramdex-ops온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Dexterity Sheets: Excel-compatible spreadsheet with live, named, audited co-editing over the office LAN. Built on GridCraft (Rust).
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗DexteritySheets-Setup.exe and double-click it. No
administrator rights, nothing else to install. If Windows says "Windows protected your PC",
click More info → Run anyway (the installer isn't code-signed yet).D: drive, a
project folder, the network drive) and click Share › Share…. The file stays
where it is and keeps everyone's edits; your team sees each other's changes almost instantly.Dexterity Sheets is built on the open-source GridCraft spreadsheet. Every improvement made there is merged in automatically, tested, and delivered to every desk by the built-in updater, usually within hours.
It looks and works the way you expect: the same ribbon tabs, the same shortcuts, 500+ functions
(VLOOKUP, XLOOKUP, SUMIFS, IFS, dynamic arrays…), tables, conditional formatting, charts,
filters and printing. It reads and writes real .xlsx files that Excel opens without complaint.
Dates and numbers follow your Windows settings (dd-mm-yyyy, 12,34,567) like Excel does.
No. Everything runs on the office network: your files stay in your folders, and the office server passes edits between PCs and keeps the history. Nothing goes to anyone's cloud. The office server goes online to fetch new versions; a PC that has no office server reads this repository's releases page itself (only that, checksummed; switch it off in the updates dialog if you prefer).
Both changes are kept in Edit History. The one the server received last is the value everyone sees, and everyone ends up with exactly the same workbook. People editing different cells never get in each other's way, and Undo only takes back your changes.
Keep working. Your edits are kept on your PC and go through as soon as the office server can be reached again; the status bar shows how many are waiting. Nothing the server has confirmed can be lost: it writes every change to disk before anyone else sees it.
Yes, and that's the normal way to work. Open the file from wherever it is saved (D:\Projects\…,
your Desktop, the network drive), then click Share › Share…. Nothing is moved or
copied anywhere for you to look after:
A file that isn't shared is just a file: open and save .xlsx and .csv anywhere, like any
spreadsheet.
They join the live workbook instead of editing a copy of their own, so a file on the network drive never splits into two versions. If you close a shared file and open it again later, it rejoins and catches up with what the team did meanwhile.
It is never overwritten. If another program (Excel, a copy from email) saves over a shared file, Dexterity Sheets stops writing to it and says so. Everyone's edits are still in the shared workbook: use Save As to keep them as a file.
Only people with an account on the office server. IT gives each person a role: viewer (read only), editor (edit, create, share) or admin. Every change is recorded with the name of the person who made it.
You don't have to do anything. When a new version is out, the status bar shows Update to X.Y.Z: click it and Dexterity Sheets installs the update and reopens (unsaved workbooks are asked about first). You can also use Automate › Check for Updates…, which asks the office server and this repository's releases page and tells you what each answered. A PC with no office server still gets updates this way, a few seconds after it starts and once a day.
That message appears for any program that isn't code-signed yet. Click More info → Run anyway. Every release lists SHA-256 checksums and is built and tested automatically from the code in this repository.
From the latest release:
| File | What it is |
|---|---|
DexteritySheets-Setup.exe | The installer for everyone: double-click. Per-user, no administrator rights, no extra runtimes. /quiet or /passive for silent installs, /log <file> for a log. |
dexterity-sheets-<version>-windows-x64.msi | The same installer as an MSI, for deployment tools: msiexec /i … /qn |
dexterity-sheets-<version>-windows-x64-portable.zip | Runs without installing |
DexSheetsServer-Setup.exe | The office server, for the one always-on PC: double-click. Installs the server as a Windows service and the Server Manager. /quiet for silent installs. |
DexSheetsServer-<version>-x64.msi | The same server installer as an MSI, for deployment tools |
SHA256SUMS | Checksums of all of the above |
Before any release is published it has passed the full test suite, a live three-window co-editing test, and installer tests: the app's two installers are installed, started, asked to calculate and uninstalled; the server's two are installed, checked for a running service, the firewall rules and a locked data folder, opened in the Server Manager, and uninstalled.
DexSheetsServer-Setup.exe from the
latest release and click Install (Windows asks for administrator
rights once). It installs the server as a Windows service that starts with Windows and
restarts itself if it ever stops, and opens the firewall for the office network only.Everything else is in the Server Manager too, so the job can be handed to anyone:
| Page | What it does |
|---|---|
| Server | Running or stopped, with Start / Stop / Restart; the name, computer name and addresses teammates use; whether the firewall is open (and a button to open it); the data folder and its size; the server log |
| People | Everyone who can sign in: change a role, reset a password (a readable one is made and shown once), disable or remove. The last administrator can't be locked out. |
| Add many people | The bulk list described above |
| App updates | Fetch new versions of Dexterity Sheets from this GitHub repository automatically, or add an .msi by hand; every PC on the network is offered it |
| Backup and restore | One .zip with every account, shared workbook, edit history and version; restoring keeps the data it replaces |
| Installed versions | Which Dexterity Sheets version each PC runs, its channel and when it was last seen, with a count per version |
| Releases | Each installer's channel (stable or testing), status (OK, known issue, deprecated, blocked) and the note people running it see; which version stable and testing PCs are offered and where a blocked version rolls back to; whether updates are offered, installed on their own or never offered |
| Feedback | Problem reports sent with Help › Report a Problem, grouped by version and feature, each readable in full (with its logs when included); Open GitHub issue fills in a new issue without names of people or PCs |
| System health | Failed updates, starts after a crash or forced shutdown, and errors, per version over 7 and 30 days, and the latest 50 |
| Feature adoption | The 30 most used commands and the rarely used ones over 7, 30 or 90 days, for all versions or one (command names only) |
Roles: Editor (edit, create and share), Viewer (read only), Administrator (also
manages shared workbooks). The data lives in C:\ProgramData\Dexterity Sheets\Server, readable
only by administrators; uninstalling never deletes it. Full guide:
docs/collaboration.md.
| Share | Open the file from wherever it is saved and click Share › Share… (or File › Shared › Share the current workbook). The file stays where it is: the app of the person who shared it saves everyone's edits into it a second after each change, and on Ctrl+S. File › Shared › New shared workbook starts an empty one. |
| Who can open it | Everyone at the office, or named people, each as an Editor or a Viewer, optionally until an end date; choose whether viewers may save a copy. Copy link gives a link for a chat or e-mail that opens the spreadsheet in the app after checking the reader's access. |
| Where your edits are | The status bar says saved on the server, saving N edit(s), offline or out of step, reloading; a workbook being shared shows Sharing · uploading until the server has it. |
| Opening a shared file | Opening a file that is being shared joins the live workbook, so a file on the network drive never splits into two versions. Reopening your own shared file rejoins it and brings the file up to date. |
| Stop sharing | Share › Stop sharing (keep my file): the file gets every edit and is just a file again; everyone else is told and keeps a copy in their window. If another program changed the file while it was shared, it is never overwritten: the app says so and the edits stay in the shared workbook (Save As keeps them). |
| See each other | Other people's selections are outlined in their colour with their name; "(typing)" while they edit a cell. Click a name in the status bar to jump to them. |
| Who changed it | The status bar shows who last changed the active cell. Click it, or Review › Edit History (Excel's Show Changes), for that cell's history or the whole workbook's, filterable by person. |
| Versions | Review › Versions: keep a labelled version ("Issued for review Rev B"), open any version as a separate copy, or restore one for everyone (the current state is kept first). Ctrl+S keeps a version too. |
| Offline | Edits made while the server can't be reached are kept and sent on reconnect; the status bar shows how many are waiting. |
What the server keeps on disk, and why nothing acknowledged can be lost, is in docs/collaboration.md.
A test harness drives Microsoft Excel itself (through COM, as a black box) and compares: formula results, number-format display, typed entry, CSV import/export, and files written by each application opened in the other.
| Check | Result |
|---|---|
| Files written by Dexterity Sheets opened in Excel | 15/15 open, 0 repair prompts |
| Excel recalculating our files | 0 differences |
| Function results vs Excel (295 formulas + dynamic arrays) | 343/344 |
| Number-format display text | 409/422 |
| Typed entry vs Excel with Indian regional settings | 42/42 |
Dates (dd-mm), digit grouping (12,34,567) and currency follow the Windows regional settings, as Excel does on the same PC; files stay locale-independent.
What Dexterity Sheets does and does not do yet, feature by feature against official GridCraft and the latest Excel, is in docs/dexterity-parity-audit.md; the screen-by-screen check that nothing is a placeholder is docs/dexterity-ui-audit.md. How shared workbooks are kept intact (the blank-shared-workbook investigation, the sync states and the regression tests) is in docs/dexterity-p0-persistence.md; what is planned next, in docs/dexterity-roadmap.md.
An engine-first Rust workspace (from GridCraft) with Dexterity's layer on top:
| Crate | Job |
|---|---|
core, numfmt, formula, functions, model, calc, xlsx, chart, engine | the spreadsheet: values, number formats (now with regional settings), parser, 500+ functions, copy-on-write workbook model, dependency-graph recalculation, XLSX/CSV, charts, the command registry |
ui-egui, apps/gridcraft | the Windows desktop app (DexteritySheets.exe) |
collab | LAN co-authoring: workbook diff/patch, the wire protocol, client, server, discovery, accounts, audit trail, versions, update distribution |
apps/gridcraft-server | DexSheetsServer.exe: the server (as a Windows service), accounts CLI, GitHub release fetcher |
apps/gridcraft-server-manager | DexSheetsServerManager.exe: the server's control panel (people, bulk import from a template, service, firewall, updates, backups) |
ui-egui/src/collab_ui.rs | everything sharing looks like in the window |
How live editing works. Each window compares its workbook with the last state it synchronised and sends the difference as a patch of absolute assignments (cells with their style, sheet settings key by key, the sheet list). Because patches come from comparing workbooks, every way of changing one (commands, paste, fill, sort, undo, scripts) is shared without per-feature code. The server numbers each patch, writes it to an append-only log (fsync), records the audit lines, and broadcasts it. Every window shows server state + its own not-yet-acknowledged patches, so all copies converge on the server's order. Remote patches are also applied to each window's undo history, which is why Undo only takes back your own edits.
Every 6 hours the Upstream sync workflow checks storytold/gridcraft and, when there is something new:
main is broken.main. Dexterity's files stay ours, branding
is re-applied, and our small hooks into GridCraft's code are put back even when upstream moves
code around (reapply_overlay.py, verified by check_overlay.py).DexteritySheets-Setup.exe and the .msi are each
installed, started, asked to calculate, and uninstalled; the server's DexSheetsServer-Setup.exe
and .msi are installed as a running service, checked, and uninstalled.Details: packaging/dexterity/UPSTREAM.md.
Versions: packaging/dexterity/VERSION is Dexterity Sheets'; Cargo.toml keeps GridCraft's.
RULES.md is binding for every change, by people, workflows or AI agents. What
enforces it:
| Guard | When | What it stops |
|---|---|---|
| Upstream sync | every 6 hours | GridCraft changes reaching users untested: each is merged on a candidate, fully tested, built and installer-tested before release |
| Excel watch (workflow) | daily | a new Microsoft Excel release going unnoticed: each one becomes an excel-release issue listing its Excel items, and with an ANTHROPIC_API_KEY secret an agent proposes the implementation as a pull request |
Docs check (docs_check.py) | every push and PR | a user-visible change without a CHANGES.md line; the README or landing page naming a file a release doesn't ship; broken images and links; "coming soon" or placeholder text in the app |
Performance gate (perf_gate.py, budgets) | every push and release | start-up, memory, idle CPU, typing, opening and scrolling a 2-million-cell file, memory given back after closing |
| Installer tests | every release | an installer that doesn't install, start, work and uninstall cleanly (app and server) |
CHANGES.md is written once per change; the release notes, this README's "What's new" and the
landing page are generated from it.
Rust 1.95+ with the MSVC toolchain; WiX 5 for the installer.
cargo build --release -p gridcraft -p gridcraft-server -p gridcraft-server-manager -p gridcraft-cli
# target\release\DexteritySheets.exe the app
# target\release\DexSheetsServer.exe the office server
# target\release\DexSheetsServerManager.exe its control panel
# target\release\gridcraft-cli.exe headless CLI (eval, convert, run commands)
pwsh packaging/windows/package.ps1 -Arch x64 # app and server Setup.exe + MSI, portable zip
Tests:
cargo test --release -p gridcraft-collab # patches, convergence, real TCP server
py -3 packaging/dexterity/tests/lan_e2e.py target/release # 3 windows + server, 19 checks
py -3 packaging/dexterity/tests/update_e2e.py old.msi new.msi target/release/DexSheetsServer.exe work
py -3 packaging/dexterity/tests/installer_smoke.py dist 1.2.3 # both installers: install, start, uninstall
py -3 packaging/dexterity/tests/server_installer_smoke.py dist 1.2.3 # server installers (as administrator)
py -3 packaging/dexterity/tests/server_manager_shots.py target/release media # Server Manager screenshots
py -3 packaging/dexterity/tests/screenshots.py target/release # regenerates docs/images + demo frames
py -3 packaging/dexterity/make_demo.py # docs/readme/demo.webp from the frames
Dexterity Sheets is built from GridCraft by the ArtCraft team and contributors, dual-licensed under MIT or Apache-2.0; notices in NOTICE, assets in ATTRIBUTION.md. Thank you to everyone who built GridCraft.
Dexterity Sheets is not affiliated with or endorsed by the ArtCraft team and ships none of its trademarks. Microsoft Excel is a trademark of Microsoft Corporation; Excel was used only as a black-box reference, and no Microsoft code, artwork or files are included.
| Conflicts | Two people changing the same cell at the same moment: the later edit wins, both are told who changed it and which value was kept, and the replaced value stays in Edit History. Different cells never conflict. |
| @mentions | Type @ in a comment or reply and pick a colleague: they get a Windows notification with the spreadsheet, cell and comment, and clicking it opens that cell. Someone signed out is told at sign-in; if a person you mention can't open the spreadsheet, you are told so you can share it. |
| Automation rules | Share › Automation rules…: on a schedule or when a value changes, the office server finds overdue items, runs the Quality Check, writes a report, stamps a completion time or notifies people. Fixed steps only: no macros or scripts. |