Observed since 20 Oct, 22:30 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
agentkai
Open-source personal AI agent — model-agnostic, with tools, memory, scheduler and a local dashboard
An open-source personal AI agent that runs on your own computer.
agentkai is model-agnostic by design: bring your own model — Claude, Gemini, GPT, a local Ollama model, GLM, or anything LiteLLM speaks — and the agent keeps the same tools, memory, scheduler, and dashboard. Everything runs locally first; your data stays on your machine.

pip install agentkai
export ANTHROPIC_API_KEY=... # or GEMINI_API_KEY / OPENAI_API_KEY / ZHIPUAI_API_KEY
agentkai run "summarize what's in ~/Documents" --model claude
agentkai dashboard # local UI at http://127.0.0.1:8931/
No key? Install Ollama, ollama pull qwen3:32b,
then agentkai run "hello" --model local — fully offline.
⭐ If agentkai helped you, a star means a lot — it helps other developers find the project.
Cloud assistants rent you a brain. agentkai gives you the whole animal: one agent loop with real tools, a memory that persists in plain markdown, a scheduler that works while you sleep, and a local dashboard — all wired to whichever model you choose, on your own machine.
claude, gemini, gpt, glm,
local) with fallbacks and capability probing. Keys are yours, never
logged, never leave your machine except to the provider you chose.SOUL.md / USER.md / MEMORY.md, daily logs,
people & groups, keyword search. Plain files you can read, edit, and
git — no black-box vector store.APPROVE / DENY.| Command | What it does |
|---|---|
agentkai run PROMPT | run one agent task with live streaming output |
agentkai chat PROMPT | send one prompt, print the final answer |
agentkai models | show model aliases and what they resolve to |
agentkai doctor | check the setup: config, provider keys, scheduler DB, memory, tools, media providers, dashboard assets (exits 1 on any [FAIL]) |
agentkai runs list/show RUN_ID | inspect past runs from the event log: status, model, tools, full replay |
agentkai dashboard | launch the local web dashboard (127.0.0.1 only, token-secured) |
agentkai gateway | run the messaging gateway daemon (Telegram/Discord/WebChat/WhatsApp) |
agentkai scheduler add/list/remove/run-once/run-due | manage scheduled agent jobs |
agentkai devices | pair phones/laptops and reach them from the agent |
agentkai goals | durable user goals: create, track, close |
agentkai track | tracked items: reservations, deliveries, reminders |
agentkai skills list/show/install | manage SKILL.md playbooks |
Run agentkai <command> --help for flags on any command.
Prefer a UI? agentkai dashboard launches a local web app: chat with
the agent, watch runs stream in with tool calls inline, browse and edit
memory, inspect the tool registry,
and manage scheduled jobs — create, delete, or trigger a run now.
agentkai dashboard
# → http://127.0.0.1:8931/?token=<fresh-token-every-launch>
It binds only to 127.0.0.1 (never exposed to the network), generates
a fresh login token on every launch, and loads zero third-party
resources — the entire UI is packaged with agentkai and works fully
offline. Same agent, same tools underneath.

📚 Documentation: docs/
Quickstart · Models · Tools · Browser · Memory · Scheduler · Channels · Skills · Voice · Media · Devices · Goals · Dashboard · Privacy · Troubleshooting
Honest scope note: this is early-stage software (v0.3.0). Core flows — agent runs, tools, memory, scheduler, dashboard, channels — are implemented and tested. Areas marked experimental in the docs are real code with real limits; they are labeled, not hidden.
git clone https://github.com/Bilal-Junaid-Jiwani/agentkai
cd agentkai
python -m venv .venv && .venv/bin/pip install -e ".[test,voice]"
.venv/bin/python -m pytest tests/ # full suite
Apache-2.0. See LICENSE.
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
litellmEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | litellm>=1.60 | runtime |
typerEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | typer>=0.9 | runtime |
richEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | rich>=13 | runtime |
fastapiEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | fastapi>=0.110 | runtime |
uvicornEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | uvicorn>=0.29 | runtime |
pydanticEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pydantic>=2 | runtime |
pyyamlEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pyyaml>=6 | runtime |
playwrightEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | playwright>=1.40 | runtime |
httpxEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | httpx>=0.27 | runtime |
discord.pyEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | discord.py>=2.4 | runtime |
websocketsEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | websockets>=12 | runtime |
faster-whisperEnvironment{
"extras": "",
"marker": "extra == \"voice\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | faster-whisper>=1.0; extra == "voice" | runtime |
pytestEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest>=8; extra == "test" | runtime |
pytest-asyncioEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest-asyncio>=0.23; extra == "test" | runtime |
bdist_wheel · 5,302 KB · Python py3
sdist · 5,336.37 KB · Python source
Observed since 20 Oct, 22:30 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:eb14ac045172da1c3d1e2e0beae41f33b6bf749b37a45e9a19183cde92a1d37e