Skip to main content
No. It’s a real, running interpreter with a genuine test suite, but Phase 5 (developer experience: package manager, language server, debugger, formatter) hasn’t started — see Roadmap. Treat it as an active language-design project you can actually run programs in, not a finished product.
Speed of iteration while the language design itself is still moving. A tree-walking interpreter in Python is the fastest thing to change when a semantic decision turns out to be wrong — and several already have (see Design Order for the syntax rewrite that happened for exactly this reason). A faster, compiled runtime is explicitly future work, not a rejected idea.
Not in most examples on this site — the majority use inference("mock", ...), a deterministic, offline provider, on purpose (see Model, Ask & Answer). Real providers do exist — Anthropic and OpenAI, behind the same one function, inference(provider, ...) — and a handful of examples use one when an API key is set, skipping gracefully otherwise so the corpus stays runnable offline. A local model (Ollama, llama.cpp) isn’t built yet; the ModelProvider interface exists specifically so adding one won’t change how ask() or Answer behave once it lands.
Yes — import python "module" reaches straight into any installed Python package, since Sense’s own interpreter is itself written in Python and runs in the same process; no FFI or serialization involved. Wrap a call in a Sense action and it gets the full prepare → verify → commit treatment regardless of what the underlying Python code does. See Python Interop.
Because the goal is a language simpler than Python, not a reskin of it — and Sense’s audience explicitly includes people without a formal programming background and AI systems generating code, both of whom benefit more from fewer symbols and fewer special-case rules than from familiarity with C-family conventions. See Design Order for the full story, including the one time this got decided by parser convenience instead of on purpose, and what it cost to fix.
You get a specific error message pointing at the actual replacement (indentation instead of braces, a newline instead of a semicolon, returns instead of ->) rather than a generic parse failure. This is aimed directly at people — and LLMs — whose muscle memory defaults to other languages.
No, and this is worth being precise about: it’s cooperative hand-off between exactly two logical contexts using real OS threads as the mechanism, not a scheduler running multiple agents at once. Only one Sense thread is ever actually executing at any instant. See Pause & Resume for the full design and its honest limits.
So that ordinary scripts — and any action with no requires clause — stay completely unaffected by the existence of the policy system. Only an action that explicitly names a capability can ever be denied, and only once some policy actually says so. A stricter default-deny sandbox is real future work (see Policy and the Roadmap), deliberately not the default today.
See Contributing for how the codebase is organized, or open an issue/PR against the repository this documentation ships alongside.

Still have a question?

Philosophy

The deepest “why” questions.

Roadmap

What’s built vs. planned, in detail.