Metadata-Version: 2.4
Name: aria-code
Version: 0.71.0
Summary: Open-source AI agent for logistics and finance work: numbers you can check, client data kept apart, actions a person approves
License: Apache-2.0
Project-URL: Homepage, https://github.com/artheras/aria-code
Project-URL: Repository, https://github.com/artheras/aria-code
Project-URL: Issues, https://github.com/artheras/aria-code/issues
Keywords: ai,llm,coding-agent,research,finance,terminal,cli
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Intended Audience :: Financial and Insurance Industry
Classifier: Intended Audience :: Developers
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 :: Office/Business :: Financial
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: <3.14,>=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: NOTICE
Requires-Dist: google-genai>=1.0.0
Requires-Dist: aiohttp>=3.9.0
Requires-Dist: rich>=13.7.0
Requires-Dist: prompt_toolkit>=3.0.43
Requires-Dist: PyYAML>=6.0.2
Requires-Dist: requests>=2.32.0
Requires-Dist: httpx[http2]>=0.27.0
Requires-Dist: PyJWT>=2.8.0
Requires-Dist: aiofiles>=23.2.0
Requires-Dist: websockets>=12.0
Requires-Dist: apscheduler>=3.10.0
Requires-Dist: ddgs>=9.0
Requires-Dist: numpy>=1.26.0
Requires-Dist: pandas>=2.2.0
Requires-Dist: scipy>=1.13.0
Requires-Dist: pandas_ta>=0.4.67b0; python_version >= "3.12"
Requires-Dist: yfinance>=0.2.55
Requires-Dist: pyobjc-framework-WebKit>=10.0; sys_platform == "darwin"
Requires-Dist: markdown>=3.6
Provides-Extra: cn
Requires-Dist: akshare>=1.14.68; extra == "cn"
Provides-Extra: crypto
Requires-Dist: ccxt>=4.4.0; extra == "crypto"
Provides-Extra: charts
Requires-Dist: mplfinance>=0.12.10b0; extra == "charts"
Provides-Extra: google
Requires-Dist: google-genai>=1.0.0; extra == "google"
Provides-Extra: data
Requires-Dist: duckdb>=0.10.3; extra == "data"
Provides-Extra: files
Requires-Dist: pdfplumber>=0.11.0; extra == "files"
Requires-Dist: pypdf>=4.3.0; extra == "files"
Requires-Dist: python-docx>=1.1.2; extra == "files"
Requires-Dist: python-pptx>=1.0.2; extra == "files"
Requires-Dist: openpyxl>=3.1.5; extra == "files"
Requires-Dist: beautifulsoup4>=4.12.3; extra == "files"
Requires-Dist: Pillow>=10.4.0; extra == "files"
Provides-Extra: video
Requires-Dist: opencv-python>=4.8.0; extra == "video"
Provides-Extra: video-analysis
Requires-Dist: faster-whisper>=1.0.0; extra == "video-analysis"
Provides-Extra: adk
Requires-Dist: google-adk>=2.6.3; extra == "adk"
Provides-Extra: ibkr
Requires-Dist: ib_insync>=0.9.86; extra == "ibkr"
Provides-Extra: futu
Requires-Dist: futu-api>=9.1.5108; extra == "futu"
Provides-Extra: tiger
Requires-Dist: tigeropen>=3.2.0; extra == "tiger"
Provides-Extra: longbridge
Requires-Dist: longbridge>=1.0.22; extra == "longbridge"
Provides-Extra: alpaca
Requires-Dist: alpaca-py>=0.35.0; extra == "alpaca"
Provides-Extra: webull
Requires-Dist: webull>=0.3.14; extra == "webull"
Provides-Extra: brokers
Requires-Dist: ib_insync>=0.9.86; extra == "brokers"
Requires-Dist: futu-api>=9.1.5108; extra == "brokers"
Requires-Dist: tigeropen>=3.2.0; extra == "brokers"
Requires-Dist: longbridge>=1.0.22; extra == "brokers"
Requires-Dist: alpaca-py>=0.35.0; extra == "brokers"
Provides-Extra: backtest
Requires-Dist: vectorbt>=0.26.2; extra == "backtest"
Provides-Extra: image-gen
Requires-Dist: torch>=2.2.0; extra == "image-gen"
Requires-Dist: diffusers>=0.30.0; extra == "image-gen"
Requires-Dist: transformers>=4.40.0; extra == "image-gen"
Requires-Dist: accelerate>=0.30.0; extra == "image-gen"
Provides-Extra: web
Requires-Dist: ddgs>=9.0; extra == "web"
Provides-Extra: browser
Requires-Dist: playwright>=1.44.0; extra == "browser"
Provides-Extra: desktop
Requires-Dist: mss>=9.0.1; extra == "desktop"
Requires-Dist: pyautogui>=0.9.54; extra == "desktop"
Provides-Extra: sports
Requires-Dist: understat>=0.1.0; extra == "sports"
Provides-Extra: lsp
Requires-Dist: python-lsp-server[all]>=1.10.0; extra == "lsp"
Provides-Extra: dev
Requires-Dist: pytest>=8.2.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.23.7; extra == "dev"
Requires-Dist: pytest-timeout>=2.3.0; extra == "dev"
Requires-Dist: ruff>=0.4.0; extra == "dev"
Requires-Dist: mypy>=1.10.0; extra == "dev"
Requires-Dist: fastapi>=0.110.0; extra == "dev"
Requires-Dist: uvicorn>=0.29.0; extra == "dev"
Requires-Dist: python-multipart>=0.0.9; extra == "dev"
Provides-Extra: full
Requires-Dist: google-genai>=1.0.0; extra == "full"
Requires-Dist: akshare>=1.14.68; extra == "full"
Requires-Dist: ccxt>=4.4.0; extra == "full"
Requires-Dist: mplfinance>=0.12.10b0; extra == "full"
Requires-Dist: duckdb>=0.10.3; extra == "full"
Requires-Dist: pdfplumber>=0.11.0; extra == "full"
Requires-Dist: pypdf>=4.3.0; extra == "full"
Requires-Dist: python-docx>=1.1.2; extra == "full"
Requires-Dist: python-pptx>=1.0.2; extra == "full"
Requires-Dist: openpyxl>=3.1.5; extra == "full"
Requires-Dist: beautifulsoup4>=4.12.3; extra == "full"
Requires-Dist: Pillow>=10.4.0; extra == "full"
Requires-Dist: ddgs>=9.0; extra == "full"
Provides-Extra: all
Requires-Dist: google-genai>=1.0.0; extra == "all"
Requires-Dist: akshare>=1.14.68; extra == "all"
Requires-Dist: ccxt>=4.4.0; extra == "all"
Requires-Dist: mplfinance>=0.12.10b0; extra == "all"
Requires-Dist: duckdb>=0.10.3; extra == "all"
Requires-Dist: pdfplumber>=0.11.0; extra == "all"
Requires-Dist: pypdf>=4.3.0; extra == "all"
Requires-Dist: python-docx>=1.1.2; extra == "all"
Requires-Dist: python-pptx>=1.0.2; extra == "all"
Requires-Dist: openpyxl>=3.1.5; extra == "all"
Requires-Dist: beautifulsoup4>=4.12.3; extra == "all"
Requires-Dist: Pillow>=10.4.0; extra == "all"
Requires-Dist: ddgs>=9.0; extra == "all"
Requires-Dist: playwright>=1.44.0; extra == "all"
Requires-Dist: mss>=9.0.1; extra == "all"
Requires-Dist: pyautogui>=0.9.54; extra == "all"
Requires-Dist: opencv-python>=4.8.0; extra == "all"
Requires-Dist: understat>=0.1.0; extra == "all"
Requires-Dist: ib_insync>=0.9.86; extra == "all"
Requires-Dist: futu-api>=9.1.5108; extra == "all"
Requires-Dist: tigeropen>=3.2.0; extra == "all"
Requires-Dist: longbridge>=1.0.22; extra == "all"
Requires-Dist: alpaca-py>=0.35.0; extra == "all"
Requires-Dist: vectorbt>=0.26.2; extra == "all"
Requires-Dist: pytest>=8.2.0; extra == "all"
Requires-Dist: pytest-asyncio>=0.23.7; extra == "all"
Dynamic: license-file

