Metadata-Version: 2.4
Name: psssst
Version: 0.1.5
Summary: Psssst! An AI resident engineer for your codebase. (The PyPI name is `psssst` because `ubik` was squatted in the Python 2.6 era — `import ubik` and the `ubik` CLI still work after `pip install psssst`.)
Project-URL: Homepage, https://psssst.dev
Project-URL: Documentation, https://psssst.dev/docs
Project-URL: Repository, https://github.com/getubik/ubik
Project-URL: Issues, https://github.com/getubik/ubik/issues
Project-URL: Changelog, https://github.com/getubik/ubik/blob/main/CHANGELOG.md
Author-email: İsmail İbiloğlu <ismail@ibiloglu.com>
License-Expression: Apache-2.0
License-File: LICENSE
Keywords: agent,ai,aider,autonomous,claude-agent-sdk,claude-code,code-review,developer-tools,glm,mcp,model-context-protocol,openhands,z-ai
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development
Classifier: Topic :: Software Development :: Quality Assurance
Requires-Python: >=3.10
Requires-Dist: anyio>=4.6
Requires-Dist: httpx>=0.28
Requires-Dist: litellm>=1.60
Requires-Dist: opentelemetry-api>=1.30
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.30
Requires-Dist: opentelemetry-sdk>=1.30
Requires-Dist: pydantic-ai>=0.1
Requires-Dist: pydantic>=2.9
Requires-Dist: pyyaml>=6.0
Requires-Dist: rich>=13.9
Requires-Dist: typer>=0.15
Provides-Extra: aider
Provides-Extra: all
Requires-Dist: ubik[claude-agent,langfuse,mcp,telegram]; extra == 'all'
Provides-Extra: all-plus
Requires-Dist: ubik[aider,claude-agent,langfuse,mcp,openhands,postgres,slack,telegram]; extra == 'all-plus'
Provides-Extra: claude-agent
Requires-Dist: claude-agent-sdk>=0.1; extra == 'claude-agent'
Provides-Extra: dev
Requires-Dist: pytest-asyncio>=0.24; extra == 'dev'
Requires-Dist: pytest-cov>=5; extra == 'dev'
Requires-Dist: pytest>=8.3; extra == 'dev'
Requires-Dist: ruff>=0.8; extra == 'dev'
Requires-Dist: ty>=0.0.1a3; (python_version >= '3.10') and extra == 'dev'
Provides-Extra: langfuse
Requires-Dist: langfuse>=2.55; extra == 'langfuse'
Provides-Extra: mcp
Requires-Dist: mcp>=1.5; extra == 'mcp'
Provides-Extra: openhands
Requires-Dist: httpx>=0.28; extra == 'openhands'
Provides-Extra: postgres
Requires-Dist: asyncpg>=0.30; extra == 'postgres'
Requires-Dist: pgvector>=0.3; extra == 'postgres'
Requires-Dist: sentence-transformers>=3.3; extra == 'postgres'
Provides-Extra: slack
Requires-Dist: slack-sdk>=3.30; extra == 'slack'
Provides-Extra: telegram
Requires-Dist: python-telegram-bot>=21.7; extra == 'telegram'
Description-Content-Type: text/markdown

# Ubik

> *Pssst — wanna solve some entropy?*
>
> An AI resident engineer for your codebase. Whispers findings. Proposes fixes. Waits for your tap.

