strukto-ai/mirage virtual filesystem performance (multi-file operations)
Raw Developer Origin & Technical Request
GitHub Issue
May 7, 2026
Evaluating Mirage for agent-driven access to a project corpus over Redis and S3. While reading the source we noticed that multi-file shell ops loop per-file rather than expressing a batch:
- `cat file1 file2 ...` — `for p in paths` loop calling per-file `get_file()` (`commands/builtin/redis/cat/cat.py:80` → `core/redis/read.py:35` → `resource/redis/store.py:73`).
- `grep -r ...` — recursive entry walk + per-file `_read_stream` (`commands/builtin/grep_helper.py:317`, `redis/grep/grep.py:177`).
- FUSE reads similarly per-handle (`fuse/fs.py:169` → `ops/ops.py:171`).
Both backends we're looking at have natural batched primitives the current pattern can't express:
- **Redis** — `MGET` / pipelined `GET`.
- **S3** — concurrent `GetObject` via `asyncio.gather` (already async via aiobotocore).
Different mechanisms, same opportunity: let the resource decide how to fulfill a batch of reads.
Separate small finding: the FAQ ([introduction.mdx#L340](github.com/strukto-ai/mirage... says "Reads cache per session," but the Python `Workspace` cache only activates when `resource.is_remote is True` (`workspace/workspace.py:377/421`), and `RedisResource` doesn't override `BaseResource.is_remote = False`. Either the FAQ or the resource flag could be tweaked.
A few directions you might consider — surfacing the design space, no advocacy from us:
- Resource-level batched read primitive (e.g. `read_many(paths)`) with default looped fallback; bac...
Developer Debate & Comments
No active discussions extracted for this entry yet.
Adjacent Repository Pain Points
Other highly discussed features and pain points extracted from strukto-ai/mirage.
Engagement Signals
Cross-Market Term Frequency
Quantifies the cross-market adoption of foundational terms like cat and Redis by tracking occurrence frequency across active SaaS architectures and enterprise developer debates.
SaaS Metrics