Skip to content
Open330Public

About

Let AI agents use your apps. Reusable computer use for Claude and Codex. Make it once. Use it again.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

English · 한국어

Tacto — Agents use apps. Tacto repeats.

Let your agent use your apps. Save the steps. Run them again.

Tacto lets agents operate browsers and Mac apps on your behalf.
Turn clicks, typing, and checks into a reusable Flow.
Replay it with new inputs. Bring the agent back when judgment is needed.
See the apps your agent accessed, the actions it took, and their outcomes in Tacto.

macOS Claude + Codex Status

Release candidate · How it works · Benchmarks · Documentation

See it work in real apps

Tacto searches Wikipedia and follows a page link in a real browser

An animated preview from an actual recorded run. Click for the full MP4. GitHub's accessibility settings can disable animated-image autoplay.

Ten recorded scenarios: eight real apps or websites, plus two public test environments.

App or site Task and observed result Recording
TextEdit Write workshop notes; separately verify saved disk contents against the document 10 sec
Finder Sort five files by kind, then by name 8 sec
Google Translate Enter a synthetic English example; separately check Korean output 7 sec
GitHub Filter open bugs and sort by comment count 9 sec
UnitConverters.net Convert 3.5 m to 11.482939633 ft; compare with a separate calculation 9 sec
Markdown Live Preview Edit the opening section; check heading, list, and bold text 18 sec
Wikipedia Search Seoul and navigate to History 14 sec
Mac Calculator Replay the same Flow with different inputs; verify 15 and 12 14 sec

Actual TextEdit document editing and save verification Sorting files in an actual Finder window

Also available: product lookup and form filling in public test environments. No purchase or registration was submitted.

Browser demos use Python BrowserDriver + Flow in a separate Chromium instance, rather than your existing Chrome or Safari tabs. TextEdit stopped when save evidence was insufficient; a separate Save verification then passed. Google Translate's output check is separate from proof of input delivery. The Markdown demo edits only the opening section and leaves other sample content intact.

Recordings include illustrative pointers and capture delays. They show authored Flows executing, not natural-language authoring, and are not speed or token benchmarks. Not every demo completed without intervention. Conditions, results, and limits.

Same-window drag gestures are supported by the signed macOS helper: sliders, text selection and canvas paths, with receiving tests in AppKit and TextEdit. Cross-app file drops are outside this route.

tacto capture <bundle-id> --helper --window 'Exact title' --output window.png
tacto drag <bundle-id> --helper --window 'Exact title' --from 20 80 --to 220 80

Apps that react to the real cursor (hover effects, a character that avoids it) can be exercised with tacto hover: it moves the cursor into the observed window without pressing a button, optionally captures the window while the cursor is there, and puts the cursor back. Moving the mouse yourself stops it. Hover guide.

tacto hover <bundle-id> --helper --to 120 80 --hold 1 --capture during.png

Know what your agent did

Delegate the work. Inspect the activity. Tacto's in-app history shows accesses made through Tacto: the target app, operation, outcome and elapsed time. Search runs, filter failures or unconfirmed completion, and follow each operation in a timeline without opening a log directory.

Tacto preview with multiple actual access records and the selected TextEdit timeline

Records stay on this Mac. Settings control automatic logging and 7/30/90-day retention. Screen content, input values, prompts and internal agent reasoning are excluded. Activity history and settings.

Agents can use a reusable, site/app-scoped credential delegation to fill fields or complete login from macOS Keychain or an already authenticated Bitwarden Vault. Values go directly to the signed helper; the agent receives only the result. Available in rc.11, with in-app Vault management, reusable Flow authentication, declared multi-screen login and optional account checks. Credential setup and delegation levels.

Make it once. Use it again.

First time    Claude / Codex → observe the app → author and save a Flow
Next time     saved Flow + new inputs → Tacto executes and checks results
Repeat        same Flow + different inputs → Tacto executes and checks results

This is computer use: agents read app interfaces, click controls, and enter information for you. Tacto stores the procedure so the model does not have to reason through every routine step again.

