Skip to content

mirroir mcp changelog

io.github.jfarcand/mirroir-mcp

9 changes recorded. MCP Harbor re-reads this listing from the official registry every six hours and asks the live server what it exposes, and keeps what changed between one look and the next.

  • server.json 1 field changed
    version
    0.46.0 0.48.0

  • server.json 1 field changed
    version
    0.45.0 0.46.0

  • server.json 1 field changed
    version
    0.44.0 0.45.0

  • AGENTS.md +30 −48

    https://raw.githubusercontent.com/jfarcand/mirroir-mcp/HEAD/AGENTS.md

    − worked. `type_text` waits `pasteboardSyncUs` (1.5s) and pastes at most once per− call for exactly this reason.− **Still true — back navigation.** `press_key(key: "[", modifiers: ["command"])`− | [mirroir-skills](https://github.com/jfarcand/mirroir-skills) | `../mirroir-skills` | Community skill YAML files (apps/, workflows/, testing/) |− Compiled `.compiled.json` files live alongside their source `.yaml` in the skills repo.− `rust-version = "1.96"` (edition 2024) declared in `runner/Cargo.toml` — a− Default to idiomatic Rust. The points below are the non-obvious or− project-enforced ones for `runner/`.− **Ownership & collections.** PREFER borrowing (`&T`, `&str`, `&[T]`) over owned− params unless ownership is needed; `Cow<T>` for conditionally owned data;− `AsRef<T>`/`Into<T>` for flexible APIs. Clone the `Arc`, never its contents− (`arc.clone()`, not `(*arc).clone()`) — `Arc`/`Rc` clones need no comment,− JUSTIFY non-obvious value clones. PREFER iterator chains, `filter_map()` over− `filter().map()`, `and_then()` over nested match; pre-size with− `with_capacity()` when the size is known. PREFER format args `format!("{name}")`− over concatenation; `&'static str` for string constants.− **Control flow, types & API design.** PREFER early returns with `?` over nested− matches; `if let` for single patterns, `match` for complex logic; exhaustive− match when every variant needs distinct handling, catch-all `_` only for− genuinely evolving enums. Newtype pattern for domain ids; `enum` over boolean− flags for state; `const fn`/associated consts for type-level values. `impl− Trait` in argument position for flexibility, concrete return types when callers− must name them. DESIGN APIs to be hard to misuse (parse, don't validate);− builder pattern for many-optional-field structs. PREFER small focused functions,− composition over inheritance, `std` over external crates when sufficient.− **Async, concurrency & performance.** PREFER `async fn` over `impl Future`;− `tokio::spawn` for concurrent tasks, `.await` for sequential; structured− concurrency via `join!`/`select!`; always handle `JoinHandle` results (don't− swallow panics). `Arc<RwLock<T>>` over `Arc<Mutex<T>>` for read-heavy; channels− over shared mutable state; atomics for simple counters. DOCUMENT every `Arc<T>`− with its sharing justification. `std::sync::LazyLock` for lazy statics,− `OnceLock` for one-time runtime init. AVOID premature `#[inline]`; `#[cold]` for− error paths; `const fn` for compile-time eval; `Box<T>` for recursive types.− **Modules & imports** (enforced by `clippy::absolute_paths = "deny"`). USE `use`− imports at the top of the file; AVOID inline qualified paths like− `std::collections::HashMap` mid-body. Qualified paths only for name collisions or− single-use clarity. PREFER flat module hierarchies.− ## Git Workflow: NO Pull Requests− **CRITICAL: NEVER create Pull Requests. All merges happen locally via squash merge.**− - **NEVER use `gh pr create`** or any PR creation command+ worked. `type_text` types every character it has a key for, pastes only the runs it has+ no key for, and OCR-confirms each paste on screen before the next clipboard+ write; a paste it cannot see (or cannot read back, like emoji) fails the call.+ **Back navigation.** `press_key(key: "[", modifiers: ["command"])`+ | [mirroir-skills](https://github.com/jfarcand/mirroir-skills) | `../mirroir-skills` | Community patterns and skills in Markdown — `patterns/` (`elements/`, `screens/` `*.recipe.md`, `apps/<app>/APP.md`) and `skills/` (`apps/`, `workflows/`, `testing/`, `ci/`) — plus `legacy/` holding the old YAML skills |+ A compiled skill is a `.compiled.json` written next to its source (`check-about.md` →+ `check-about.compiled.json`); the skills repo tracks none.+ `rust-version = "1.99"` (edition 2024) declared in `runner/Cargo.toml` — a+ Default to idiomatic Rust; the clippy configuration (`all`/`pedantic`/`nursery` at deny) enforces+ most of it. What this project adds:+ - Clone the `Arc`, never its contents (`arc.clone()`, not `(*arc).clone()`). `Arc`/`Rc` clones need+   no comment; justify a non-obvious value clone, and document every `Arc<T>` with why it is shared.+ - Always handle a `JoinHandle`'s result; a dropped handle swallows the task's panic.+ - `enum` over boolean flags for state; design APIs to be hard to misuse (parse, don't validate).+ - `use` imports at the top of the file, no inline qualified paths mid-body+   (`clippy::absolute_paths = "deny"`); qualified paths only for a name collision. Prefer flat+   module hierarchies.+ ## Git Workflow: No Pull Requests+ All merges happen locally via squash merge, so don't open a pull request (`gh pr create` or any+ other way) and don't suggest one.+    If the branch had a worktree, remove it in the same step, once `git status+    --porcelain` in it is empty: `git worktree remove --force <path>`. Git requires+    the flag because of the `.registre` submodule. This one command is pre-approved,+    so don't ask; every other `--force` still needs permission.+ - Never commit with `--no-verify`: the hooks are what enforce the commit format and the register gates.+ - When fixing a bug, a compile error or any other issue, don't throw the existing implementation away and rewrite it; get explicit permission first.+ ## Task Completion Protocol+ ### Before Claiming a Task Complete:+ - Ask for clarification when a requirement is ambiguous and neither the request nor the code settles it.+ **All tests must run and pass.**
  • server.json 1 field changed
    version
    0.43.0 0.44.0

  • server.json 2 fields changed
    description
    Control a real iPhone through macOS iPhone Mirroring: screenshot, tap, swipe, type. Drive a stock iPhone via iPhone Mirroring: no Developer Mode, Xcode or WDA. LLM-free skill replay.
    version
    0.41.0 0.43.0

  • server.json 1 field changed
    version
    0.40.1 0.41.0

  • server.json 1 field changed
    version
    0.40.0 0.40.1

  • server.json 1 field changed
    version
    0.39.0 0.40.0