Skip to main content

Open-source AI agent for Microsoft 365.

Project description

 ███████╗██████╗ ███████╗ █████╗ ███╗   ██╗
 ██╔════╝██╔══██╗██╔════╝██╔══██╗████╗  ██║
 █████╗  ██████╔╝███████╗███████║██╔██╗ ██║
 ██╔══╝  ██╔══██╗╚════██║██╔══██║██║╚██╗██║
 ███████╗██║  ██║███████║██║  ██║██║ ╚████║
 ╚══════╝╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝╚═╝  ╚═══╝

Your office. Your rules. Your AI. ...and you, amplified.

Open-source AI agent for Microsoft 365. Apache 2.0. Runs on your laptop against your own tenant. No data leaves unless you tell it to.


Why ersan

If you use Microsoft 365 and want an AI agent that:

  • doesn't ship your inbox to a third-party SaaS,
  • gates every action through a policy you can read,
  • redacts PII and credentials from outbound text,
  • works in 60 seconds from pip install,

then ersan is for you.

Architecture

ersan is the gate (owns the user relationship), not infrastructure (consumed by other agents). Capabilities load as skills, packaged into plugins.

Three pillars:

  • Core: skill loader, CLI, REPL
  • Policy: trust tiers (ask_first, do_and_tell, do_it) gating every skill call
  • Shield: PII / credential redaction on outbound text

(Microsoft Graph OAuth via MSAL ships in v0.4.0 alongside the inbox skills that need it; see Roadmap below.)

As of v0.3.0, the loader defaults enforce the two gate modules directly: every skill call goes through ersan.policy.PolicyEngine.evaluate() before execution, and every string result goes through ersan.shield.ContentShield.scan() before it reaches the caller.

Privacy

  • No telemetry. Zero phone-home.
  • No third-party LLM calls unless your config calls them. At v0.2.0 this is structurally enforced: local-provider client construction is covered by tests/integration/test_local_provider_no_network.py, which proves the provider factories make zero outbound requests during construction.
  • Your tokens stay local in ~/.ersan/, file-permissions-restricted (POSIX 0600 / Windows ACL via icacls). OS keyring integration is planned for a later release; the file-only path is the supported default and works on every supported OS including headless Linux.
  • Audit-log to your own sink (~/.ersan/audit.log).

Platform support

ersan is platform-agnostic by construction (per Constitution §Cross-platform invariants). Every PR runs against:

  • Per PR (6 jobs): ubuntu-latest × Python 3.10 / 3.11 / 3.12 / 3.13; windows-latest × Python 3.13; macos-latest × Python 3.13.
  • Weekly cron (12 jobs): full cartesian — every supported OS × every supported Python version.
  • On every release tag (6 jobs): smoke-install matrix — {ubuntu, windows, macos} × {Python 3.10, 3.13} runs pip install against the freshly built wheel before it reaches PyPI via Trusted Publishing with Sigstore PEP 740 attestations.

A wheel does not reach PyPI until the smoke-install matrix passes on all three operating systems.

Roadmap

Version Status Goal
v0.1.x ✅ released Architecture-complete: foundations + eval harness + skill loader
v0.2.x ✅ released Model Provider Abstraction — ersan.providers, local-first Ollama config, Anthropic config, privacy-invariant provider tests
v0.3.0 ✅ released Constitutional pillars — bundled slim port of ersan.policy + ersan.shield, wired into the loader with the default retail ask_first policy and ~/.ersan/audit.log audit path
v0.4.0 next Inbox MVP — inbox.list_unread, inbox.summarize, inbox.draft_reply on top of ersan.providers, plus the source-faithful Microsoft Graph token store and MSAL auth

Configuration

Local Ollama example:

llm:
  provider: ollama
  model: llama3
  base_url: http://localhost:11434/v1

Anthropic example:

llm:
  provider: anthropic
  model: claude-3-5-sonnet-latest
  api_key: ${ANTHROPIC_API_KEY}

v0.2.0 reads ANTHROPIC_API_KEY only. The source codebase's ~/.claude/.credentials.json fallback is not yet ported.

How ersan is built

ersan is maintained by Ersan Bilik with AI coding assistants coordinated through GitHub Spec-Kit. Every release ships through the same cycle: spec → plan → implementation → cross-review → merge → release.

Get involved

License

Apache 2.0. See LICENSE.

Built by Ersan Bilik.

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

ersan-0.3.1.tar.gz (63.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ersan-0.3.1-py3-none-any.whl (44.8 kB view details)

Uploaded Python 3

File details

Details for the file ersan-0.3.1.tar.gz.

File metadata

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

File hashes

Hashes for ersan-0.3.1.tar.gz
Algorithm Hash digest
SHA256 fb27c9233a6f6dfc1b96823ed4c0c53aee7a3a9c0b7481202ddda3b16a2c96fe
MD5 8179b51e461dc189a6be409d0fcbe862
BLAKE2b-256 da16d3a30b5f7a61fe452540c4f0835aecb6b7168dd4c89e5b715b584985c197

See more details on using hashes here.

Provenance

The following attestation bundles were made for ersan-0.3.1.tar.gz:

Publisher: release.yml on ersan-ai/ersan

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ersan-0.3.1-py3-none-any.whl.

File metadata

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

File hashes

Hashes for ersan-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 be52ec531b97d99b2fc284ceb06dc462b2d0a2d3232e2395a4606b12f68f4777
MD5 47cf36910784a953950411fefd7cbe4c
BLAKE2b-256 a21d4737834018baf02fb0e76ead65124fab084cda1fa776153a6db91184a35e

See more details on using hashes here.

Provenance

The following attestation bundles were made for ersan-0.3.1-py3-none-any.whl:

Publisher: release.yml on ersan-ai/ersan

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