🤫 [psssst.dev](https://psssst.dev) · `pip install psssst`

[![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
[![Status: pre-alpha](https://img.shields.io/badge/status-pre--alpha-orange.svg)](#)

> **Ubik is the product. "Pssst!" is the noise it makes when it's about to tell you something.**

---

## What is Ubik?

Ubik lives next to your repository. While you sleep, it:

1. **Reads** the codebase, the recent commits, the production logs.
2. **Watches** competitors, tech trends, papers, security advisories.
3. **Proposes** specific improvements — with evidence, plan, and risk.
4. **Whispers** to you on Telegram: *"Pssst — Ubik found something."*
5. **Ships** the fix when you tap ✅ — through Aider, Claude Code, or any
   agentic executor — onto a feature branch, with tests, as a PR.

You stay in approval mode. Ubik does the digging.

---

## Quickstart

```bash
pip install psssst      # the PyPI name; `ubik` was squatted in 2014

# In any repo:
cd my-repo
ubik init               # interactive wizard → ubik.yaml + .env.example
cp .env.example .env    # fill in API keys + Telegram bot token

ubik run --dry-run      # smoke test: audits + persists, no notifications
ubik run                # autonomous daemon for real
# or
ubik mcp                # MCP server (stdio) — for Claude Desktop / Cursor
# or
ubik audit              # one-shot codebase audit, dump report
```

That's it. Ubik is now resident.

The `ubik init` wizard ships with provider presets for **Z.AI / GLM-5.1**
(default — free with the annual plan), **Anthropic**, **OpenAI**, and
**Ollama** (local). Every field in the generated `ubik.yaml` is honored
by the loader — no config knob is decorative. Roadmap-only fields (web
search, Slack bridge, GitLab verifier, Postgres notebook) are documented
in [`docs/roadmap.md`](docs/roadmap.md) and intentionally absent from
the example.

---

## Why "Pssst"?

Most AI tooling shouts. Ubik whispers. The slogan comes from Philip K. Dick's
1969 novel *Ubik*, where a mysterious product cures reality through cryptic
chapter-opening ads. Our product cures codebases the same way: by leaning over
and going *psst*.

> *"Where's a code reviewer that actually reads the diff?*
>  *Safe to deploy. Won't push to main without approval.*
>  *It's UBIK!"*

---

## Architecture

Ubik is **vendor-agnostic** and **executor-agnostic** by design. Pluggable
adapters at four seams:

```
       ┌──────────────────────────┐
       │     Ubik Orchestrator     │
       │                          │
       │  Researcher → Bridge →    │
       │  Executor   → Verifier   │
       └──────────────────────────┘
              │       │       │       │
              ▼       ▼       ▼       ▼
         LLM      Comms   Coding   Git/PR
       ─────────────────────────────────
        GLM-5.1   Telegram  Claude  GitHub
        Claude    Slack     Agent   GitLab
        GPT       Discord    SDK    ...
        Local     Webhook   Aider
        ...       ...       OpenHands
```

Pick one of each. Swap whenever. Notebook of past findings is shared across
projects so what Ubik learns once, it remembers everywhere.

See [`docs/architecture.md`](docs/architecture.md) for the full picture.

### 2026 stack

Ubik is built on the best-of-breed of mid-2026:

| Layer | Choice | Why |
|---|---|---|
| **Build / dep mgmt** | `uv` + `uv_build` ([Astral](https://astral.sh)) | 100× pip, OpenAI-acquired, the new default |
| **Lint + format** | `ruff` (Astral) | Replaces black + isort + flake8, single binary |
| **Type check** | `ty` (Astral) | mypy alternative, Rust-fast |
| **LLM dispatch** | `litellm` | 100+ providers, vendor-agnostic |
| **Agent loop** | `pydantic-ai` | Type-safe + first-class OpenTelemetry |
| **Coding executor** | `claude-agent-sdk` (Python) | [Multi-agent orchestration](https://www.anthropic.com/), advisor tool, sandbox |
| **Default LLM** | [GLM-5.1](https://docs.z.ai/guides/llm/glm-5.1) (#1 SWE-Bench Pro) | SOTA + free with Z.AI annual plan |
| **MCP server** | `mcp` SDK + Server Cards + MCP Apps | Linux Foundation governed (AAIF), OAuth 2.1 |
| **Observability** | OpenTelemetry GenAI + Langfuse | Industry standard, OSS, multi-project insights |
| **License** | Apache 2.0 | Patent grant + contributor-friendly |

See [`docs/stack.md`](docs/stack.md) for the full reasoning.

---

## Use cases

- **Solo founders** running multiple repos — one Ubik, many `ubik.yaml`s.
- **Open source maintainers** — proactive PR triage, stale-issue digestion.
- **Researchers** — bibliometric scans, citation tracking, paper outline review.
- **Consultancies** — codebase health audit on a new client engagement.
- **Yourself, in your IDE** — install as MCP server, ask in Claude Desktop:
  *"Ubik, what's gone stale in this repo?"*

---

## License

[Apache 2.0](LICENSE). Free for any use, commercial or otherwise. Patent
grant included.

---

## Status

Pre-alpha. Not yet on PyPI / npm. First stable release: see [Roadmap](docs/roadmap.md).

Built by [Ubik](https://github.com/getubik). Inspired by Philip K. Dick.