<p align="center">
  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="docs/assets/aria-code-icon.png">
    <img src="docs/assets/aria-code-icon-light.png" alt="Aria Code icon" width="88">
  </picture>
</p>

<h1 align="center">Aria Code</h1>

<p align="center">An open-source AI agent for logistics and finance work.<br>
Numbers you can check, client data kept apart, actions a person approves.</p>

<p align="center"><a href="README_CN.md">简体中文</a> · English</p>

<p align="center">
  <a href="https://www.npmjs.com/package/@artheras/aria-code"><img src="https://img.shields.io/npm/v/@artheras/aria-code?style=flat-square&logo=npm&label=npm" alt="npm version"></a>
  <a href="https://pypi.org/project/aria-code/"><img src="https://img.shields.io/pypi/v/aria-code?style=flat-square&logo=pypi&label=PyPI" alt="PyPI version"></a>
  <a href="https://github.com/artheras/aria-code/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/artheras/aria-code/ci.yml?branch=main&style=flat-square&logo=githubactions&label=CI" alt="CI status"></a>
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-64748b?style=flat-square" alt="Apache License 2.0"></a>
</p>

<p align="center"><img src="docs/assets/demo-coding-workflow.gif" alt="Real Aria Code terminal recording: failing tests, source inspection, code edit, and passing tests" width="860"></p>
<p align="center"><sub>Recorded from a real Aria Code terminal session on a temporary test fixture; idle time is shortened. This shows direct CLI commands, not an autonomous model edit. <a href="docs/assets/demo-coding-workflow.png">Still screenshot</a> · <a href="scripts/render_terminal_capture.py">Capture renderer</a>.</sub></p>

