A local-first, cross-platform AI agent for your computers and servers—all managed from one interface.
Sanad Agent runs a native Dart agent close to your files and tools. Use it locally with offline models, or install it on multiple computers and headless servers and manage them from the same Flutter client on desktop, mobile, or the web.
Sanad Agent is created by Ahmed Attia and developed under EastStar AI, an independent AI studio.
One Sanad experience across desktop and mobile.
| Capability | What it gives you |
|---|---|
| One interface for every device | Pair desktop computers and headless servers, then work with their independent workspaces and conversations from desktop, mobile, or web. |
| Local-first, including offline use | Connect the desktop client directly to the native Dart agent. With Ollama, LM Studio, or llama.cpp, supported conversations and tools can run without an internet connection. |
| Redirect work in progress | Steer an active run at the next safe boundary without stopping it, or queue separate work behind it. |
| Parallel work that survives disruption | Run isolated conversations concurrently and reconstruct running, queued, waiting, failed, and completed work after reconnect or agent restart. |
| Bring your providers and accounts | Configure different providers, multiple accounts for the same provider, local runtimes, and custom endpoints; switch routes inside a conversation and use eligible exact-model failover. |
| Keep every workspace isolated | Scope context, permissions, provider choice, conversations, drafts, MCP servers, and skills to the workspace that owns them. |
| Memory and identity you can inspect | Preserve long-term context in files and customize the agent with SOUL.md, USER.md, MEMORY.md, and workspace instructions. |
| Built for contributors and coding agents | Follow layered AGENTS.md Runtime Contracts and a curated documentation index; use isolated sanad-dev runtimes, live logs, supervised agent restart, and Flutter hot reload. |
Explore the complete capability set and its current boundaries in Sanad Agent Features.
- Download Sanad Client for a publicly distributed platform from the latest release. The first iOS release is available only through Internal TestFlight, not as a public GitHub Release download.
- Launch the client and choose the local-device path.
- Configure a local provider such as Ollama, LM Studio, or llama.cpp—or add a hosted provider.
- Select a workspace and start a conversation.
A Sanad account is not required for the local-only path.
- Open Sanad Client on desktop, mobile, or the web.
- Create and name a device.
- Copy the generated command and run it once on the target computer or headless server. It installs, pairs, and starts Sanad Agent.
- Select the device from the same Sanad Client and begin working with its workspaces and conversations.
For macOS or Linux:
curl -fsSL https://sanad.eaststarai.com/install.sh | bash -s -- --pairing-token '<pairing-token>'For Windows PowerShell:
& ([scriptblock]::Create((irm https://sanad.eaststarai.com/install.ps1))) -PairingToken '<pairing-token>'Unsigned Windows build: The
1.0.0Windows installer is intentionally unsigned. Verify that it came from the official release and that its SHA-256 matches the published release manifest before proceeding. Do not disable Microsoft Defender or Smart App Control.
Sanad Client inserts a creation-only pairing token into the copied command. The installer verifies the selected release artifact, prepares pairing, and starts the background service. On the first successful connection, the agent replaces that visible token with a durable credential generated locally; the initial token cannot be reused.
See Install and Use Sanad Agent for client packages, manual agent installation, service management, providers, updates, and removal.
Clone the repository and enter its directory:
git clone https://github.com/EastStarAI/sanad-agent.git sanad-agent
cd sanad-agentOn macOS or Linux, bootstrap and run the complete managed pair with:
scripts/sanad-devOn Windows PowerShell, run:
.\scripts\sanad-dev.ps1The bootstrap installs the verified user-scoped FVM release when needed,
installs the repository-pinned Flutter SDK, resolves Agent and Client
dependencies, and installs the cross-platform sanad-dev user command. No
administrator access is required.
For Flutter device selection, local-only operation, development commands, and testing workflows, follow the Developer Guide.
| Mode | Where the agent runs | Where you control it | Sanad account |
|---|---|---|---|
| Local desktop | The same macOS, Linux, or Windows computer | Desktop client through a direct local connection | Not required |
| Connected computer | A paired desktop or remote computer | Desktop, mobile, or web client | Required |
| Headless server | A paired macOS, Linux, or Windows server | Desktop, mobile, or web client | Required |
| Standalone CLI | The current computer or server | Terminal | Not required locally; required for connected-device access |
Flutter Client
├── Direct local connection ─────────► Dart Agent on this computer
└── Optional hosted connection ──────► Sanad Gateway ─────► Dart Agent on a remote device
Dart Agent
├── Workspaces, sessions, recovery, memory, and provider configuration
├── Built-in tools, MCP servers, skills, and permission enforcement
└── Local model or external model-provider connection
The Dart agent owns execution and local state. The Flutter client provides the interface for selecting devices, workspaces, conversations, providers, and models while rendering messages, tools, permissions, questions, queues, and recovery state.
agent/— native Dart CLI and background service that owns execution and local state.client/— Flutter interface for local and remote devices.docs/— product, technical, operations, and QA documentation.scripts/— development, documentation, build, and release tooling.
Send a normal message during an active run to redirect it at the next safe
boundary without discarding its progress. Use Ctrl+Enter on Windows/Linux or
Cmd+Enter on macOS to queue a separate request instead. Queued work can be
promoted to steering or removed, and Stop restores unexecuted input to the
draft.
The agent can suspend a turn and show a question card with suggested answers and a custom-response option. Your answer resumes the same turn. Permission requests use a separate inline card and remain governed by workspace policy.
Create multiple instances of one provider—for example, separate personal and work accounts. Each instance has independent credentials, model, readiness, rate limits, and failover policy. ChatGPT Subscription instances can also show their authoritative Session and Weekly usage windows.
Connect MCP servers over stdio, Server-Sent Events, or streamable HTTP, and install skills globally for the user or locally for a workspace. Workspace definitions take priority over user-level capabilities with the same name.
| Component | Platforms |
|---|---|
| Sanad Agent | macOS, Linux, and Windows, including headless operation |
| Sanad Client | macOS, Windows, Linux, Android, iOS (Internal TestFlight for the first release), and Web |
- Scheduling: persisted one-shot tasks can run while the agent service remains active. Recurring cron-style schedules are not part of the stable scheduling surface.
- Computer use: desktop screenshot, keyboard, and mouse tools require explicit enablement and the corresponding operating-system permissions.
- Realtime voice: the Gemini Realtime voice path is experimental, hidden by default, and not part of the stable feature set. See Experimental Realtime Voice.
- Capacity: Sanad does not impose a fixed product count on conversations or provider instances; practical capacity depends on the device and the connected providers.
| Guide | What it covers |
|---|---|
| Features | Complete user-facing capabilities, constraints, and experimental boundaries |
| Installation and User Guide | Client and agent installation, device pairing, providers, updates, service management, and removal |
| Developer Guide | Source setup, tests, isolated worktrees, logs, restart controls, and Flutter reload |
| Client Interface | Devices, workspaces, conversations, steering, queues, questions, permissions, providers, and responsive behavior |
| Provider Protocol | Provider templates, instances, credentials, models, readiness, usage, and failover |
| Hosted Connectivity | Identity, device inventory, remote relay, and the state that remains owned by the selected agent |
| Technical Documentation | Agent/client runtime, protocols, persistence, platform integration, and hosted connectivity |
| Agent Engine | Model execution, tools, MCP, skills, prompts, and capability contracts |
| QA and Recovery | Regression matrices and recovery behavior |
| Machine-readable Index | Curated documentation entry points for developers and coding agents |
Local workspaces, conversations, provider configuration, memories, and execution state are owned by the agent running on the selected device. Connected-device features exchange the identity, device inventory, commands, and events necessary to operate the remote relay.
Never commit API keys or tokens. Provider credentials and Sanad identity tokens are runtime user data outside Git, and diagnostic serialization redacts credential-shaped fields.
Report vulnerabilities privately according to SECURITY.md.
Contributions are welcome. Start with CONTRIBUTING.md,
follow the nearest AGENTS.md Runtime Contract, and read
CODE_OF_CONDUCT.md. Contributions require no CLA or DCO;
required checks and protected review labels apply, and human pull requests use
squash merge.
- Issues: Report a bug or request actionable work
- Discussions: Propose an idea or ask an architectural question
- Community: Join the Sanad Agent Discord
(permanent project invite, lands in
#help-and-support). - Support: Choose the correct help channel
- Governance: Read how decisions and contributions work
- Security: Report vulnerabilities privately
- Code signing: Review artifact trust and signing policy
Sanad Agent is available under the MIT License.
Copyright © 2026 Ahmed Attia, operating as EastStar AI.