Universal AI agent runtime. The Core layer of the ARGO product stack.
- Status (2026-04-18) — clean-start scaffold, Phase 2 landed. Workspace holds
tinicore-traits,tinicore, andtinimem; other crates land phase-by-phase per PLAN.md. Imported predecessor code preserved at tagpre-clean-startand branchlegacy-import. - What it is — a Rust workspace implementing the agent loop, tool/skill/plugin registry, capability broker, memory substrate, hook manager, sub-agent orchestrator, and (incoming) A2A host. Platform-agnostic. Product-agnostic.
- Who uses it — any product, built by us or a third party, that wants an on-device AI agent. The first consumer is
SR-Agent/ARGO(Android assistant app). Future consumers will include messaging / health / productivity products on Android, Windows, Linux, and Tizen. - What it is NOT — a user-facing app. There is no UI here. Products wrap tinicore.
| Target | Adapter crate | Transport |
|---|---|---|
| Android | tiniffi |
UniFFI → Kotlin bindings consumed from an APK |
| Windows | tinicapi |
C ABI (.dll) consumed from a Win32/UWP shell |
| Linux | tinicapi |
C ABI (.so) consumed from any Linux shell |
| Tizen / embedded | tinicapi |
C ABI (.so) consumed from Tizen apps / appliances |
| Desktop REPL / dev | tinicli |
Standalone binary |
iOS is not in scope. macOS is unscoped; revisit once the four supported targets are stable.
tinicore is built to consume external ecosystems verbatim. We do not invent formats where live ones exist.
| Ecosystem | Source of truth | How tinicore consumes it |
|---|---|---|
| OpenClaw Plugins | openclaw/openclaw — definePluginEntry, api.on, api.registerTool, api.registerService |
Hosted in an embedded QuickJS runtime (rquickjs). Hook event names stay snake_case verbatim. |
| OpenClaw Skills | SKILL.md frontmatter + _meta.json + scripts/ + hooks/ + assets/ |
Parsed verbatim; bundle layout preserved; .sh → tinish, .js → rquickjs, .py → Chaquopy (or platform Python) |
| MCP (Model Context Protocol) | modelcontextprotocol.io | MCP client + server; tools / resources / prompts / sampling / apps all first-class |
| A2A (Agent2Agent Protocol) | a2aproject/A2A — lf.a2a.v1.A2AService gRPC |
tinicore hosts both A2A client + server; AgentCard, Task, Message, Part, Artifact types are native (generated from specification/a2a.proto via tonic-build) |
tinicore/
├── tinicore-traits/ — platform-agnostic trait surface (Phase 1–2: Principal + audit + Capability + Broker)
├── tinicore/ — reference impl: DefaultBroker + SecretScope (Phase 2)
└── tinimem/ — vector-indexed memory store (ObjectBox planned; scaffold)
Only the three crates above exist today. Every other crate named in PLAN.md (tinish, tinivfs, tiniffi, tinicapi, tinicli, plus future tiniapp / tinilens / tinidiff) is created by the phase that needs it. See PLAN.md's "Crate recreation notes" section for the non-obvious Cargo.toml shape each future crate requires.
Each crate in this workspace carries its own semver; weekly CalVer snapshots (snapshot-YYYY.MM.DD) aggregate the current state into a GitHub Release with all build artifacts. Versions are conservative — pinned to observable external milestones, not phase counts: 0.1.x / 0.0.x during pre-replacement development, 0.2.0 only when tinicore entirely replaces ARGO's tinicore + tini* crates, and 1.0.0 when the Phase 16 Host + A2A contract is frozen. See VERSIONING.md for the full scheme.
Toolchain pin: rust-toolchain.toml fixes the compiler version.
# Native build (Windows / Linux / macOS dev host)
cargo build --workspace
cargo test --workspace
# Android libraries (requires Android NDK + cargo-ndk)
cargo ndk --target arm64-v8a build -p tiniffi --release
# → produces libtiniffi.so + (via uniffi-bindgen) tiniffi.kt
# C ABI libraries for Windows / Linux / Tizen
cargo build -p tinicapi --release
# → produces libtiniclaw.{so,dll} + header exposing stable symbolsRead CLAUDE.md before submitting a PR. In particular:
- Type-schema changes to
tinicore-traitsmust fix every callsite in the same PR. - External ecosystem formats (OpenClaw SDK, MCP, A2A) are not ours to change. Consume them verbatim.
- Every new tool origin is a new
dispatch_kindbranch + a new registry-write site, never a parallel orchestrator.
tinicore is consumed by SR-Agent/ARGO, currently as a sibling repo (git submodule pending). The architectural masterplan — including ecosystem compatibility matrices, the Host vs. Orchestrator distinction, the full 16-phase implementation order — lives in ARGO's masterplan. This repo's PLAN.md names only the Core-layer slice of that roadmap.
Apache-2.0. See LICENSE.