How I’d Build an AI Household Chief of Staff Without Giving It the Keys to My Life

How I’d Build an AI Household Chief of Staff Without Giving It the Keys to My Life

The current consumer-AI pitch is that an agent will run your household: read school emails, remember the dentist, schedule the plumber, and order groceries.

That sounds useful until you list what it would need to know: school communications, calendars, addresses, bills, home documents, family routines, and the schedules of people who did not install the app. It also has to distinguish “the school mentioned a fundraiser” from “we agreed to spend $50 on a fundraiser.”

I would like help with the mental load. I would not like to give a probabilistic text generator permission to quietly rearrange my family’s life.

If I were designing this for my own household, I would start smaller: a system that turns scattered information into a shared, reviewable plan. It should be good at noticing, organizing, and asking—and much more cautious about acting.

That is less cinematic than an autonomous agent. It is probably more useful.

Start with the ordinary chaos

Imagine two school-aged kids in different grades. One has a field-trip permission slip buried in a classroom email. The other has a changed pickup time, soccer practice, and a request to bring project supplies. One parent sees the newsletter; the other sees the calendar invite. Both have work calendars and may reasonably assume the other handled the detail.

None of this is hard in isolation. The information simply arrives in too many places, at different times, with ambiguous ownership. A missed deadline usually reflects an obligation falling through the cracks between inboxes, calendars, and two busy adults.

The system I would want has a boring job description:

  • collect relevant incoming information;

  • turn it into structured, traceable household records;

  • surface what needs attention; and

  • let a person decide what happens.

That is a household operations system. An LLM can be useful inside it, particularly for reading unstructured text. It is not the system by itself.

1. Capture information at the edges

The first challenge is not prompting a model. It is getting the right inputs without turning everyone into a data-entry clerk.

A high-level, open-source-friendly version might connect to a shared calendar through CalDAV, accept school email forwarded to a dedicated address, and store home documents in Nextcloud or Paperless-ngx. A workflow tool such as n8n could coordinate ingestion. The exact products matter less than the boundary: collect only sources the household explicitly chooses to share.

Forwarded school email is a good starting point. It is opt-in, creates a clear boundary around what the system can see, and contains the information that otherwise gets lost. I would not start with broad access to every inbox, message thread, or photo library. “It might find something useful” is not a permission model.

Every incoming item also needs provenance: its original source, received time, and a link back to it. If the system says a permission slip is due Tuesday, a person should be able to see why.

2. Normalize the household’s facts

A newsletter arrives as prose with dates, names, locations, exceptions, and occasionally several reasonable interpretations. An LLM can extract a proposed set of facts:

  • event: third-grade field trip;

  • date and time: Friday, 9:00 AM–2:00 PM;

  • action: return permission slip;

  • deadline: Tuesday; and

  • source: the original school email.

“Proposed” matters. Extraction should create a draft record with a confidence level or a needs review state—not silently become truth.

A relational database is a reasonable home for durable entities such as people, documents, tasks, events, vendors, and appliances. It can connect a task back to its source and preserve the distinction between a fact, an inferred action, and a decision a person made.

“Soccer practice moved to Wednesday” may be a fact. “Dad will handle pickup” is a coordination decision involving a real person’s time. The system can identify that it needs an owner; it should not invent one because somebody has fewer meetings.

Corrections should be first-class. If the system assigns a note to the wrong child, a person should fix it in seconds. Otherwise, it has created a new household chore: cleaning up after the robot.

3. Produce a plan, not another inbox

Most people do not need more notifications. They need a compact view of what matters soon and what remains unresolved.

The useful output is not a chat interface waiting for someone to ask the right question. It is a daily or weekly briefing:

Know: early pickup Friday; soccer moved to Wednesday; the field-trip form is due Tuesday.

Do: sign and return the form; find cleats before Wednesday.

Decide: who is covering Friday pickup?

The last category names a decision without pretending to make it. In a shared household, a visible unresolved question is often more valuable than an automatic answer.