## What Aria Code does

A general-purpose assistant aims for an answer that reads well. In logistics and finance the number gets acted on — one purchase order left out of a reorder quantity and the stock is bought twice. Aria Code is built around three things that follow from that.

**Numbers you can check.** Reorder points, safety stock and carrier rankings come from stated formulas, with the formula and every assumption in the result — as does stablecoin settlement reconciliation, from the [Artheras skills](https://github.com/artheras/skills) Aria Code can install. When the data cannot support an answer — under 14 days of demand history, rows that name no shipper — it says so instead of estimating. The [`operations` eval suite](docs/verifiable-evals.md) checks exactly these traps.

**Client data kept apart.** A third-party logistics provider holds many clients' stock side by side. A chat group bound to one shipper confines every analysis to that shipper, and the logistics tools themselves refuse another shipper's data or an unattributable file — the rule holds below the prompt, whatever the model asks for.

**Actions a person approves.** In Feishu, each shipper's group gets a daily digest of reorders, dead stock and freight anomalies. `/补货` turns the reorder list into a purchase-order draft card; nothing happens until an authorised approver presses approve, and what runs is exactly what was shown. The draft is a file for your own purchasing system — Aria Code places no orders.

Underneath is a terminal coding agent: it inspects project files, applies edits, runs commands and tests, and explains the changes, with a local Ollama model or a supported cloud provider. A fresh install has no live business data; the logistics tools read your exports (CSV or JSON), and the chat features need a Feishu app or the Aria relay.

## Quick start

Install the standalone CLI on macOS or Linux without Python, Node.js, or npm:

```bash
curl -fsSL https://raw.githubusercontent.com/artheras/aria-code/main/scripts/install.sh | sh
~/.local/bin/aria
```

On Windows x64, run this in PowerShell:

```powershell
irm https://raw.githubusercontent.com/artheras/aria-code/main/scripts/install.ps1 | iex
aria
```

The installer downloads the binary for your OS from the latest [GitHub release](https://github.com/artheras/aria-code/releases/latest), checks its SHA-256 digest, and installs it in your user account. Open a new terminal to start the interactive CLI with `aria`, `aria code`, or `aria-code`. Set `ARIA_CODE_VERSION=v0.55.0` to pin a release.

Alternative package-manager installs: `npm install -g @artheras/aria-code` (requires npm) or `python3 -m pip install --upgrade aria-code` (requires Python 3.10+). For development from source, see [CONTRIBUTING.md](CONTRIBUTING.md).

To use a local model, install [Ollama](https://ollama.com/download), pull a coding model, and start Aria in local-only mode:

```bash
ollama pull qwen2.5-coder:7b
aria-code --local
```

Or run a single task in an existing project:

```bash
aria-code -p "Inspect this project, fix the failing tests, run them, and summarize the diff."
```

Aria may request approval before editing files or running commands, according to the configured permission mode. Review changes and test results before committing them.

## Models and accounts

| Route | What it needs |
| --- | --- |
| Local Ollama | An installed and running Ollama model; no cloud account for local inference. |
| Direct cloud provider | That provider's API credentials and network access. |
| Direct Google Cloud Vertex AI | `aria-code[google]`, Google Cloud Application Default Credentials, `GOOGLE_CLOUD_PROJECT`, and `GOOGLE_CLOUD_LOCATION`. |
| Arthera hosted service | Install `aria-code[google]` and sign in through `/login` in the CLI. Arthera account sign-in does not grant Vertex AI credentials to your own machine. |

Install extras only for features you use; see [pyproject.toml](pyproject.toml) for the current package options. Local inference can work offline, but live market data, remote integrations, sign-in, and cloud models cannot.

## Explore the project

| Topic | Start here |
| --- | --- |
| Architecture and runtime | [Architecture](docs/architecture.md) |
| Tool permissions and data boundaries | [Safety notes](docs/aria-code-safety.md) |
| Warehouse agents and their read-only data contract | [Warehouse ERP agents](docs/warehouse-erp-agents.md) |
| Strategy and backtesting workflows | [Strategy workspace](docs/strategy_workspace.md) |
| More examples | [Examples](examples/README.md) |
| Releases and changes | [Changelog](CHANGELOG.md) |

For the current command-line flags, run `aria-code --help`. For help inside the interactive CLI, run `/help`. These are preferable to a copied command inventory that can drift from the product.

## Contributing and license

Contributions are welcome; see [CONTRIBUTING.md](CONTRIBUTING.md). Aria Code is open source under the [Apache License, Version 2.0](LICENSE).

Releases 4.2.0 through 4.4.5 were published under the Business Source License 1.1 and remain available under those terms; releases up to and including 4.1.2 were MIT. A license grant cannot be withdrawn from someone who already has it, so each version keeps the license it shipped with — see [NOTICE](NOTICE).
