Skip to main content

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

Project description

Tack

Self-evolving coding agent. ~14k lines of Python. Local-first. Provider-agnostic.

Install

pip install tack-agent

The distribution is tack-agent because tack was already taken on PyPI. The importable package and the CLI command stay 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.

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: full (40), core (28, no Web), minimal (11).

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
TROUBLESHOOTING.md Top failure modes, 5-minute fixes
CHANGELOG.md Per-release notes, newest first

Status

  • Version 1.0.0. 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.3.tar.gz (192.9 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.3-py3-none-any.whl (219.2 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for tack_agent-1.0.3.tar.gz
Algorithm Hash digest
SHA256 a94991a175cb1c131bc84e9303ec49c0dd4152368e21f37866610b1bf7cd939b
MD5 ec5d18ffbd816c9332f1823c9a16aa47
BLAKE2b-256 296517aeffac9c689fc7c7e2d914ee3571cbc0f8bbdc7a5c860edc79f3376c27

See more details on using hashes here.

Provenance

The following attestation bundles were made for tack_agent-1.0.3.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.3-py3-none-any.whl.

File metadata

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

File hashes

Hashes for tack_agent-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d37eec8da10562254a303c5db96e4b2b977ba9c6b5a7be0f6cf6643e2314ef15
MD5 60e663bed1a9ec0c103f7f28736c0be2
BLAKE2b-256 191e8f8f87690cbc11243c52dbe839706df112a5abd3a5df417dbccfea2684af

See more details on using hashes here.

Provenance

The following attestation bundles were made for tack_agent-1.0.3-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