The briefing should show uncertainty, too. If a newsletter says students may need a packed lunch but the day is unclear, flag it and link the source. Do not create a definitive shopping task and call that proactive.

4. Let it act carefully

This is where the product gets real. I would be comfortable letting the system create a draft reminder from a verified deadline, add a tentative calendar event marked for review, or prepare a grocery list from an approved meal plan.

I would not let it send messages, make purchases, modify someone else’s calendar, book appointments, or accept commitments without clear human approval. Those actions have external consequences and often depend on context the system cannot see.

A low-risk action is reversible and stays within the household’s system. A high-risk action can spend money, expose information, disappoint someone, or create an obligation. The policy should reflect that difference.

A simple rule: automation can prepare; people commit.

A household may explicitly allow narrow exceptions—for example, reordering the same supplies from the same vendor under a spending limit. Autonomy is not forbidden. It should be earned one auditable workflow at a time.

The hard problems are not model problems

The difficult questions are mostly ordinary systems questions with unusually personal data:

  • Consent and shared access: people need to know what is shared, who can see it, and how access changes.

  • Permissions: viewing a document, creating a task, suggesting an event, and taking an external action should not all be the same permission.

  • Retention and deletion: decide what is stored, for how long, where backups live, and how it can be removed.

  • Auditability: every extracted fact and task needs a source and edit history.

  • Failure modes: if ingestion fails or a source is uncertain, the system should say so rather than make assumptions from stale data.

These are the difference between a clever demo and something a family might trust.

Local-first is a trade-off, not a magic word

Open-source tools can keep more of this system under household control: a self-hosted document store, local database, and workflow engine reduce reliance on a consumer startup. A local or self-hosted model may reduce exposure further for some workloads.

But someone must still apply updates, secure remote access, maintain backups, and recover from failed drives or integrations. For many people, a managed service with clear data practices, strong access controls, and credible deletion policies will be the better trade.

The useful question is not “cloud or self-hosted?” It is: what data may this system hold, who operates it, and what happens when it fails?

Build the boringly useful version first

Household coordination is real work, much of it invisible until something slips. But the first useful version of an AI chief of staff does not need science-fiction agency. It needs reliable intake, a dependable system of record, useful summaries, clear sources, and firm action boundaries.

If I were building this for myself, I would begin with one narrow promise: forwarded school information and shared calendars become a daily, reviewable plan. I would measure success in fewer missed forms, fewer surprise pickup conflicts, and fewer “I thought you had that” conversations—not in the number of tasks a model completes without being asked.

The agent can earn more responsibility later. First, it should prove it can help the household see what is already in front of it.

When AI Makes Features Cheap, Judgment Matters More

When AI Makes Features Cheap, Judgment Matters More

With AI code generation, simply saying yes to new feature requests is much easier, almost too easy!

Someone asks for one more option in a workflow, a slightly different path for a group of customers, or a new setting. A developer can use AI to get a plausible pull request together very quickly. While this is useful, it is also where the problem can start.

The question is no longer just, “Can we build this?” More and more, the important question is, “Should we build this at all?”

A quick feature is not a cheap feature

Before AI, a small feature request came with some built-in friction and speed bumps. Someone had to understand the request, work through the behavior, write the code, and think about what could go wrong (edge cases!). That did not guarantee a good product decision, but it did force some thought before the feature existed.

Now it is easier to skip ahead, a request can turn into seemingly working code before the team has agreed on the problem it is trying to solve.

Consider a common request: a customer wants one more option in an existing workflow. On the surface, it may sound simple: Add a setting, show another button, or route certain users through a slightly different process. AI can help create the UI, API changes, tests, and documentation faster than before.

But that is only the first cost.

Someone still needs to ask:

  • Which customers actually need this option?

  • Does it make the normal workflow harder to understand?

  • What happens when it conflicts with another setting or an unusual customer state?

  • Who supports it when a customer is confused?

  • What happens when the business rule changes six months from now?

  • Is this a real product capability, or a one-off workaround that should be handled another way?

  • How much technical debt is this adding to our platform?

