Skip to main content

Self-evolving coding agent. Small, sharp, gets things done. Yours.

Project description

Tack

Self-evolving idiomatic personal assistant. ~15k lines of Python. Local-first. Provider-agnostic.

Install

pip install tack-agent

Imports as tack. CLI command is tack.

From source:

git clone https://github.com/egmaminta/tack && cd tack
uv sync

MCP servers and the Discord connector ship with the base install. The only optional extra is the heavy document parser:

pip install 'tack-agent[docling]'  # PDF/DOCX/PPTX in ReadDoc

Quickstart

Point Tack at any provider that speaks OpenAI's chat-completions API.

ollama pull qwen2.5-coder:7b
tack

That's it. First run prompts you with three questions to seed the identity files (~/.tack/soul.md, <project>/.tack/user.md, <project>/.tack/agents.md). Skip with --no-bootstrap.

Configure

config.yaml in the project root, or ~/.tack/config.yaml for global. Minimal:

provider: ollama
model: qwen2.5-coder:7b

That's the entire required config. Defaults handle the rest.

For paid providers, add api_key: (or set LLM_API_KEY). For non-default endpoints, add api_base:. Everything else (identity, memory, cron, connectors, sandbox, dreaming) is opt-in and documented in the docs below.

Env vars override YAML: LLM_PROVIDER, LLM_MODEL, LLM_API_KEY, LLM_API_BASE, DISCORD_BOT_TOKEN. Prefer env or config.yaml over the --api-key CLI flag; argv values are visible to any process that can read /proc/<pid>/cmdline (Linux) or open Task Manager (Windows).

CLI

tack                          REPL
tack --session bug-auth       resume a named session
tack --provider ollama        override provider
tack --model qwen2.5:7b       override model
tack --thinking high          reasoning effort: none|low|medium|high|xhigh|auto
tack --verbose                show reasoning + telemetry
tack --trace                  write state transitions to ~/.tack/trace/
tack --no-sandbox             run Bash on host instead of Docker
tack --no-mcp                 disable MCP servers
tack --no-bootstrap           skip first-run identity dialogue
tack --daemon                 headless: cron + heartbeat, no stdin

Slash commands

/help       /config     /thinking [level]   /verbose
/compact    /reset      /session {list|load|new|rename}
/skills     /soul       /user               /agents
/mcp        /listen     /copy               /exit

Tools

40 built-in:

Group Tools
Core Bash, Read, Write, Edit, MultiEdit, LS, Grep, Glob, ReadImage, ReadDoc
Sub-agent Agent, ReadSidechain, Compact
Todo + Tasks TodoRead, TodoWrite, TaskCreate, TaskUpdate, TaskList, TaskGet, TaskNext
Web WebSearch, WebFetch
Identity SoulEdit, UserEdit, AgentsEdit
Skills SkillCreate, SkillDelete, SkillList
Memory MemorySearch
Cron CronCreate, CronList, CronDelete, CronEnable, CronDisable
Heartbeat HeartbeatEdit
Discord DiscordChannelCreate, DiscordChannelList
Dream DreamRun, DreamRead
Email EmailSend

MCP tools merge in as mcp__<server>__<tool>.

Mutating tools (Bash, Write, Edit, identity edits, skill mutations, every cron and heartbeat change, DiscordChannelCreate, DreamRun, EmailSend) require approval. approval_policy: auto cannot auto-approve identity, skill, cron, heartbeat, dream, or email sends.

Profiles: lean (6), minimal (12), standard (21, default), full (40). See TOOLS.md.

Layout

tack/
  __init__.py           boot + dispatch (REPL or daemon)
  config.py             layered config: defaults < yaml < env < CLI
  agent/                loop, prompt, session, identity, memory, cron, daemon
  tools/                built-in tools + dispatcher
  connectors/           connector protocol + Discord
  mcp/                  MCP client + manager
  ui/                   abstract UIBridge, RichBridge (REPL), SilentBridge (daemon)

~/.tack/
  sessions/<hash>/      per-workdir session transcripts
  memory.db             SQLite FTS5 cross-session index
  soul.md               global persona
  cron/<id>.json        scheduled jobs
  logs/daemon.log       daemon output

<project>/.tack/
  user.md               per-project profile
  agents.md             per-project rules

Docs

HOW-TO-SOUL.md Identity files, agent self-edits, git integration
HOW-TO-SKILLS.md Built-in skills, enable/disable, write your own
HOW-TO-MEMORY.md SQLite FTS5 cross-session recall
HOW-TO-CRON.md Cron expressions, daemon mode, failure handling
HOW-TO-DISCORD.md Bot setup, allowlist, security model
HOW-TO-DREAM.md Nightly memory consolidation
HOW-TO-EMAIL.md SMTP+TLS, allowlist, approval gate
HOW-TO-MCP.md Connect any MCP server
TOOLS.md Tool catalog, profile selection, sample scenarios
TROUBLESHOOTING.md Top failure modes, 5-minute fixes
CHANGELOG.md Per-release notes, newest first

Status

  • Currently pre-release: v1.x.x. GitHub releases.
  • Python 3.12+, no cloud services required for core function.
  • CI: Linux, macOS, Windows. uv run pytest tests/ -q runs the suite locally.
  • MIT license. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tack_agent-1.0.4.tar.gz (197.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tack_agent-1.0.4-py3-none-any.whl (223.4 kB view details)

Uploaded Python 3

File details

Details for the file tack_agent-1.0.4.tar.gz.

File metadata

  • Download URL: tack_agent-1.0.4.tar.gz
  • Upload date:
  • Size: 197.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for tack_agent-1.0.4.tar.gz
Algorithm Hash digest
SHA256 fe1e450a38ad86468839d01c416e38990d5cea16aa74bbd5cd885ae811e9196c
MD5 532aa85c2448ac4245027426106605ce
BLAKE2b-256 bf755d4df88dbd3e803a0805ca325be6374bc1fd8aa59e0da5bc8c0efb7a51e0

See more details on using hashes here.

Provenance

The following attestation bundles were made for tack_agent-1.0.4.tar.gz:

Publisher: publish.yml on egmaminta/tack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tack_agent-1.0.4-py3-none-any.whl.

File metadata

  • Download URL: tack_agent-1.0.4-py3-none-any.whl
  • Upload date:
  • Size: 223.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for tack_agent-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 c173b1a2f7c0e4b37d993bc494a3851529ab7f3c88fc24f04fac90f0c70c01c8
MD5 2ab051f0e37283176db34c36cb47d1fc
BLAKE2b-256 1f62456654c1742ed99b05af5fac3507ad6d76c65e225b2bd786f95f7bd0552e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tack_agent-1.0.4-py3-none-any.whl:

Publisher: publish.yml on egmaminta/tack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page