The Problem We Just Solved
You're working across desktop and mobile. You use Universal Command on your laptop (Ctrl+Shift+A), then switch to your phone and expect the same intelligence. Or you're searching for documents and wonder why some queries feel slower than others. Behind the scenes, AiFiler was handling intent classification in three different ways—one for questions, one for commands, one for search. That's inefficient. We unified it.
We also noticed something in our mobile analytics: users were tapping buttons that were too small. WCAG 2.5.5 compliance isn't just a checkbox—it's about making sure your team can actually use AiFiler on a phone without frustration.
This update fixes both.
What Changed
Intent Heuristics Are Now Universal
Until last week, AiFiler had separate intent classifiers scattered across the codebase. One lived in lib/intentHeuristics.ts, another in question-parsing logic, another in the search parser. This meant:
- A command like "Show me contracts from Q1" might be classified differently depending on where you entered it
- The Universal Command router had to guess which handler to use
- Adding a new intent type meant updating three different files
We've consolidated everything into a single intentHeuristics.ts module that the Universal Router (lib/intelligence/universalRouter.ts) now uses for all 87 intent handlers. This is the change from commits c85565b and b8bcedc.
What this means for you: Commands are faster to route, more consistent across the app, and we can add new intents without breaking existing ones.
Mobile Tap Targets Now Meet Accessibility Standards
Your phone's buttons are now bigger. Specifically, we've ensured all interactive elements meet WCAG 2.5.5 standards—minimum 24x24 CSS pixels (44x44 physical pixels on most phones). This fixed issues where users were accidentally tapping the wrong button or missing buttons entirely on smaller screens.
The changes are in the mobile component layer (components/mobile/). You won't see a visual overhaul, but you'll feel it: buttons respond faster, menus are easier to hit, and the experience is less frustrating on a 5-inch screen.
Search Parser Now Handles Edge Cases Better
The search parser (lib/searchParser.ts) was coercing search_result.source to a string inconsistently, which caused crashes when results came back from the Anthropic API in unexpected formats. We fixed this at the provider boundary (commit 27709c8).
If you've ever had a search fail silently or return partial results, this update helps. The parser is now more defensive about data types and won't choke on edge cases.
How to Try It
On Desktop:
- Open Universal Command: Ctrl+Shift+A (or Cmd+Shift+A on Mac)
- Type any intent: "Find contracts from 2025", "Create a summary", "Show me PDFs I haven't opened"
- Notice the response is instant—no lag while AiFiler figures out what you mean
On Mobile:
- Open AiFiler on your phone
- Try tapping buttons in the document list, settings menu, or batch operations toolbar
- The tap targets are now larger and more forgiving—you'll hit them on the first try
In Search:
- Use the search bar with complex queries:
type:pdf author:"Jane Smith" after:2025-01-01 - Try searches that previously timed out or returned incomplete results
- The parser now handles edge cases without crashing
Why This Matters
Consistency. When intent classification is unified, your commands behave the same way everywhere. You're not learning three different systems—you're learning one.
Speed. Fewer code paths means faster routing. The Universal Router can now make decisions in a single pass instead of checking multiple classifiers.
Accessibility. Mobile isn't a second-class experience anymore. If your team uses AiFiler on phones, they can actually use it without squinting or tapping twice.
Reliability. The search parser is now bulletproof. Weird data formats from the API won't break your searches.
Under the Hood
If you're curious about the architecture: AiFiler now routes all intent classification through a single heuristic engine. The Universal Router calls intentHeuristics.classify() once, gets back a confidence score and handler name, and executes the right action. This is much cleaner than the previous approach where different parts of the app had to guess.
The mobile viewport telemetry we added (commit 8ee0e5b) also means we can now see exactly how users interact with AiFiler on different screen sizes. That data is already helping us prioritize the next round of mobile improvements.
What's Next
We're working on:
- Smarter context awareness. Right now, intent classification is stateless. Soon, AiFiler will remember what you were just doing and use that to make better guesses about your next command.
- Custom intent handlers. Teams will be able to define their own intents and route them to custom workflows.
- Offline intent routing. The Universal Router will work even when you're offline, queuing commands to execute when you're back online.
These are still in the design phase, but the unified intent system we just shipped is the foundation that makes all of them possible.
One More Thing
We've been running these changes through our E2E test suite (Playwright) for the last two weeks. All 11,573 unit tests pass, and the smoke tests for DOCX, XLSX, and PPTX document skills are green. This is stable code.
If you run into anything weird, let us know. The team is monitoring Sentry for any edge cases we missed.
Enjoyed this article?
Get more articles like this delivered to your inbox. No spam, unsubscribe anytime.