Those questions do not go away because the code was quick to generate. In some ways, they become easier to ignore. When implementation feels cheap, a feature can start to feel inevitable.

Reviewing the code is not the same as thinking through the feature

There is another issue with AI-generated code: it can be harder to review than to write.

When you write code yourself, you are usually thinking through scenarios as you go. You know which assumptions you made, which edge cases you still need to handle, and what business rule you were trying to represent.

When you review code written by someone else, you are proof-checking their reasoning. With AI, the code may look clean and complete, but there is no real reasoning to inspect. It can do exactly what was requested and still represent the wrong business rule.

A green test suite is useful. A code review is useful. Neither one, by itself, tells you whether the feature should exist or whether the business expectation was correct in the first place.

This matters most when a change affects money, eligibility, compliance, or a commitment to a customer. Those business scenarios need to be clear before the code starts moving quickly. Someone needs to own the decision, not just approve the pull request.

Part of the job is knowing when not to build

Being a good engineer or consultant is not just about finding a way to build what someone asks for. It is also about helping them decide when not to build it.

Sometimes the better answer is a simpler operational process. Sometimes an existing workflow needs to be improved instead of adding another configuration option. Sometimes the right thing to do is learn more about the customer problem before committing it to the codebase.

That is not being resistant or slowing things down. It is how you keep a product from becoming a collection of exceptions that nobody fully understands.

Every feature adds something that users need to learn, support teams need to explain, engineers need to test, and future changes need to account for. One small option may be fine. Enough small options become a system that is difficult to explain and risky to change.

That is technical debt, even if every pull request looked reasonable when it was merged.

Use the speed to make better decisions

This is not an argument to avoid AI or turn every small change into a long process. AI is great for well-understood and thought-out work. It can remove repetitive effort and help move a good idea forward much faster.

But we should not confuse a fast implementation with a good product decision.

As code gets cheaper to generate, judgment becomes more valuable. The teams that use AI well will not be the ones that add the most features. They will be the ones that use the extra speed to build the right things and are comfortable leaving the wrong things out.

Start With Postgres, Then Earn the Complexity

In the year of our lord 2026, it is still a little wild how quickly a new application turns into a shopping cart full of infrastructure.

A database, obviously. Then a search cluster, because searching is hard. A queue, because background work is hard. Redis, because speed. An analytics warehouse, because charts. A vector database, because it is 2026 and apparently every application needs to have a thoughtful conversation with its own invoices.

Before anyone has used the product, the architecture diagram looks like a cloud-vendor scavenger hunt.

Just use Postgres.

More precisely: start with Postgres, and make every additional system earn its way into the application. Not with “we may need this at scale,” but with a concrete requirement the database cannot meet.

This is not the argument that Postgres is secretly every kind of database. It is not. It is the argument that operational complexity is real, and a mature relational database can cover an almost rude amount of early and middle-stage application work.

Every box comes with chores

A new service is never just one more friendly logo on the diagram. It is another deployment, backup policy, access model, alert, upgrade path, incident mode, and bill. It is another thing to explain to the next engineer who joins the team.

The entertaining part begins when data has to exist in more than one place. The application writes a record to Postgres. A worker copies it to the search index. Another process invalidates a cache. Somebody notices the analytics event is missing. Now the team has a distributed-systems problem, which is a very sophisticated way to say “we are trying to keep our copies from disagreeing.”

That can absolutely be worthwhile. It is just not free because the managed-service setup wizard was pleasant.

Postgres lets a team postpone much of that ceremony. It gives you transactions, indexes, full-text search, structured queries, and support for semi-structured data in one well-understood place. That leaves more time to find out whether anyone wants the product.

The boring default has range

Most applications start with related records that need to be correct: users, accounts, permissions, orders, messages, audit logs, tasks. A relational database is not a compromise for that workload. It is the obvious tool.

