Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
154 commits
Select commit Hold shift + click to select a range
dba0103
introduced the core pkg for Anton
MinuraPunchihewa Apr 7, 2026
eca2051
added pkgs for core components
MinuraPunchihewa Apr 7, 2026
8bca730
separated the core chat session
MinuraPunchihewa Apr 7, 2026
7d29c06
updated existing chat implementation based on core
MinuraPunchihewa Apr 7, 2026
53de84f
added the core pkg for tools
MinuraPunchihewa Apr 7, 2026
18ff4c3
moved core tools
MinuraPunchihewa Apr 7, 2026
1ab00f9
reintroduced ToolDef class and impl core tools
MinuraPunchihewa Apr 8, 2026
75df939
removed invalid dispatch
MinuraPunchihewa Apr 8, 2026
4247023
introduced ToolRegistry
MinuraPunchihewa Apr 8, 2026
3eec212
removed core tool registration
MinuraPunchihewa Apr 8, 2026
cf519d0
fixed tool registration and dispatch logic
MinuraPunchihewa Apr 8, 2026
687f371
handled extra tool registration
MinuraPunchihewa Apr 8, 2026
01e3a9b
introduced core utils and fixed broken imports
MinuraPunchihewa Apr 8, 2026
bdf79cd
fixed another broken import
MinuraPunchihewa Apr 8, 2026
95ee00f
fixed more imports
MinuraPunchihewa Apr 8, 2026
f835fdf
fixed tool dump
MinuraPunchihewa Apr 8, 2026
6911353
fixed duplicate tool registration
MinuraPunchihewa Apr 8, 2026
45da437
Make the choices for cresting a new connection
tino097 Apr 8, 2026
8b766c8
Merge branch 'main' into feature/core
MinuraPunchihewa Apr 8, 2026
bcaca10
fixed merge drift
MinuraPunchihewa Apr 8, 2026
154989d
bumped version for release
MinuraPunchihewa Apr 8, 2026
ca73b7d
fixed broken tool dispatch
MinuraPunchihewa Apr 8, 2026
62f4aec
fixed missing imports
MinuraPunchihewa Apr 8, 2026
e04c2be
fixed unit tests
MinuraPunchihewa Apr 8, 2026
fb87488
Merge pull request #80 from mindsdb/feature/core
ZoranPandovski Apr 8, 2026
fd5b052
Mark stub-only the failing test
tino097 Apr 8, 2026
2b4d231
calling publish tool
torrmal Apr 8, 2026
1b955c3
Merge branch 'main' into releases/v2.0.0
MinuraPunchihewa Apr 8, 2026
9ffbc4b
copied llm to core
MinuraPunchihewa Apr 8, 2026
b14d8f0
introduced the prompt field for ToolDef
MinuraPunchihewa Apr 8, 2026
ddec2ad
moved publish_or_preview tool prompt to ToolDef
MinuraPunchihewa Apr 8, 2026
d404071
updated imports in session
MinuraPunchihewa Apr 8, 2026
a995766
updated imports to point to core.llm
MinuraPunchihewa Apr 8, 2026
0888679
removed old llm components
MinuraPunchihewa Apr 8, 2026
976d7e1
Merge remote-tracking branch 'origin/strc-925-recennt-connection' int…
torrmal Apr 9, 2026
d181240
separated core prompts from terminal app prompts
MinuraPunchihewa Apr 9, 2026
ff66069
introduced output_dir config
MinuraPunchihewa Apr 9, 2026
264da92
removed prompt from dump in registry
MinuraPunchihewa Apr 9, 2026
b16e17a
introduced prompt builder pipeline
MinuraPunchihewa Apr 9, 2026
08bc98f
incorporated prompt builder to session
MinuraPunchihewa Apr 9, 2026
34f5dd1
fixed prompt builder composition
MinuraPunchihewa Apr 9, 2026
bf95394
Merge pull request #92 from mindsdb/feature/core_llm_1
torrmal Apr 9, 2026
679d53b
Fix registry dump
ZoranPandovski Apr 9, 2026
ab4ac16
Move core constants to settings
ZoranPandovski Apr 9, 2026
6e0f8d7
Add core settings
ZoranPandovski Apr 9, 2026
50d16ec
Initialize constants on creation
ZoranPandovski Apr 9, 2026
e8c5f18
Move nudge from const to prompt
ZoranPandovski Apr 9, 2026
f911d03
Merge pull request #90 from mindsdb/fix-e2e-tests
ZoranPandovski Apr 9, 2026
c98eca1
Improt from settings
ZoranPandovski Apr 9, 2026
407d2bf
new memory
ZoranPandovski Apr 9, 2026
66b573a
Base interface
ZoranPandovski Apr 9, 2026
2bff14c
Move consolidator and cortex
ZoranPandovski Apr 9, 2026
b375db1
Move episodes and hipocampus
ZoranPandovski Apr 9, 2026
e167d6b
Use shims for initial improts
ZoranPandovski Apr 9, 2026
6709cb3
Use shims for initial improts
ZoranPandovski Apr 9, 2026
860ec08
Fix tests
ZoranPandovski Apr 9, 2026
52b6746
Fix tests
ZoranPandovski Apr 9, 2026
e2567e7
Update docs
ZoranPandovski Apr 9, 2026
c70893a
Fix imports
ZoranPandovski Apr 9, 2026
c343c5d
Fix imports
ZoranPandovski Apr 9, 2026
2c79c6f
Rmv unneeded shims
ZoranPandovski Apr 9, 2026
e52427e
Fix imports
ZoranPandovski Apr 9, 2026
c90fc54
Move consolidation prompt
ZoranPandovski Apr 9, 2026
09d7435
Rmv un needed exports
ZoranPandovski Apr 9, 2026
db9ecc7
New imports
ZoranPandovski Apr 9, 2026
f2a3259
Fix tests
ZoranPandovski Apr 9, 2026
069f966
Fix tests
ZoranPandovski Apr 9, 2026
575e362
Lint
ZoranPandovski Apr 9, 2026
d12b2b1
Import from core
ZoranPandovski Apr 9, 2026
90cdd1e
Improt from core
ZoranPandovski Apr 9, 2026
99a509e
Rmv old scratchpad
ZoranPandovski Apr 9, 2026
2497be3
Move manger
ZoranPandovski Apr 9, 2026
8589a62
Move local scratchpad to core
ZoranPandovski Apr 9, 2026
f3ebf24
New base scratchpad interface
ZoranPandovski Apr 9, 2026
0a61d7a
Fix tests
ZoranPandovski Apr 9, 2026
468c4be
Move boot
ZoranPandovski Apr 9, 2026
af882f2
Boot scratcpad to core
ZoranPandovski Apr 9, 2026
eb66f8d
Move constants
ZoranPandovski Apr 9, 2026
2133a7b
Move constants
ZoranPandovski Apr 9, 2026
483b32c
Protocol consts
ZoranPandovski Apr 9, 2026
7fe66d1
Merge pull request #95 from mindsdb/feature/core_scratchpad
torrmal Apr 9, 2026
e84b78d
better data connection experience, use llm on all non credential fiel…
torrmal Apr 9, 2026
294d073
Lint
ZoranPandovski Apr 9, 2026
c8be9f3
Add chat sesion config
ZoranPandovski Apr 9, 2026
bd3a32b
Explainability v1
pnewsam Apr 8, 2026
851bfb0
mergeres into v.2
torrmal Apr 9, 2026
bdf75c9
Merge branch 'releases/v2.0.0' of https://github.com/mindsdb/anton in…
torrmal Apr 9, 2026
6c6c8dc
docs: reposition Anton as general-purpose autonomous agent
ianu82 Apr 9, 2026
7df4175
Merge pull request #82 from mindsdb/feature/explainability-v1
pnewsam Apr 9, 2026
3171fe6
Fix merge issue with workspace var
pnewsam Apr 9, 2026
1aa734a
Merge pull request #99 from mindsdb/bugfix/workspace-var-merge-issue
pnewsam Apr 9, 2026
b2c5bb9
Codeql fix
pnewsam Apr 9, 2026
696679f
Merge pull request #100 from mindsdb/bugfix/codeql-issues
pnewsam Apr 9, 2026
a0a7241
smoother data connection
torrmal Apr 10, 2026
4c26026
Merge pull request #98 from mindsdb/update-readme-positioning-v2
torrmal Apr 10, 2026
ff75c0c
connect workflow is much better, some final touches
torrmal Apr 10, 2026
85c38b7
better workflow if something fails along the way when trying to conne…
torrmal Apr 10, 2026
50bfa19
skills and better llm object extraction
torrmal Apr 11, 2026
5cfaebf
updates, tbd; neocortex, Striatum and autolearn skills
torrmal Apr 11, 2026
6bccb7b
move shares to anton.mindsdb.com
hamishfagg Apr 12, 2026
02c6ff7
better timers and messaging
torrmal Apr 13, 2026
78bcd52
replace space at the end of a prompt with invisible symbol
ea-rus Apr 13, 2026
b963542
added the interface for accessing coding creds
MinuraPunchihewa Apr 9, 2026
723008d
removed extra coding params from session
MinuraPunchihewa Apr 9, 2026
5b1a5c3
removed unused code
MinuraPunchihewa Apr 9, 2026
06ce422
fixed broken import
MinuraPunchihewa Apr 10, 2026
eb2ab19
moved data vault and registry to core
MinuraPunchihewa Apr 10, 2026
e3e6b26
fixed handling non-string env var injection
MinuraPunchihewa Apr 10, 2026
025a41d
enabled data_vault to be passed to session
MinuraPunchihewa Apr 10, 2026
b6da9ee
updated path given to vault dir
MinuraPunchihewa Apr 10, 2026
103995e
fixed the default jungle for scratchpad runtimes
MinuraPunchihewa Apr 13, 2026
966a4f8
introduced the runtime factory protocol
MinuraPunchihewa Apr 14, 2026
d66e776
incorporated runtime factory to backend initialization
MinuraPunchihewa Apr 14, 2026
8813ac6
introduced utilities for backends
MinuraPunchihewa Apr 14, 2026
3c24133
fixed local runtime factory
MinuraPunchihewa Apr 14, 2026
914f873
fixed vault dir error
MinuraPunchihewa Apr 14, 2026
6c2e9f7
added structured system prompt ctx instead of run ctx
MinuraPunchihewa Apr 14, 2026
03959e3
Merge branch 'releases/v2.0.0' into fix-fqe2206
ZoranPandovski Apr 14, 2026
2fbbfa7
Merge pull request #103 from mindsdb/move_anton_mindsdb
ZoranPandovski Apr 14, 2026
2b8c2cb
Merge pull request #105 from mindsdb/feature/enterprise_refinements
ZoranPandovski Apr 14, 2026
3e9b703
Merge pull request #104 from mindsdb/fix-fqe2206
ZoranPandovski Apr 14, 2026
b597619
Rmv old ds
ZoranPandovski Apr 14, 2026
9b4231f
Split ds commands
ZoranPandovski Apr 14, 2026
0c39b9c
Split ds commands
ZoranPandovski Apr 14, 2026
b8c17d1
Split ds commands
ZoranPandovski Apr 14, 2026
c5f65e8
Split ds commands
ZoranPandovski Apr 14, 2026
324b0e6
Vault interface
ZoranPandovski Apr 14, 2026
1c9160e
Use local vault
ZoranPandovski Apr 14, 2026
a9b6689
Fix tests
ZoranPandovski Apr 14, 2026
db6cf26
Fix tests
ZoranPandovski Apr 14, 2026
571a8c1
Fix tests
ZoranPandovski Apr 14, 2026
b7478ad
updated the boot script to load and dump session state
MinuraPunchihewa Apr 14, 2026
20b4157
added dill as a project dependency
MinuraPunchihewa Apr 14, 2026
7b93239
removed output_dir and introduced resource_storage_instructions
MinuraPunchihewa Apr 14, 2026
a729298
removed output_dir from session
MinuraPunchihewa Apr 14, 2026
adcc49b
added storage instructions via callers
MinuraPunchihewa Apr 14, 2026
593d060
fixed tests
MinuraPunchihewa Apr 14, 2026
3051551
removed unusued code
MinuraPunchihewa Apr 14, 2026
a10d899
renamed param to output_context
MinuraPunchihewa Apr 14, 2026
71a1a54
send fingerprint on analytics
torrmal Apr 15, 2026
a737188
revert to 4nton.ai for now
torrmal Apr 15, 2026
f1887f0
Clarify description of Anton AI agent
torrmal Apr 15, 2026
75a0b5a
Update download link for Anton Desktop App on macOS
torrmal Apr 15, 2026
d45087e
publish update workflow with versions
torrmal Apr 15, 2026
4ccbd4e
better progress messaging
torrmal Apr 15, 2026
71f39cc
keep track of what has been published, so it can do updates instead o…
torrmal Apr 15, 2026
2b456a0
drop legaccy reports
torrmal Apr 15, 2026
371d883
Merge pull request #107 from mindsdb/feature/data-v2
ZoranPandovski Apr 15, 2026
3afac80
Merge pull request #108 from mindsdb/feature/stateful_scratchpads
ZoranPandovski Apr 15, 2026
83b4765
Merge pull request #109 from mindsdb/feature/output_instructions
ZoranPandovski Apr 15, 2026
f6dfb37
Merge branch 'main' into releases/v2.0.0
ZoranPandovski Apr 15, 2026
197831c
Fix scratchpad tests
ZoranPandovski Apr 15, 2026
d5c3317
Update tests
ZoranPandovski Apr 15, 2026
2663fb3
connect telemetry
torrmal Apr 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
▐ ▐ █▀█ █ ▀█ █ █▄█ █ ▀█
▐ ▐
```

# Meet Anton - an agent that gets real work done

Anton is a personal AI agent that helps you get actual-work done. Tell it what you need in plain language and it takes it from there - sending emails, calling APIs, connecting to data sources, building dashboards, and delivering results. No setup, no plugins, no fuss.

It doesn't just answer questions. It *does things*: cleans your inbox, builds integrations, analyzes your data, automates workflows - whatever the task requires.
Expand Down Expand Up @@ -77,7 +79,9 @@ Set up a WhatsApp integration so I can message you from my phone.

Anton doesn't wait for someone to build a connector. It writes the integration code itself, sets it up, and gets it running - so you can chat with it from WhatsApp, Telegram, or whatever channel you need.


### 🔧 Ask for anything that requires action

- **Send emails** - connect accounts, draft messages or even send them on your behalf.
- **Manage Calendarss** - Summarize your day, create meetings, block time, etc. All just by asking.
- **Automated reporting** - pull from multiple databases, crunch numbers, deliver a report on a schedule.
Expand Down
407 changes: 350 additions & 57 deletions anton/README.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion anton/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "1.1.5"
__version__ = "2.0.0"
73 changes: 70 additions & 3 deletions anton/analytics.py
Original file line number Diff line number Diff line change
@@ -1,30 +1,96 @@
"""Fire-and-forget anonymous analytics events.

Every call spawns a daemon thread that issues a single GET request to the
configured analytics URL. The request carries only the action name and a
timestamp — no PII, no payload beyond what the query string contains.
configured analytics URL. The request carries only the action name, a
timestamp, and an anonymous machine fingerprint — no PII, no payload
beyond what the query string contains.

Guarantees:
• Never blocks the caller.
• Never raises — all exceptions are silently swallowed.
• Daemon threads die automatically when the process exits.

Machine fingerprint
===================

Each event includes an ``aid`` (Anton Installation ID) — a deterministic
SHA-256 hash of the machine's MAC address (``uuid.getnode()``). This is:

• **Anonymous**: the hash is one-way; the raw MAC never leaves the
device. No hostname, no platform, no PII.
• **Stateless**: no file on normal machines — computed from the MAC.
• **Stable**: changes only if the primary network adapter changes.

Fallback for Docker / containers: if Python can't find a real MAC
(detected via the multicast bit), a random UUID is persisted to
``~/.anton/.installation_id`` so it stays stable across restarts.
File I/O only happens in this edge case — normal desktops never
touch disk.

The ``aid`` is truncated to 16 hex characters (~64 bits of entropy) —
enough to be collision-free across millions of installations, short
enough to be a readable query parameter.
"""

from __future__ import annotations

import hashlib
import threading
import time
import urllib.parse
import urllib.request
import uuid
from typing import TYPE_CHECKING

if TYPE_CHECKING:
from anton.config.settings import AntonSettings

_TIMEOUT = 3 # seconds

# Cached after first computation — the fingerprint never changes within
# a process, so computing it once is sufficient.
_cached_aid: str | None = None


def get_installation_id() -> str:
"""Return a deterministic, anonymous machine fingerprint.

The fingerprint is a truncated SHA-256 of the MAC address on normal
machines. If no real MAC is available (Docker containers with stripped
networking), a random UUID is persisted to ``~/.anton/.installation_id``
as a one-time fallback. Computed once per process and cached.

Returns:
A 16-character hex string (64 bits of entropy).
"""
global _cached_aid
if _cached_aid is not None:
return _cached_aid

try:
node = uuid.getnode()
is_random_fallback = bool(node & (1 << 40)) # multicast bit = Python faked it

if is_random_fallback:
# No real MAC (e.g. Docker with stripped networking).
# Persist a UUID to disk so it's stable across restarts.
from pathlib import Path

path = Path("~/.anton/.installation_id").expanduser()
if path.is_file():
_cached_aid = path.read_text(encoding="utf-8").strip()[:16]
else:
_cached_aid = uuid.uuid4().hex[:16]
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(_cached_aid + "\n", encoding="utf-8")
else:
_cached_aid = hashlib.sha256(str(node).encode()).hexdigest()[:16]
except Exception:
_cached_aid = "unknown"
return _cached_aid


def send_event(settings: AntonSettings, action: str, **extra: str) -> None:
def send_event(settings: "AntonSettings", action: str, **extra: str) -> None:
"""Send an analytics event in a background thread.

Args:
Expand All @@ -41,6 +107,7 @@ def send_event(settings: AntonSettings, action: str, **extra: str) -> None:

params: dict[str, str] = {
"action": action,
"aid": get_installation_id(),
"timestamp": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()),
"_": str(int(time.time() * 1000)),
}
Expand Down
Loading
Loading