Author once Replay with new inputs Intervene when needed
Create a Flow with Claude or Codex Resolve targets from fresh observations and check outcomes Use a model for judgment or supported repairs
Model-independent execution format Zero model calls during normal deterministic replay Supported repair resumes at the affected step

Authoring, judgment, and repair still cost model tokens. Automatic selector repair currently belongs to the development checkout's Codex provider; it is not included in the packaged release candidate.

What if the interface changes or completion is uncertain?

The development repair path passes only relevant candidates for supported static-selector failures. It resumes after verified checkpoints without blindly resending actions that may already have completed. It does not recover every UI change or crash. Repair scope.

Native execution uses the existing Tacto menu bar icon for task status and 현재 작업 중단; no extra helper icon appears. Press Esc to stop. In 설정, turn off 작업 중 배너 표시 to hide the upper-right task banner starting with the next task.

Reuse in a dedicated test app

Recorded execution of repeated workflows in the Tacto macOS test app

The same 11-step Flow ran five times with different inputs in our own macOS test app, producing 89, 34, 62, 79, and 108, with one completion per job. Pointers and click effects were added for explanation; they are not recordings of system cursor movement.

17-second walkthrough · Unannotated recording · Capture conditions

A separate development test completed ten jobs with zero replay-time model calls. Another repaired two changed buttons in one job using two model calls. These are dedicated test-app results, not a reliability guarantee for every business app. Complex scenarios · TextEdit comparison.

Get started

1.0.0-rc.11 release candidate for Apple Silicon Macs on macOS 27.0.1.

Release candidate. Both Tacto.app and the DMG passed Developer ID signing, Apple notarization, ticket validation, and Gatekeeper checks. Download the DMG, drag Tacto.app into Applications, and open it to follow setup instructions. You do not need your own signing certificate for this packaged app. Version 1.0.0-rc.11 adds native Vault management, delegated login inside a Flow, declared multi-screen login and optional account checks. It correctly verifies the final Finder window closing and brings system settings actions into the normal execution path. It retains document-scoped sessions, crowded-window observations, pointer and focus settling, and first-task recovery. This candidate passed fresh notarization, installed-app checks and a three-Mac deployment; stable-release qualification remains separate. Optional faster startup keeps the helper ready between commands. It is off by default; enable it in settings when needed. One persistent menu shows settings and task status, and task banners remain optional. Browse operation timelines and configure logging and retention in the app. Grant two permissions on first run: Tacto Helper (app control) and Tacto (screen recording).

This is a release candidate, not yet the approved stable release. Stable qualification still needs a person-run fresh install, three permission revocation/regrant cycles and a limited beta (guide).

After setup, Start first task detects Claude Code or Codex and opens a fresh CLI conversation with one fixed Tacto command. The command launches TextEdit if needed, creates a new document and verifies its welcome text without an internal model call. The agent CLI may still ask for its normal trust or login confirmation.

Tacto runs in the menu bar without a Dock icon. Close the settings window to leave it in the background; use the menu bar icon to reopen settings or quit.

Installation, permissions, Claude/Codex connection and upgrades were verified on three Macs; on a second Mac, fresh Claude Code and Codex conversations completed a first Finder task. Other macOS versions, a person-run fresh install and the beta remain unverified. Windows and Intel Mac builds are not provided. The bundled onboarding UI and detailed guides are currently primarily Korean; this README is available in both languages.

Under the previous development signature, Finder and Safari completed 40 tasks. The first 20 TextEdit saves required the user to bring the app forward; all 20 retries then passed. Those initial failures remain in the record. These results are not unattended 60/60 success or approval of the newly signed DMG. Release evidence and remaining checks · Installation details.

Build from source

Requires Python 3.11+, uv, Xcode Command Line Tools, and an Apple-issued code-signing certificate. The launcher and helper must be signed by the same team.

git clone https://github.com/Open330/tacto.git
cd tacto
uv sync
./build.sh
./skill/install.sh
~/.local/bin/tacto doctor

Follow doctor and the app’s “permission holder” label to grant macOS permissions to Tacto Helper. Then ask Claude or Codex:

Use the Tacto skill to calculate 12 × 34 in Calculator and verify the result.
Save it as a parameterized Flow so I can run it again with different inputs.

Replay a saved Flow:

~/.local/bin/tacto run flow.json --helper

Agent skill · Flow authoring guide

Installation notes and development-only commands

If your agent cannot find the skill, restart its session and check ./skill/install.sh --check. The Python distribution is tacto-runtime; the canonical Python import is tacto. The Python wheel alone does not supply the signed native launcher/helper. The permission holder is Tacto Helper (helper/Tacto Helper.app/Contents/MacOS/TactoHelper) and the launcher is launcher/tacto; bundle identifiers and signing requirements use ai.callabo.tacto.*.

Python namespace conflict. The top-level import tacto is also used by an unrelated PyPI package (a tactile-sensor simulator). Install this project's distribution, tacto-runtime, in its own environment, and never pip install tacto for Tacto. Installing both into one environment can overwrite each other's files.

These commands belong to the development checkout, not the main-branch release:

~/.local/bin/tacto batch template.json --helper < jobs.jsonl
~/.local/bin/tacto batch template.json --helper --auto-repair codex < jobs.jsonl

Less repeated reasoning

A development-version comparison observed 53.5% fewer total input tokens with Tacto than Sky. Three independent fresh-conversation pairs matched the requested model, reasoning effort, and initial state of the test app.

Metric Tacto Sky
Successful tasks 3/3 3/3
Total input tokens 201,447 433,312
Mean time 42.10 sec 46.17 sec

This is a small sample. Tacto was slower in one case; it is not universally faster. Full methodology and results.

Cache, output, and repeated-Flow results

2026-10-14 · Codex CLI 0.161.0 · requested model gpt-6.1-sol · medium. Includes initial authoring, execution, and the final response; excludes test setup. Actual serving model, server cache behavior, and billing were not verified.

  • Input excluding cache reads: Tacto 22,119 / Sky 50,592 (56.3% reduction).
  • Output: Tacto 1,605 / Sky 1,604.
  • Total time: 8.8% reduction. This was not a ten-replay comparison.
  • Separate 11-step test-app scenarios: 13/13 normal completions, 5/5 expected stops, two button repairs in one job.
  • Ten normal repeats in that separate test used zero model calls.

Complex scenario results

Explore the onboarding site

The landing page (source) introduces replay, repair, and stopping. Its interactive walkthrough does not execute real apps or models.

python3 sites/tacto/serve.py

Open http://127.0.0.1:8787.

Optional macOS fast startup keeps the signed helper warm between commands. Enable it in Tacto Settings (off by default, idle timeout 1–10 minutes), or use TACTO_HELPER_MODE=warm; per_command overrides it off. Concurrent commands wait up to 10 seconds before helper_busy. Details and measured scope.

Documentation

Detailed guides are primarily Korean, with code examples and some English references.

Installation · Windows (experimental) · Flows · API · Capabilities · Agent skill

CLI reference

Available on the main branch:

Purpose Commands
Diagnose setup tacto doctor
Observe apps and controls tacto apps, tacto observe, tacto menu-state
Execute requests and Flows tacto do, tacto run, tacto replay
Compile and parameterize tacto compile, tacto parameterize
Manage Flows and candidates tacto list, tacto show, tacto candidates, tacto promote
Evaluate tacto eval

Development-only commands, absent from main:

Purpose Commands
Batch, session, repair tacto batch, tacto session, tacto repair
Document attachments tacto document-attachments
Browser file registration tacto web-upload
Experimental VRoid diagnostics tacto vroid-focus, tacto vroid-drag — separate build with TACTO_ENABLE_EXPERIMENTAL_FOREGROUND=1; excluded from the default build

Check tacto --help for your checkout. Use the signed launcher for native work and --helper where required.

All guides and validation records

Tacto · Local execution. Reusable computer use.
Release candidate · MIT License

Runtime updates and validation

Preview 3 runtime update

About

Let AI agents use your apps. Reusable computer use for Claude and Codex. Make it once. Use it again.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages