Software Engineer
Build the systems that give coding agents the context, continuity, and feedback to do useful engineering.
About Fate Labs
Writing code is only part of engineering. Understanding a codebase, carrying decisions forward, and knowing whether a change works are just as important. We’re building Estelle to bring that work into one place.
Our goal is a software factory where agents and engineering teams can build on shared repository context, memory, review, and production feedback. There are hard problems across systems, product design, and how people work with agents. We’re a small team in Toronto, and we’re looking for people who want to take those problems on with us.
About the role
As a Software Engineer at Fate Labs, you’ll work on the product and infrastructure behind Estelle. The work spans repository understanding, persistent memory, agent workflows, and the interface that brings those pieces together for developers.
We’re looking for engineers who want to understand the whole problem. You’ll move between the interface, API, and underlying data when a feature needs it, make deliberate tradeoffs, and follow your changes through testing on real repositories. You’ll help shape both what we build and how we build it.
Languages and tools
The product spans Python backend services, TypeScript with React and Next.js on the web, and SQL with PostgreSQL for persistent data. The CLI is written in Rust. Your starting area will depend on your strengths; you should be willing to follow a feature across the layers it touches.
Expect to work with Git and GitHub, HTTP APIs, automated tests, and coding-agent workflows. Depending on the problem, you may work on repository parsing and indexing, search and retrieval, background jobs, or the interface developers use to follow an agent’s work.
What you’ll do
- Design and ship features across Estelle’s code intelligence, memory, review, and agent workspace.
- Build APIs and data flows that preserve provenance, permissions, and useful context as work moves between tools and sessions.
- Make repository indexing and retrieval more dependable, including the hard cases in large or unfamiliar codebases.
- Build product interfaces that make an agent’s work, evidence, and failures understandable to the person using it.
- Write tests that reproduce real failures and distinguish a working change from a result that only looks successful.
- Investigate performance and reliability problems, and improve the shared systems rather than patching each symptom separately.
What you should be comfortable building
- A backend API or background job that validates inputs, enforces permissions, persists the right state, and makes failures observable.
- A React and TypeScript interface with useful loading, empty, error, and interaction states, connected to a real API.
- A database-backed feature with a clear schema and queries, or an indexing and retrieval improvement you can evaluate against representative repositories.
What you’ll bring
- You’ve built software you can walk us through, including what you owned, what went wrong, and what you would change.
- You’re comfortable with backend systems or product engineering and willing to work across the boundary between them.
- You understand how to reason about data models, API contracts, concurrency, and failures.
- You can read unfamiliar code, question your assumptions, and use evidence to narrow a difficult bug.
- You write clearly and take responsibility for the behavior of the software you ship.
Experience that would help
- Previous ownership of a web application, backend service, developer tool, or infrastructure component used by other people.
- Experience shipping Python or TypeScript software and working with SQL schemas, migrations, and query performance.
- Work involving search, static analysis, queues, concurrent requests, or systems that need to retain state across sessions.
- Rust experience for CLI and local-tooling work, or a willingness to learn it when a project calls for it.
Contact us.Your name, your company name, and your work email.Open the form
All fields are required unless marked optional.