NTNT (pronounced “intent”) is an agent-first programming language built for a world where AI agents write most of the code — and humans define the intent.
NTNT started as a question: if an AI agent is going to write most of your code, what does the language need to do differently?
Traditional languages are designed for humans writing code by hand. Syntax is crafted for readability. Error messages assume the author made a typo. Documentation is a nice-to-have. None of that is quite right when your primary developer is an LLM.
NTNT was built to answer: what if the language was designed from the start for human-AI collaboration? What if requirements weren’t separate from the code — they were verifiable tests woven into the development loop? What if contracts weren’t just good practice — they were how agents understood what to build?
Josh Cramer has been writing, architecting, and managing the production of code for over 25 years. He watched the industry go from raw PHP on shared hosting to TDD, containers, CI/CD, and API-first development. Every one of those shifts was built by humans to solve human problems.
Then AI agents started writing code, and he noticed something: every tool in the modern stack was created by humans to solve human problems. Is that paradigm actually optimal when machines are the ones writing the code? Or is there a different set of tools and patterns that would work better for the way agents build software?
NTNT started with those questions. Once the work began, new ones followed. What if the language could have any feature he wanted built in? What if security, auth, databases, and job queues were part of the language instead of third-party dependencies? What if the code for a typical app could be 2-3x less verbose by changing how the language works?
The effort started as experimental and exploratory, and has since grown into a language that runs numerous production apps and websites, including this one and Josh’s own site.
NTNT_LINT_MODE (static) and NTNT_TYPE_MODE (runtime). Start untyped, add types incrementally.NTNT is actively developed. Here’s where things stand:
len() works on strings, arrays, and maps. query() works on PostgreSQL, SQLite, and Redis.ntnt inspect returns structured JSON of every function, route, and contract. ntnt validate returns machine-readable errors. An agent can understand an entire codebase in one call.@implements annotations, and ntnt intent check are part of the language itself, not a separate test framework bolted on after the fact.NTNT is open source under the MIT license. The best way to contribute is to use it, break it, and file issues.