Conversations Without Domains
We just made a significant architectural decision: conversations no longer require domains.
This might sound like implementation detail, but it reflects something deeper about how we think about conversations and what it means to measure thinking.
The Old Model
When we first built the Forum chat platform, the flow was straightforward:
- User states a goal: “Should I rebalance my portfolio?”
- System infers domain:
portfolio_rebalancing(immediately, in the background) - User chats
- Domain is attached to the conversation
This worked fine for straightforward cases. But real conversations drift. You start with a portfolio question, pivot to tax optimization, touch on risk tolerance, and end up somewhere unexpected. The domain inferred from your opening statement might not capture where you actually went.
And if we disabled a domain later (for research or maintenance), conversations tagged with it were orphaned.
The New Model
Conversations now exist independently. Domains are optional annotations.
Here’s what changed:
1. No automatic tagging
When you create a conversation, there’s no domain assignment. You chat freely. The conversation is complete on its own.
2. Domain inference happens at the end
When you finish a conversation, we infer domains from the full context: your goal AND every turn you took AND every point the agent raised. We see the actual arc of your thinking, not just your opening question.
3. You verify before tagging
The system suggests domains (“Portfolio Rebalancing”, “Tax Planning”), but you decide. You can select a subset, add your own labels, or skip it entirely. It’s a conversation about domains, not something that happens to you.
4. You can untag anytime
Changed your mind about a domain tag? Remove it. The conversation stands complete. You have full control over how (and whether) to annotate it.
5. Conversations work without domains
This is the core shift. We used to think of domain assignment as required—the conversation “belonged in” a domain. Now a conversation with zero domains is perfectly valid. It captures your goal and your thinking, even if we never categorize it.
Why This Matters
For Research
We get richer signal. Instead of measuring CEP from a 10-minute chat constrained to a single topic, we capture intent achievement across the full arc—including when conversations pivot. And we see how personality shows up in those pivots. That’s more real.
For Users
Less friction. You don’t have to classify your thinking upfront. You chat, and afterward there’s an optional step to add context. And if our inference misses the mark, you fix it.
For the Product
More flexibility. The many-to-many relationship between conversations and domains opens up future options: multiple CEP assessments per conversation (one per domain), domain weighting, even domain merging if users define overlapping contexts.
The Core Insight
This decision came from a deeper principle in how we’re building Conical: conversations are independent objects. Domains are annotations we apply to them, not containers they belong in.
It sounds like a subtle distinction. But it changes how you think about measurement, discovery, and the relationship between the user and the system.
When you make conversations independent—complete on their own, optional to annotate, always under user control—they stop being research instruments and start being actual conversations.
Which, it turns out, is exactly when they become most interesting to study.