Ship and run your product. Skip the platform team.
Describe your services and what they need in a few lines of TypeScript or Python. Insular OS runs them locally, deploys them into your own cloud account, and shows you what is deployed and how it runs. Your AI assistant can do all of it too.
Every service, every store and tracing, from one command.
A read-only plan against your account, with a cost floor.
Done only when every service is up and healthy.
Removes it all, then sweeps for anything still billing.
Your code becomes a palette. Your cloud becomes a canvas.
Every service, web app and job in your code shows up ready to place in a design. Drop them into an AWS account and VPC, and each declared need is answered by a real managed service.
chat-dbdatastore, answered by RDS Postgreschat-cachekv, answered by ElastiCache Valkeyagent ^1.0.0a contract, wired to the service that serves it
Most infrastructure work is one line. Or none.
mcp: [{ handler: 'respond', tool: 'agent_respond' }]Postgres.create({ schema }) and list it under requiresSettings.create, answered in one place, secrets encryptedThis is the whole service.
A Postgres store with its schema, typed settings, a contract, and an implementation that declares what it needs. There is no separate infrastructure file.
Postgres.createA real database locally and RDS on AWS, from one declaration.Psycopg.createA real database locally and RDS on AWS, from one declaration.Settings.createTyped with Zodpydantic. A missing key stops the run before it starts.Service.contractTyped inputs and outputs that other services and agents call.requiresEverything the service needs, injected at runtime.mcpTurns a method into an MCP tool for your agents.McpExposeTurns a method into an MCP tool for your agents.
const messages = pgTable(
'messages',
{
id: text('id').primaryKey(),
authorName: text('author_name').notNull(),
authorKind: text('author_kind').notNull(),
body: text('body').notNull(),
createdAt: timestamp('created_at', { withTimezone: true }).notNull(),
},
(t) => [index('messages_created_at').on(t.createdAt)],
);
export const MessageStore = Postgres.create({ schema: { messages } });
export const AgentSettings = Settings.create(z.object({
apiKey: z.string(),
model: z.string(),
systemPrompt: z.string().default(DEFAULT_SYSTEM_PROMPT),
}));
export const AgentContract = Service.contract('agent', {
methods: {
respond: {
input: z.object({
prompt: MessageSchema,
history: z.array(MessageSchema),
}),
output: z.string(),
},
},
});
export const AgentService = Service.implement(
AgentContract,
{
requires: {
db: MessageStore,
other: OtherContract,
settings: AgentSettings,
},
mcp: [{ handler: 'respond', tool: 'agent_respond' }],
},
({ db, other, settings }) => ({
respond: async ({ history, prompt }) => {
const agent = createAgent(settings);
await Promise.all([
db.insert(MessageStore.messages).values(toMessage(prompt)),
other.doSomething(),
]);
// ... your special sauce
return '';
},
}),
);
# messages.sql holds the table and its index.
message_store = Psycopg.create(
schema=Path(__file__).parent / "messages.sql",
)
class AgentSettings(BaseModel):
api_key: str
model: str
system_prompt: str = DEFAULT_SYSTEM_PROMPT
agent_settings = Settings.create(AgentSettings)
class Respond(BaseModel):
prompt: Message
history: list[Message]
agent_contract = Service.contract(
"agent",
version="1.0.0",
methods={"respond": Method(input=Respond, output=str)},
)
@Service.implement(
agent_contract,
requires={
"db": message_store,
"other": other_contract,
"settings": agent_settings,
},
expose={"mcp": [McpExpose(tool="agent_respond", handler="respond")]},
)
def agent_service(bindings, errors):
db: Psycopg.Pool = bindings.db
settings: AgentSettings = bindings.settings
async def respond(request: Respond) -> str:
agent = create_agent(settings)
async with db.connection() as conn:
await asyncio.gather(
conn.execute(INSERT_MESSAGE, to_row(request.prompt)),
bindings.other.do_something(),
)
# ... your special sauce
return ""
return {"respond": respond}
From laptop to production, and back down again.
Your whole product, locally, with one command.
Every service, every store and the platform beside them, with tracing on from the first request.
- A real container for each store: Postgres, Valkey, MongoDB, S3.
- One front door for the web app, its routes and every service method.
- Traces, metrics and logs in a dashboard at
/.dev/console/. - Secrets are encrypted on your machine and never leave it.
One page load traced across three services, down to the SQL, in 27.5 ms. No instrumentation code.
See the plan and the cost before you deploy
The same description that runs locally deploys into your AWS account, with no Terraform written by hand.
- A real, read-only plan with a cost floor
- Multi-step changes, like a database swap, previewed step by step
- Nothing applies until you type the account id at the gate
Know what is deployed and whether it is healthy
Every deploy is recorded, and it only counts as done when the system is actually up.
- Steps, stacks, gate and event log for every deploy
- Readiness gate: every service running and healthy for two minutes straight
- A deploy that misses the gate is recorded as failed, not left half up
Say what you need. The catalog picks the technology.
A service asks for a kind of store, and the catalog decides which engine answers it in each place it runs.
- A container locally, the managed service on AWS
- Postgres, Valkey, S3 and MongoDB, with MongoDB Atlas as a cloud option
- Pin a different engine per store at deploy time
Teardown that actually stops the meter
One command removes everything a project deployed, then checks the account for anything that survived.
- Destroys each deployment from its own recorded state
- A sweep lists what is running and costing money right now
A sandbox per branch, for people and for agents
Each environment is its own Linux VM with a clone of your repo on a branch, on macOS or Linux.
- Hand it a task and a coding agent works it, ending in a commit
- Traffic leaves only through a proxy; no secret is ever inside the VM
- Commits come back to you for review; a tray app for non-terminal folks
Configuration in one place
Settings are declared once in code and answered in one place, with secrets encrypted.
- A missing setting is refused before startup, naming the key
- The same answers locally and in the cloud
Your running system speaks MCP.
An agent can read it and drive it the way an engineer would: read logs and traces, call any method, preview a change and explain what will happen. Anyone on the team can work through a complex deployment by asking their assistant.
/.dev/mcpEvery service method as an MCP tool, plus processes, logs, traces, metrics and SQL over the telemetry./.platform/mcpProjects, catalogs, designs and deployments./.dev/<service>/<method>A call surface for every method, so you can call anything by hand.Keep the tools you already use.
Nothing moves onto a new hosting platform. It deploys standard managed services into an account you own.
Deploys into your AWS account. See and keep every resource it makes.
The real services, not a proprietary layer.
Traces, metrics and logs are OpenTelemetry from the first request.
TypeScript or Python, with libraries you know.
The people you have can do the infra work.
As you add customers, the work that usually needs infra and platform hires is handled by the system.
Ship with best practices built in: a plan before every deploy, a typed gate before anything costs money, a readiness check after, and a clean teardown.
Stand up and tear down a deployment themselves, with the plan and cost in front of them, instead of waiting on engineering.
The running system and the platform are both MCP servers, so the assistant can read logs and traces, preview a change and explain it.
Ship to your customers without hiring a platform team.
We're working hands-on with a small number of teams to map their product onto Insular OS. A good fit looks like this:
- A few months from launchYou're getting close to shipping to your own customers.
- Facing the infra hireYou'd otherwise need infrastructure, application or security people.
- Starting small is fineAn internal service is a great first project.