It also has more room than people sometimes remember:

  • Search: Built-in full-text search may be plenty when users need to find things in your application, rather than search the internet with all the relevance expectations that implies.
  • Flexible attributes: JSONB is useful when a few fields genuinely vary, while the facts the application relies on stay in columns with types and constraints.
  • Background work: A table-backed job queue can be a practical answer for modest asynchronous work, especially when creating the job must be atomic with a database update.
  • Reporting: Indexes, aggregates, and materialized views can answer a surprising number of product and operational questions before a separate analytics pipeline becomes necessary.
  • Retrieval features: Vector extensions can make a small semantic-search or retrieval feature easier to prototype beside the records it is retrieving.

None of this means dedicated tools are fake. It means “could Postgres handle the first honest version?” is a much better question than “which six services should we provision before lunch?”

“We might need it later” is not a requirement

There is a familiar performance of technical seriousness where a team rejects the simple design because it might not survive the eventual day it has 100 million users, a global event stream, and a full-time platform group.

Maybe! That would be a great problem to have. It would also be useful to know whether the product needs 100 users first.

A specialized system should have a job description:

  • A dedicated search engine makes sense when relevance requires sophisticated ranking or faceting, indexing load is hurting the primary database, or search must be available independently of transactional traffic.
  • A message broker makes sense when workloads need durable fan-out, replay semantics, very high throughput, or consumers that scale independently.
  • A cache makes sense when the database cannot meet a known latency or read-volume target at an acceptable cost.
  • A warehouse makes sense when analytical queries should not compete with transactional work, or when the organization needs durable historical analysis across many systems.

Those are requirements. “We saw a conference talk” is a mood.

One system does not mean one terrible system

Using Postgres for more than the obvious tables is not permission to put every fact in one 400-column table called “data” and call it flexibility.

The fundamentals still matter, perhaps more so when one system is carrying a meaningful share of the application:

  1. Model stable facts explicitly. Use types, foreign keys, and constraints where integrity matters. Use flexible fields deliberately, not to avoid deciding what data means.
  2. Measure real queries. A slow query is a reason to inspect indexes and query plans before it is a reason to buy a different database.
  3. Make background work observable. A table-backed queue still needs retries, failure handling, and a clear answer for what happens when a worker disappears at 2:00 AM.
  4. Know the escape route. When a specialized service becomes necessary, decide what is authoritative, how data is copied, how correctness is checked, and what happens when synchronization falls behind.

The goal is not to prove that Postgres can be forced into every workload. Congratulations, nobody gets a medal for that. The goal is to avoid paying for distributed complexity until it pays you back.

AI can help with the code. It cannot un-move the data.

In 2026, Codex and Claude can do useful work on technical debt. They can help trace a legacy code path, draft a refactor, write tests, or turn an unpleasant migration plan into a less unpleasant set of pull requests. That is genuinely useful.

They cannot make a bad datastore decision disappear.

Once production data lives at meaningful scale in the wrong place, the hard part is rarely producing the migration script. It is moving data without losing it, corrupting it, leaking it, duplicating it, or letting two systems quietly disagree while the migration is in progress. Then there are backfills, validation, cutover, rollback, client compatibility, and the small matter of keeping the application available while all of this happens.

An AI assistant can help reason about those steps. It cannot turn a risky data migration into a harmless autocomplete exercise. The more systems that become authoritative for some slice of the product, the more expensive the eventual exit tends to be.

That is another reason to start simple. Choosing Postgres does not guarantee you will never migrate data; products change. It does mean you should not create a migration project merely because an early architecture diagram needed more logos.

Make complexity pay rent

Some applications need specialized infrastructure on day one. A search product with sophisticated relevance requirements is not going to bluff its way through with a basic text index. A high-volume eventing platform should not pretend a table queue is its final form. A real-time analytics product may have needs that are plainly not OLTP.

Fine. Use the right tool.

But most teams should be able to state the specific benefit they are buying: a reliability property, a measured performance target, or a product capability that the simpler design cannot deliver. If they cannot, the new box is probably architecture cosplay.

Postgres is not everything. It is just a very capable foundation that can let a team ship, learn, and defer irreversible decisions until there is evidence behind them.

That is less glamorous than a diagram with twelve logos. It is also often how you end up with an application instead of a collection of services that is very prepared to support one.

