FAQ
Get oriented
Short answers to common questions about the application model and newer framework features.Starting out
What is s-m-r-t?+
A TypeScript application framework built around useful domain objects. It supplies persistence, manifests, generated REST/MCP/CLI interfaces, users, tenants, agents, web data, native-mobile foundations, and a broad set of domain packages.
What is a SAADL?+
Software as Agentic Domain Logic means the same domain operations are available to people through ordinary interfaces and to agents through callable tools. Both resolve through the same models, permissions, tenants, and field policies.
Do I need every package?+
No. Start with smrt-core, then add packages by capability or domain. They share conventions, but the stack is intentionally modular.
Which database should I use?+
SQLite is excellent for development and local-first tools, Postgres is the normal production choice—especially when using row-level security—and DuckDB fits analytical workloads.
Application foundation
Can an agent help someone complete a form?+
Yes. Standard controls can publish their identity, meaning, options, constraints, and state to a chat, voice, tutorial, or test adapter. An agent may point to a field or stage a proposed value, but applying, clearing, or undoing is always refused for an agent by default — only a human, through a real local click, can confirm one — and secret controls remain unavailable.
Are users and tenants included?+
Yes. smrt-users includes sessions, memberships, hierarchical tenants, roles, permissions, access requests, and SvelteKit integration. smrt-tenancy enforces data scope on decorated models.
How do tenant relationships work?+
Parent/child tenants describe organization. Memberships connect a user to a tenant with one role. Profile relationships describe domain links between people, organizations, or agents. They are separate on purpose.
Can permissions differ between REST, MCP, WebMCP, and CLI?+
Yes. Each model declares which operations each interface exposes. Manifest-derived permission slugs and runtime principal checks keep interface policy connected to authorization.
Newer capabilities
What does it mean that agents learn?+
Learning is opt-in. Agents recall confident, scoped memories before work and reinforce or decay them from outcomes afterward. Personas can propose instruction changes, but activating those changes requires a separate permissioned human approval.
Is smrt-mobile a JavaScript wrapper?+
No. Shared behavior is Kotlin Multiplatform; Android uses Compose and native adapters, while iOS uses SwiftUI and Apple frameworks. The shared layer covers offline queues, packs, auth, networking, evidence, and presenter state.
What is hydration in smrt-web?+
SvelteKit server results seed generated browser collections so the client does not repeat the initial fetch. Live updates, persisted cache versioning, and the offline outbox continue from that initial state.
What does WebMCP expose?+
s-m-r-t generates browser tool descriptors for exposed collection actions and registers them with document.modelContext. CRUD tools execute through the normal REST client as the signed-in page user, preserving authentication, tenant, permission, and field policy.
Why s-m-r-t
Why build one application for both people and agents?+
Building two systems — a person-facing application and a separate, reduced set of endpoints or bots for software — means keeping two descriptions of the same operations in sync by hand, and the second one tends to drift and shrink over time. A s-m-r-t application describes each operation once; people reach it through pages, HTTP, or the command line, and software agents reach the identical operation as a callable tool, so there is no second definition to fall behind.
What is SAADL, and how is it pronounced?+
SAADL — Software as Agentic Domain Logic: software whose domain logic exposes the same operations to human users (UI, HTTP, CLI) and to software agents (callable tools). Pronounced "saddle."
Read the full SAADL reference →Can an agent do anything a signed-in person cannot?+
No. An agent can do only what three lists all allow: what the signed-in person may do, what its kind of agent may ever do, and what its assigned role permits. The check runs from the moment an agent reads a description to the stored record itself — a description does not by itself grant a session, a tenant, or a permission.
Security defaults →Does asking in chat skip the application's rules?+
No. However a request arrives — a click, a typed command, or a natural-language chat message — it enters through the same declared control or operation, and the same tenant, permission, and field-policy checks apply.
Human-agent interaction →Is this site itself built with s-m-r-t?+
Yes. s-m-r-t.dev runs on the same released @happyvertical/smrt-* packages it documents — the component playground, the agent-aware form demo, and the data table on this site are the actual packages, not mockups.
Component playground →Why is it spelled s-m-r-t?+
I can't help myself. As I was planning a framework for software that develops and runs itself, a certain scene from The Simpsons was prominently in mind.