One workbench
Explorer, search, source control, terminal, editor, and agent chat designed as one product.
Product
Eyeban is a desktop application for individual developers and teams — a place to read, edit, and direct a cloud agent that can see the project.
41 def charge(order, wallet): 42 tax = order.subtotal * 0.09 43 total = order.subtotal + tax 44 if wallet.balance < total: 45 raise InsufficientFunds(total) 46 wallet.debit(total) 47 return Receipt(order.id, total)
Split regional tax from the hardcoded rate, and check coverage before debit.
Read 6 files · 2 searches · 1 test
charge still hard-codes 0.09. tax_for(region) exists. I will wire can_cover to the wallet.
12-line patch across two files. Review the diff.
Before touching checkout, write the approach for multi-region tax.
Plan · product shell and edits are limited
Freeze the tax_for contract, then change charge, then update test_charge.
Plan is ready. I switch to Agent after you confirm.
Where does charge take tax from, and which test pins it?
Ask · read only
The rate is checkout.py:42. test_charge asserts the same 0.09.
Nothing was written.
InsufficientFunds also fires for tax-exempt orders. Evidence first.
Debug · reproduce before the fix
It fails when the region is exempt and wallet.can_cover still sees the flat rate.
Failure trail is ready. The fix waits for your OK.
- tax = order.subtotal * 0.09 + tax = order.tax_for(region) - if wallet.balance < total: + if not wallet.can_cover(total, region): wallet.debit(total)
Explorer, search, source control, terminal, editor, and agent chat designed as one product.
The useful part is seeing the codebase — with grep, glob, semantic search, and structured reads — not emitting more tokens.
Version 3.1.2 is downloadable for Windows and Linux. Accounts, billing, and the cloud agent are live. macOS is in progress.
Open a repository and work the way you already do. The left rail carries explorer and search; the editor holds buffers; source control and terminal sit beside agent chat. Computer Use capabilities are strongest on Windows.
41 def charge(order, wallet): 42 tax = order.subtotal * 0.09 43 total = order.subtotal + tax 44 if wallet.balance < total: 45 raise InsufficientFunds(total) 46 wallet.debit(total) 47 return Receipt(order.id, total)
Split regional tax from the hardcoded rate, and check coverage before debit.
Read 6 files · 2 searches · 1 test
charge still hard-codes 0.09. tax_for(region) exists. I will wire can_cover to the wallet.
12-line patch across two files. Review the diff.
Before touching checkout, write the approach for multi-region tax.
Plan · product shell and edits are limited
Freeze the tax_for contract, then change charge, then update test_charge.
Plan is ready. I switch to Agent after you confirm.
Where does charge take tax from, and which test pins it?
Ask · read only
The rate is checkout.py:42. test_charge asserts the same 0.09.
Nothing was written.
InsufficientFunds also fires for tax-exempt orders. Evidence first.
Debug · reproduce before the fix
It fails when the region is exempt and wallet.can_cover still sees the flat rate.
Failure trail is ready. The fix waits for your OK.
- tax = order.subtotal * 0.09 + tax = order.tax_for(region) - if wallet.balance < total: + if not wallet.can_cover(total, region): wallet.debit(total)
The agent runs against api.eyeban.ir with modes Agent, Plan, Ask, and Debug. It can read and edit files, search with grep/glob and semantic tools, apply patches, use git and shell under permission, and connect MCP servers over stdio or SSE. Rules, skills, local Task subagents, and hooks shape how work proceeds.
41 def charge(order, wallet): 42 tax = order.subtotal * 0.09 43 total = order.subtotal + tax 44 if wallet.balance < total: 45 raise InsufficientFunds(total) 46 wallet.debit(total) 47 return Receipt(order.id, total)
Split regional tax from the hardcoded rate, and check coverage before debit.
Read 6 files · 2 searches · 1 test
charge still hard-codes 0.09. tax_for(region) exists. I will wire can_cover to the wallet.
12-line patch across two files. Review the diff.
Before touching checkout, write the approach for multi-region tax.
Plan · product shell and edits are limited
Freeze the tax_for contract, then change charge, then update test_charge.
Plan is ready. I switch to Agent after you confirm.
Where does charge take tax from, and which test pins it?
Ask · read only
The rate is checkout.py:42. test_charge asserts the same 0.09.
Nothing was written.
InsufficientFunds also fires for tax-exempt orders. Evidence first.
Debug · reproduce before the fix
It fails when the region is exempt and wallet.can_cover still sees the flat rate.
Failure trail is ready. The fix waits for your OK.
- tax = order.subtotal * 0.09 + tax = order.tax_for(region) - if wallet.balance < total: + if not wallet.can_cover(total, region): wallet.debit(total)
Authentication and billing (including Zarinpal) live in the Eyeban account ecosystem. Default model API keys remain on the server; optional BYOK proxies your provider key through api.eyeban.ir. English and فارسی are first-class; the UI supports RTL, and the agent answers in Persian when you write in Persian.
41 def charge(order, wallet): 42 tax = order.subtotal * 0.09 43 total = order.subtotal + tax 44 if wallet.balance < total: 45 raise InsufficientFunds(total) 46 wallet.debit(total) 47 return Receipt(order.id, total)
Split regional tax from the hardcoded rate, and check coverage before debit.
Read 6 files · 2 searches · 1 test
charge still hard-codes 0.09. tax_for(region) exists. I will wire can_cover to the wallet.
12-line patch across two files. Review the diff.
Before touching checkout, write the approach for multi-region tax.
Plan · product shell and edits are limited
Freeze the tax_for contract, then change charge, then update test_charge.
Plan is ready. I switch to Agent after you confirm.
Where does charge take tax from, and which test pins it?
Ask · read only
The rate is checkout.py:42. test_charge asserts the same 0.09.
Nothing was written.
InsufficientFunds also fires for tax-exempt orders. Evidence first.
Debug · reproduce before the fix
It fails when the region is exempt and wallet.can_cover still sees the flat rate.
Failure trail is ready. The fix waits for your OK.
- tax = order.subtotal * 0.09 + tax = order.tax_for(region) - if wallet.balance < total: + if not wallet.can_cover(total, region): wallet.debit(total)
Files · shell · git · search
The agent does not only talk. It reads, searches, patches, and — when you allow it — runs shell and git.
stdio · SSE
Plug in Model Context Protocol servers — browsers, issue trackers, internal APIs — without a marketplace.
SKILL.md · rules · AGENTS.md
Teach the agent your procedures once. It follows them on the next run.
Local · parallel
Split a job. Explore, shell, debug, or computer-use in a focused worker — on this machine.
Windows
When the job leaves files and the terminal, the agent can see a graphical interface.
Diff · undo · accept
Every write is a snapshot you can restore. You accept or reject the patch — the agent does not silently own the tree.
PTY · agent shell
A real terminal in the workbench, and a stateful shell the agent can drive — with sandbox and permission prompts.
SSH
Open a folder on a remote host; the helper installs on the host itself.