Skip to main content

Tala

A local, OS-agnostic AI assistant for your PC. Chat in plain language; a local model (via Ollama) picks and runs tools defined in simple YAML files called packs. Nothing leaves your machine, and nothing risky runs without your approval.

You: how much free disk space do I have?
→ disk_free (read_only)  powershell -NoProfile ... Get-PSDrive ...
  ✓ disk_free · 1093 ms
Assistant: Drive C has 9.2 GB free and drive D has 66.9 GB free.

You: stop the docker container web
╭──────────── Approval needed ────────────╮
│ docker_stop  mutating                   │
│ command: /usr/bin/docker stop web       │
╰─────────────────────────────────────────╯
Run it? [y/N]

Why it is built this way

Goal How
Add capabilities with YAML only Drop a file in a pack directory. No Python, no restart of design. See pack authoring.
Works on Windows, Linux and macOS One logical tool (ping_host) with per-OS command variants. Tools whose executable is missing are never offered to the model.
Safe by default Mandatory risk level per tool, approval policy, exact command shown, no shell, argument constraints, untrusted-output fencing, audit log. See safety.
Runs on small local models Hybrid keyword + vector tool retrieval offers the model 4-8 tools instead of 100; arguments are validated and repaired; chat never loads the tool machinery.
Engineered to grow LangChain + LangGraph agent, typed event API for any front end, layered architecture enforced by tests. See architecture.

Quick start

You need Ollama running locally.

One-line install (installs into an isolated environment, then starts the setup wizard):

irm https://raw.githubusercontent.com/AchinthaShiran/Tala/main/install.ps1 | iex   # Windows
curl -fsSL https://raw.githubusercontent.com/AchinthaShiran/Tala/main/install.sh | sh   # macOS / Linux

Or from PyPI (needs Python 3.11 or newer, not a specific version):

pipx install tala-ai      # or: uv tool install tala-ai
tala setup

From a clone:

python -m venv .venv && . .venv/bin/activate        # Windows: .venv\Scripts\activate
pip install -e ".[dev]"
tala setup           # pick Default or Advanced; detects your hardware and warns about heavy models
tala chat            # start talking

tala setup offers three setups: Default (one fixed, conservative configuration, the same everywhere), Recommended (tailored to your detected hardware) and Advanced (choose models, context size, memory use, approval rules and speed options from curated sets, with warnings when a choice will strain your machine). Whichever you pick, the full settings are shown and you confirm before anything is applied. It also offers itself the first time you run tala chat. Details: docs/setup.md. tala doctor re-checks everything at any time.

Other commands:

Command Purpose
tala setup [--default|--recommended|--advanced] [--check] First-run wizard: hardware-aware setup and model downloads
tala ask "..." One question, then exit
tala packs list [--all] Tools available here (and why others are not)
tala packs show NAME Full definition of a tool
tala packs validate [PATH...] [--strict] Lint packs (use in CI for your own packs)
tala packs trust [DIR] [--revoke] Allow packs from <DIR>/.tala/packs (untrusted by default)
tala facts add/list/remove Things the assistant should always remember ("my phone is 192.168.1.20")
tala audit Recent tool executions
tala eval retrieval [--embeddings] / tala eval agent Measure tool-selection quality on the golden set

Inside tala chat: /tools, /history, /reset, /exit. Sessions are saved and resume automatically (tala chat --session work).

Add your own tool in two minutes

Create ~/.config/tala/packs/mine.yaml (Windows: %LOCALAPPDATA%\tala\packs\; run tala doctor to see the exact path), or ./.tala/packs/ for a per-project pack (project packs load only after tala packs trust, because a pack defines what may run on your machine):

pack: mine
tools:
  - name: git_branch_list
    description: List the local git branches of the current repository.
    risk: read_only
    examples: [which branches do I have, list my git branches]
    run:
      any: {exe: git, args: [branch, --list]}
tala packs validate      # catches mistakes before the model ever sees the tool
tala chat                # "which branches do I have?"

Configuration

Optional config.yaml (location shown by tala doctor). Everything has a default; override only what you need. Environment variables use TALA__SECTION__KEY=value.