This post was sparked by Raphael Bauer’s “PostgreSQL for Everything”. His essay goes deeper on the capabilities that make the “start here” argument possible.

Codex Built My Kalshi Bot. I Still Couldn’t Find an Edge.

I, like I imagine most people on here, dream about making money while I sleep. And not the boring “market goes up” money, but something sexier: uncapped alpha because you figured something out that no one else has.

With that idea rattling around my brain, I listened to an Odd Lots episode about a group of traders consistently winning in Kalshi prediction markets.

Naturally, since “coding is solved,” I had to give building a Kalshi bot a shot.

Tl;dr: I traded around $500 and ended up about even.

That is not a tragedy. It is just a much more useful result than the version where I tell you I had an AI build a money printer over a weekend.

Picking a market

Kalshi has a lot of markets. I wanted something with good public data and a quick resolution cycle, mostly because I did not want to wait months to find out whether my very sophisticated robot had learned anything.

Weather fit pretty well. There is plenty of publicly available weather data, and the markets settle quickly enough to get feedback. So down the rabbit hole Codex and I went, building a bot to trade weather events.

The initial setup was honestly pretty impressive. Codex got the plumbing in place fast: risk controls, backtesting tools, and a slick dashboard. The kind of stuff that used to be enough work to make a small experiment feel like a real project before you even had a hypothesis worth testing.

Now it was a real project. Which meant it was time to find a real strategy.

The part nobody can code for you

This is where I got stuck, with Codex looking at me with lost-puppy eyes.

We tried a few things:

  • ML models to predict price movement
  • a market-making strategy in backtests
  • fast-following momentum trades

All of them managed to make approximately $0.

This is an important distinction that is easy to lose when the tooling is this good. Building the system and finding the edge are different problems.

The system needs data collection, order handling, position limits, monitoring, a way to replay decisions, and enough guardrails that a bad assumption does not become an expensive bad assumption. Codex was enormously helpful with that work. It makes it much easier to turn an idea into something you can actually test.

But an edge is the thing that makes the test worth running. It is a reason to believe your estimate is better than the market’s after accounting for fees, execution, timing, and everyone else who has access to the same obvious public data. “Use the weather forecast” is not really an edge when the people setting prices and trading against you can also use the weather forecast.

Backtests are very polite

The backtests were useful, but they also have a way of being polite. A strategy can look reasonable until you remember that historical data does not necessarily capture the price you could have traded at, how quickly the market moved, or whether the market had enough liquidity when you wanted it.

And then there is the more basic problem: a model that predicts something about the weather is not automatically a model that predicts a market price. The trade only works if the model finds information the price has not already absorbed, or if it identifies a repeatable way the market is mispricing that information.

I did not find that.

Trading about $500 and ending roughly flat is a small sample, not a statement about Kalshi, weather markets, or prediction markets in general. It was enough, though, to kill the idea that the hard part was connecting some APIs and writing a model.

Codex gives you leverage, not special sauce

I came away more convinced that Codex and friends give you enormous leverage if you “know what you’re doing”™.

They can get you from blank screen to a functioning experiment very quickly. They can help build the boring but necessary pieces that make it safe to test a hypothesis. They can make it cheaper to be wrong.

What they cannot reliably do is hand you the special sauce: an insight that is not already obvious, already priced in, or possibly sitting somewhere in the training data. You still need to decide what is worth measuring, why the market might be wrong, and what would prove you wrong.

That may sound less exciting than an autonomous trading bot. But it is probably the actual opportunity. If it is suddenly cheap to build and test an idea, then the bottleneck moves back to having a good idea.

Next up: time to try designing my own peptide with Codex.

When AI Is the Right Tool...and When It Isn’t

I’ve been seeing a lot of people and projects trying to use AI for everything, even if it’s not really needed, even for “Generate a random password”. Sure it can do it, I guess, but is it really the right use case for it? Sometimes people are going overboard in their use of AI just so they can say “it’s AI enabled!”.

