"""Tiny Computer Agent - an agentic harness that drives a real computer with a tiny, fully local model. The harness is deliberately boring: it owns the loop, the closed action vocabulary, perception and the safety gates, so the model only ever answers one question - "which item from this short menu, and which verb?" Nothing here needs a network call at run time, and the core imports nothing outside the standard library. from tiny_computer_agent import AgentLoop, GrabScreen, IndexedScreen, OcrDetector from tiny_computer_agent.models import TextPlannerBrain screen = IndexedScreen(GrabScreen(), OcrDetector()) # pixels -> labels brain = TextPlannerBrain() # 0.5B, CPU-friendly loop = AgentLoop(screen=screen, brain=brain) # dry run by default episode = loop.run("save the document") print(episode.render()) An episode can be saved as a portable *trace*, replayed offline, and scored, so "the model looked plausible on that screenshot" becomes a number: from tiny_computer_agent import Trace, benchmark, run_scenario trace = run_scenario(Scenario("click 'Save'", frames=[...], expected="Save"), brain) trace.save("traces/save.json") # diffable, no pixels print(benchmark(scenarios, {"planner": lambda s: PlannerBrain()}).render()) """ from tiny_computer_agent.accessibility import ( INTERACTIVE_ROLES, TEXT_ROLES, AccessibleNode, AtspiDetector, AtspiReader, TreeReader, UiaDetector, UiaReader, accessibility_available, ) from tiny_computer_agent.audit import ( AuditEntry, AuditLog, observation_digest, read_audit, verify_audit, ) from tiny_computer_agent.act import ( ActionResult, DryRunExecutor, Executor, InputUnavailable, PyAutoGuiExecutor, resolve_point, ) from tiny_computer_agent.actions import ( ACTION_KINDS, ACTION_MENU, Action, ActionError, parse_action, ) from tiny_computer_agent.brain import ( Brain, BrainError, DecisionMenu, GoalUnreachable, MenuItem, MockBrain, ModelBrain, PlannerBrain, extract_json_object, extract_json_objects, parse_decision, ) from tiny_computer_agent.loop import AgentLoop, Episode, Step from tiny_computer_agent.models import ( DEFAULT_TEXT_MODEL, DEFAULT_VISION_MODEL, MODEL_BRAINS, TextPlannerBrain, VLMBrain, make_model_brain, model_cached, model_dependencies, pick_dtype, resolve_device, ) from tiny_computer_agent.demo import fake_desktop, write_fake_desktop from tiny_computer_agent.observe import ( Element, FakeScreen, GrabScreen, ImageScreen, Observation, ScreenSource, ScreenUnavailable, normalise_label, ) from tiny_computer_agent.desktop import ( BRAIN_NAMES, DEFAULT_KILL_SWITCH, Check, build_agent, display_available, doctor, run_checks, ) from tiny_computer_agent.perception import ( AutoDetector, Detector, DetectorUnavailable, GridDetector, IndexedScreen, OcrDetector, detector_available, make_detector, ) from tiny_computer_agent.diff import ChangeVerifier, Delta, diff, element_key from tiny_computer_agent.gates import ( READ_ONLY_KINDS, AllOf, AllowAll, AllowOnlyLabels, AnyOf, Approval, DenyAll, Gate, InteractiveGate, gate_from_spec, mutating, ) from tiny_computer_agent.runner import RunReport, Task, TaskOutcome, TaskRunner from tiny_computer_agent.safety import Policy, PolicyViolation from tiny_computer_agent.skills import ( DEFAULT_SKILLS_PATH, Skill, SkillBrain, SkillLibrary, SkillStep, record_skill, slug, ) from tiny_computer_agent.watchdog import Watchdog, WatchdogTimeout from tiny_computer_agent.trace import ( Scenario, Scoreboard, Trace, TraceStep, Verdict, benchmark, benchmark_traces, load_traces, run_scenario, score, score_replay, score_trace, ) __version__ = "2.0.0" __all__ = [ "ACTION_KINDS", "ACTION_MENU", "AccessibleNode", "Action", "ActionError", "ActionResult", "AgentLoop", "AllOf", "AllowAll", "AllowOnlyLabels", "AnyOf", "Approval", "AtspiDetector", "AtspiReader", "AuditEntry", "AuditLog", "AutoDetector", "BRAIN_NAMES", "Brain", "BrainError", "ChangeVerifier", "Check", "DEFAULT_KILL_SWITCH", "DEFAULT_SKILLS_PATH", "DEFAULT_TEXT_MODEL", "DEFAULT_VISION_MODEL", "DecisionMenu", "Delta", "DenyAll", "Detector", "DetectorUnavailable", "DryRunExecutor", "Element", "Episode", "Executor", "FakeScreen", "Gate", "GoalUnreachable", "GrabScreen", "GridDetector", "INTERACTIVE_ROLES", "ImageScreen", "IndexedScreen", "InputUnavailable", "InteractiveGate", "MODEL_BRAINS", "MenuItem", "MockBrain", "ModelBrain", "Observation", "OcrDetector", "PlannerBrain", "Policy", "PolicyViolation", "PyAutoGuiExecutor", "READ_ONLY_KINDS", "RunReport", "Scenario", "Scoreboard", "ScreenSource", "ScreenUnavailable", "Skill", "SkillBrain", "SkillLibrary", "SkillStep", "Step", "TEXT_ROLES", "Task", "TaskOutcome", "TaskRunner", "TextPlannerBrain", "Trace", "TraceStep", "TreeReader", "UiaDetector", "UiaReader", "VLMBrain", "Verdict", "Watchdog", "WatchdogTimeout", "__version__", "accessibility_available", "benchmark", "benchmark_traces", "build_agent", "detector_available", "diff", "display_available", "doctor", "element_key", "extract_json_object", "extract_json_objects", "fake_desktop", "gate_from_spec", "load_traces", "make_detector", "make_model_brain", "model_cached", "model_dependencies", "mutating", "normalise_label", "observation_digest", "parse_action", "parse_decision", "pick_dtype", "read_audit", "record_skill", "resolve_device", "resolve_point", "run_checks", "run_scenario", "score", "score_replay", "score_trace", "slug", "verify_audit", "write_fake_desktop", ]