models:
  main:   {name: "gemma4:e4b", num_ctx: 8192}     # shared by chat, executor, summarizer
  router: {name: "granite4.1:3b", num_ctx: 2048}
agents:
  executor: {model: main, temperature: 0.1}
runtime:
  max_steps: 3                                    # tool rounds per request
  direct_output_chars: 600                        # fastest: show small results without a summary
safety:
  tool_overrides: {git_status: auto, docker_ps: ask}
packs:
  dirs: [~/team-packs]
  disabled_tools: [kill_process]

Full reference: docs/configuration.md. For response speed (time to first output, fast path, warm-up) see docs/performance.md.

Project layout

src/assistant/
  domain/      pure models: ToolSpec, risk levels, events, errors
  packs/       YAML loading, lint, per-OS availability registry
  tools/       argument validation, argv rendering, bounded subprocess runner, LangChain tools
  retrieval/   hybrid BM25 + vector tool index with confidence tiers
  safety/      approval policy, audit log, output fencing
  llm/         model factory (Ollama; pluggable), health checks
  memory/      session checkpoints, history budgeting, long-term facts
  agent/       LangGraph: route -> executor -> authorize -> run -> summarize
  service.py   Assistant.send()/resume() -> typed events (the only front-end contract)
  bootstrap.py composition root
  cli/         thin Typer/rich front end
  builtin_packs/  95 tools (system, processes, network, files, git, docker, adb, npm, winget ...)
tests/         unit, pack quality gate, integration (scripted model), architecture

Renaming or rebranding

The product name, command, environment-variable prefix and folder names live in one file: src/assistant/domain/branding.py. Change the constants there, rename the console script and project name in pyproject.toml, and search-replace the Markdown docs. A test (tests/test_branding.py) fails if the code base hard-codes any of these elsewhere.

Development

pytest                      # 251 tests, fully offline (93% coverage)
ruff check . && ruff format --check .
mypy                        # strict
lint-imports                # layer contracts (also part of pytest)
tala eval retrieval -v       # tool-selection regression check

CI runs all of the above on Windows, Linux and macOS (.github/workflows/ci.yml).

Status and limits (v3.0)

  • Front end: CLI. The service API is front-end agnostic; an HTTP/WebSocket or tray adapter is the next step.
  • Long-running/interactive programs (GUI apps, scrcpy mirroring) are not supported as tools yet.
  • Commands are not OS-sandboxed; protection comes from approval policy, constraints and bounded execution.
  • Small models (2-4B) make mistakes. Measure with tala eval agent before trusting a model, and keep mutating tools on ask.

See CHANGELOG and the decision records in .10x/adrs. Maintainers: releasing is described in docs/publishing.md.

License

Copyright 2026 Achintha Bandara. Licensed under the Apache License, Version 2.0: you may use, modify and distribute it, including commercially, as long as you keep the copyright and NOTICE files and state significant changes. It includes an explicit patent grant and comes with no warranty.

Metadata

Release files for tala-ai 3.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tala-ai 3.0.2
File Size Uploaded Provenance
tala_ai-3.0.2.tar.gz 153.8 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for tala-ai 3.0.2
File Interpreter ABI Platform
tala_ai-3.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 284.5 kB

Release files / tala_ai-3.0.2.tar.gz

Download URL tala_ai-3.0.2.tar.gz
Size 153.8 kB
Tags Source
SHA-256 checksum
How to use checksums
87bd933b03cd52d5a5892fe72044b6cd6b35fa13627974e3936f100ab7ddeb55
BLAKE2b-256 checksum
How to use checksums
73bc4614c2de411c9cbcd84141ebcaf8dc25786d9a0007812bf9f2ac48c4ff6c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / tala_ai-3.0.2-py3-none-any.whl

Download URL tala_ai-3.0.2-py3-none-any.whl
Size 130.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
49204b73f0a3596e1767cf4041cb7225634e4b9a651ec2ff16589d048aff9e62
BLAKE2b-256 checksum
How to use checksums
75116c8cceb87a826a7bd39c158fe23ebab4f5cd5923bd2057a359414f031708
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Security for tala-ai 3.0.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for tala_ai-3.0.2.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page