Drawing the line between a good use of AI and when another tool, simple function, or a different approach is better can be difficult since it has such broad capabilities. I’ve started to try to come up with some general rules to follow. When you need something that is very predictable, i.e. business rules, validation, record keeping, etc., generally AI isn’t going to be the best fit. On the other hand, AI is great for when you need to deal with messy inputs from an email, PDF, image, handwriting, slightly varying formats, etc.

That is not a limitation of AI. It is what makes a good implementation work. The goal is not to turn every step into an AI decision. It is to give AI the part of the problem where ambiguity is real and use other tools where the organization needs a repeatable answer.

A couple of recent projects we’ve had can highlight this distinction.

Check processing: use AI to read the check, not run the process

Consider a check-processing application that accepts uploaded images and prepares records for an accounting or fundraising platform.

Checks are a good use case for AI. They come in different formats, handwriting can be hard to read, and important information may be in different places depending on the check. AI can identify a likely payer or donor, pull out the amount and check number, read a memo line, and return structured candidate data.

That removes a lot of manual entry. It turns a document into a useful starting point.

But recognizing the document is not the same thing as deciding what should happen next. The application still needs deterministic software to validate required fields and expected formats, check whether the check was already processed, match the payer against known records, apply account or fund mappings, and determine whether the item needs review.

Only after those checks pass should the workflow submit a record to the downstream platform. It should retain the original image, the extracted values, any corrections, and a record of what was submitted.

In this case, AI is the right tool for interpretation. A rules-based workflow is the right tool for deciding whether the interpretation is ready to become a trusted record.

Purchase-order intake: use AI to handle variation, not enforce the contract

Purchase orders have the same shape. They often arrive by email or as PDFs, and every customer has their own template. Line items, pricing, shipping details, purchase-order numbers, and customer information may all be presented differently.

AI can turn those inconsistent documents into a draft order. It can identify the likely customer, extract line items, quantities, and prices, and point out fields where it is uncertain.

That is exactly the type of variation AI is useful for. It saves someone from manually typing information from a PDF into an ERP or order-management system.

But the AI should not be responsible for enforcing the rules around the order. Deterministic software should validate that the customer exists, the SKUs are real, quantities are valid, and the price matches the customer’s contract or approved price list. It can verify that the purchase-order number has not already been used, make sure required shipping and billing information is present, and route exceptions to the right person.

Once those rules pass, the application can create the order in the ERP. If they do not pass, the system should say why it stopped and what needs to happen next.

AI helps make the document usable. The rest of the application makes the order trustworthy.

Choosing the boundary is part of the implementation

The mistake isn’t using AI, it is treating AI as the whole application because it can produce an answer that looks structured.

A good implementation gives each tool a job it is suited for:

  • AI interprets ambiguity. It reads documents, extracts likely data, classifies inputs, and identifies uncertainty.
  • Deterministic software verifies facts. It checks business rules, required fields, duplicates, permissions, mappings, and known reference data.
  • Workflow software coordinates action. It routes exceptions, requests approvals, submits to the correct downstream system, and keeps an audit trail.

That division makes the system easier to operate too. AI output can change when a model, prompt, or document format changes. Business rules may change, but they should be explicit, testable, and owned by the people responsible for the process.

When an extracted amount is wrong, someone should be able to tell whether the problem came from the document, the AI output, a validation rule, or a mapping. When a downstream system receives a record, someone should be able to explain why it was submitted.

Those details are not exciting demo features, but they are what make a workflow usable in a real organization.

Start with the problem, not the model

When evaluating an AI workflow, start by asking where the uncertainty is.

If the problem is understanding an email, PDF, image, or conversation, AI may be the right tool. If the problem is enforcing a policy, validating a known fact, selecting a system of record, or creating an auditable action, conventional software is often the better tool.

The best AI implementations are not built around the idea that the model should do everything. They are built around the idea that a workflow can use many tools well. AI handles the ambiguous part. The rest of the application provides the boundaries that make its output useful.

Long story short, choose the right tool for the part of the problem you are trying to solve versus treating everything like a nail that you hammer on with AI.