Syntac is a local-first Android coding agent by DraxonV1.
Open a project folder on your phone, connect an AI provider, chat about code, inspect file changes, run commands, and keep project state on-device.
In development right now, expect issues & bugs. Report issues at /issues.
- Developer: DraxonV1
- Repository: https://github.com/DraxonV1/Syntac
- Android package:
com.syntac - Current version:
0.1.1-beta.6(versionCode16) - Default update channel: beta
Syntac is built for code work away from a laptop. It gives one Android app enough local context to review a project, ask an AI model for changes, inspect generated edits, and run command-line checks through an Android runtime.
Core behavior:
- Project folders stay on your device.
- Chat history and tool results stay on your device.
- API keys and OAuth credentials stay in Android secure storage.
- Model requests go only to the provider you configure.
- Shell commands run only for the active project.
- Local project browser with recent projects and search.
- Chat-based coding agent with streaming responses.
- File tools for reading, writing, patching, globbing, listing, deleting, and searching project files; explicit read-only systemwide diagnostics.
- Bash and durable runtime job tools through packaged Android runtime or Termux bridge.
- Provider support for Google Antigravity / Cloud Code Assist, ChatGPT Codex OAuth, Grok, and OpenAI-compatible APIs.
- Markdown/code rendering and expandable tool result cards.
- Startup, runtime, provider, and storage diagnostics.
- Built-in update check with stable, beta, and nightly channels.
On Android, user-visible Syntac data lives under /storage/emulated/0/.syntac/ when All files access is granted:
.syntac/syntac.sqlite
.syntac/cache/
.syntac/logs/
.syntac/natives/
.syntac/run/
.syntac/agent/SYSTEM.md
.syntac/agent/blobs/
.syntac/agent/config.yml
.syntac/agent/sessions/chats.jsonl
.syntac/agent/sessions/attachments.jsonl
Runtime rootfs, temporary PRoot files, and secrets stay app-private. Existing private and legacy chat stores migrate into this layout without overwriting current files. Global instructions live in .syntac/agent/SYSTEM.md; project .syntac/agent/SYSTEM.md or AGENTS.md overrides it. Grant storage access from Shell Runtime screen when Android reports shared access unavailable.
Syntac can run shell commands through:
- Packaged Arch Linux PRoot runtime installed into app-private storage.
- Termux
RUN_COMMANDbridge, if Termux is installed and configured.
Termux setup:
mkdir -p ~/.termux
printf 'allow-external-apps=true\n' >> ~/.termux/termux.properties
termux-reload-settings
termux-setup-storageThen grant Syntac the Termux command permission from Android settings.
Syntac checks update manifests for the active channel. Current default channel is beta.
Channels:
stable: tested public releases.beta: current default channel.nightly: early testing builds.
Current beta APK target:
https://github.com/DraxonV1/Syntac/releases/download/v0.1.1-beta.6/syntac-arm64.apk
Current manifest files:
update/stable.json
update/beta.json
update/nightly.json
GitHub fallback manifest URL:
https://raw.githubusercontent.com/DraxonV1/Syntac/main/update/<channel>.json
Requirements:
- Flutter stable with Dart compatible with
sdk: ^3.11.5. - JDK 17.
- Android SDK.
- Android NDK from Flutter/Android tooling.
- Git LFS.
Clone:
git clone https://github.com/DraxonV1/Syntac.git
cd Syntac
git lfs pullInstall dependencies:
flutter pub getRun checks:
dart format lib test
flutter analyze
flutter testBuild debug/development APK:
flutter build apk --releaseRelease APK output:
build/app/outputs/flutter-apk/app-release.apk
com.syntac is public Android package identity. Keep it stable so updates install over existing beta builds.
Contribution and release flow:
- Make source changes on a branch and open PR into
master. - PR CI runs formatting, analysis, and tests without release secrets.
- Review and merge PR only after CI passes.
- Manual Android APK workflow builds signed candidate artifact without creating or moving tags.
- Push exact version tag, such as
v0.1.1-beta.6, only after candidate passes physical-phone checks. Tag must matchpubspec.yaml. - Tag workflow rebuilds, verifies, and publishes only matching channel manifest. It never force-moves tags or overwrites other channels, then opens generated manifest-sync PR for
master.
Latest beta release:
https://github.com/DraxonV1/Syntac/releases/tag/v0.1.1-beta.6
PR builds never receive release signing credentials or provider OAuth secrets.
Release artifacts:
https://github.com/DraxonV1/Syntac/releases/download/v0.1.1-beta.6/syntac-arm64.apk
update/beta.json
Thanks to oh-my-pi for protocol and agent-tool references. Current compatibility audit pins upstream commit e24466515dae616f4027170027245c6222f28ab2 in assets/models/catalog-source.json; upstream source is not vendored.
Runtime sources live under:
third_party/proot: PRootthird_party/termux-proot: Termux PRoot fork
Provider and model icons use the official Lobe Icons unpkg CDN:
https://unpkg.com/@lobehub/icons-static-svg@latest/icons/{slug}.svg.
Provider and model metadata comes from bundled Models.dev snapshot. Refresh with python scripts/update_model_catalog.py; recorded SHA-256 preserves provenance.
