{"slug": "show-hn-mindflock-parallel-ai-coding-agents-each-in-its-own-git-worktree", "title": "Show HN: MindFlock – Parallel AI coding agents, each in its own Git worktree", "summary": "MindFlock, a new open-source desktop app, lets developers run multiple AI coding agents in parallel, each isolated in its own Git worktree and tmux session, with a guided commit-to-merge workflow and optional ticket ingestion from Shortcut, Jira, Linear, GitHub Issues, and Asana. The tool is provider-agnostic, supporting any CLI-based agent declared in a TOML file, and offers remote supervision via a mobile UI.", "body_md": "**Run a flock of AI coding agents — each in its own git worktree and tmux\nsession — supervised from one desktop app.**\n\n[What is it?](#what-is-mindflock) •\n[How is this different?](#how-is-this-different) •\n[Quick Start](#quick-start) •\n[Download](#download) •\n[How It Works](#how-it-works) •\n[Documentation](#documentation)\n\nFour agents · four git worktrees, side by side — one working, one waiting for your input, one running commit hooks, one reviewed with checks green.\n\nStaring at a terminal waiting for an AI agent to finish is mind-numbingly\nboring — so you run several at once, and then you have six terminal windows and\nno idea which one needs you. MindFlock exists to answer one question at a\nglance: **which agent needs me right now?**\n\nMindFlock turns one repository into a fleet of parallel, isolated AI coding\nsessions. Each session is a **git worktree** (or clone) plus a **tmux session**\nrunning the coding-agent CLI of your choice — **any agent, declared in a TOML\nfile** — surfaced in the desktop app as a live terminal with a guided\n**commit → push → PR → merge** workflow. An optional ingestion pipeline can\nwatch your issue tracker (Shortcut, Jira, Linear, GitHub Issues, Asana) and\nreviewed pull requests, and spin up a ready-to-work session for each —\nautomatically.\n\nParallel-agent orchestrators are a crowded category, and several of them are good. Here's an honest read on where MindFlock actually differs.\n\nMindFlock |\nClaude Squad |\nConductor |\nClaude Code Agent Teams |\n|\n|---|---|---|---|---|\n| Interface | Cross-platform desktop app + phone UI |\nTerminal TUI | Native macOS app | Built into the CLI |\n| Platforms | Linux, macOS, Windows (WSL2) | macOS, Linux | macOS only | Anywhere Claude Code runs |\n| Agent CLIs | Any — declared in a TOML file |\nSeveral, bundled (Claude Code, Codex, Gemini, aider, OpenCode) | Claude Code, Codex, Cursor, OpenCode | Claude only |\n| Session isolation | git worktree + tmux | git worktree + tmux | git worktree | git worktree |\n| Git workflow | one-click commit → push → PR → merge (`gh` ) |\ncommit + push branch | per-task diff + review | manual (agent runs git) |\n| Agent-state detection | deterministic — provider-defined hooks (working / idle / needs-input) |\ninferred from the tmux pane | built-in, per supported agent | Claude-native |\n| Ticket → session ingestion | Shortcut · Jira · Linear · GitHub Issues · Asana |\n— | — | — |\n| PR-review → session ingestion | reviewed PRs become sessions |\n— | — | — |\n| Remote / phone control | tailnet + QR, full action bar |\n— | — | — |\n\nComparison as of July 2026; these tools move fast. If a cell is out of date, please open an issue or PR and we'll correct it.\n\nMindFlock is a ground-up parallel-agent workspace. A few things set it apart:\n\n**Provider-agnostic by design.** A coding agent in MindFlock is just a TOML file — binary, launch args, prompt seeding, activity-detection hooks, model pricing — so it drives*any*CLI (Claude Code, Codex, Gemini, aider, OpenCode, or one nobody's heard of) with the same working / idle / needs-input detection and token + cost tracking. Adding an agent is a config change, not a patch.**Work comes to the agents.** MindFlock can turn tickets and code review into sessions on its own: it watches your issue tracker (Shortcut, Jira, Linear, GitHub Issues, Asana) for work assigned to you, and GitHub for PRs that came back with review comments, then provisions a worktree and launches a seeded agent for each — nothing typed.**The whole git loop is guided.** Every session carries a one-click commit → push → PR → merge action bar (via`gh`\n\n) and live workflow-stage badges, so you drive the change home without leaving the app.**Supervise from anywhere.**`mindflock serve tailscale`\n\nprints a QR code; the mobile UI carries the same guided action bar, so you can unblock an agent from your phone.\n\n**When another tool may fit better:**\n\nis a native macOS (SwiftUI) app — if you're Mac-only and specifically want a native client, it's a solid pick.[Conductor](https://www.conductor.build/)**Claude Code's built-in Agent Teams + worktrees** are free and already installed. If you only ever use Claude and live in the terminal, you may not need a separate app.is a mature multi-agent TUI that also drives several CLIs. If you'd rather stay in the terminal than run a desktop app, it's the closer fit.[Claude Squad](https://github.com/smtg-ai/claude-squad)\n\n- 🎫\n**Ticket & PR-review ingestion**— watches your issue tracker (Shortcut, Jira, Linear, GitHub Issues, Asana) for assigned work and GitHub for reviewed PRs, then provisions a workspace and launches a seeded agent session for each. - 🔌\n**Provider-agnostic**— every coding-agent CLI is just a TOML file (Claude Code, Codex, Gemini, aider, OpenCode bundled; add your own). Shared hook-based activity detection (working / idle / needs-input) and token & cost tracking apply to all of them. - 🖥️\n**Desktop app**(Electron) — a draggable terminal grid with Agent / Terminal / Diff / Queue tabs per session, workflow-stage badges, and guided next-step buttons, in a window that follows each OS's own chrome conventions (native traffic lights on macOS, frameless with our own – □ ✕ elsewhere). - 📱\n**Phone UI**—`mindflock serve tailscale`\n\nprints a QR code; the mobile UI at`/m`\n\ncarries the same guided git action bar, so the full flow drives from a phone. Auth-token protected — never open to the LAN unauthenticated. - 🌳\n**Isolated workspaces**— every session gets its own git worktree, so agents never step on each other (or on you). - 🔀\n**Guided git workflow**— one-click commit → push → PR → merge, driven by the`gh`\n\nCLI. - ⚡\n**Terminal-first, too**— the`mindflock`\n\nCLI drives the same sessions as the app (`new`\n\n,`ls`\n\n,`attach`\n\n,`rm`\n\n,`open`\n\n,`events`\n\n), so terminal and UI stay one system. - 🧩\n**Extensible**— shell hooks on every session event, a`WS /api/events`\n\nstream, and in-process Python + ES-module addons.\n\n[Install first](#download) — one command — then, from zero to a supervised\nagent session (this CLI flow is verified in CI on every push by\n[ scripts/quickstart-verify.sh](/MindFlock/MindFlock/blob/main/scripts/quickstart-verify.sh)):\n\n```\nmindflock doctor                       # 1. everything installed + authenticated?\ncd ~/code/your-repo                    # 2. the repo you want the agents to work on\nmindflock serve                        # 3. start the server (the app can also do this for you)\nmindflock new . -p \"fix the failing tests\"   # 4. (new terminal) spawn a session\nmindflock ls                           # 5. watch it: TITLE REPO STATUS ACTIVITY STAGE DIFF COST\n```\n\nOpen the **MindFlock desktop app** — the session is a live terminal; each one\nis an isolated git worktree, with Diff view and guided\ncommit → push → PR → merge buttons. `mindflock attach <title>`\n\ndrops your\nterminal into the same tmux session.\n\n`mindflock serve`\n\nbinds localhost only; run `mindflock serve tailscale`\n\nto opt\ninto phone/tailnet access — an auth token + QR code are printed, and scanning\nthe QR opens the phone UI at `/m`\n\n.\n\nEach button downloads the newest release · all versions, checksums, and the Python wheel\n\n| What you get | Anything else? | |\n|---|---|---|\nWindows |\n`MindFlock-Setup.exe` — the app and the engine (which runs inside WSL2). |\nSet up WSL2 first — see the note below. With a working WSL2 distro in place, the installer does the rest. |\nmacOS |\n`MindFlock.dmg` (universal — Apple silicon & Intel). Drag to Applications. |\nNothing. First launch offers Install the engine — one click, no terminal. |\nLinux |\n`MindFlock.AppImage` . `chmod +x` it and run. |\nSame — first launch installs the engine for you. |\n\nThe app auto-starts the engine every time after that — no terminal, no manual steps. If the engine is missing, the app's waiting page says so and shows the exact command.\n\n⚠️ Windows: finish setting up WSL2 *before* you run the installer\n\n*before*you run the installer\n\nThe engine runs inside WSL2, so a Linux distribution must be **fully installed\nand launchable first** — not just `wsl --install`\n\nhalf-run. In PowerShell:\n\n```\nwsl --install     # if WSL isn't set up yet — then REBOOT your PC\nwsl -l -v         # verify a distro (e.g. Ubuntu) is listed\nwsl               # verify this drops you into a Linux shell (first run asks you to create a user), then type: exit\n```\n\nOnly once `wsl`\n\nopens a Linux shell should you run `MindFlock-Setup.exe`\n\n. A\n**partially set-up WSL** — installed but with no distro, or with a reboot still\npending — is the single most common Windows install failure.\n\n## These builds aren't from a paid developer account — what you'll see on first launch\n\nMindFlock has no Apple Developer ID or Windows Authenticode certificate (both\nare paid, per-year subscriptions). The macOS build *is* signed, but with a\nfree self-signed certificate — enough to keep macOS from re-asking for folder\npermission on every launch, not enough to satisfy Gatekeeper. So on first\nlaunch:\n\n**macOS — \"Apple could not verify MindFlock is free of malware.\"**\n\nThat dialog has no **Open** button, and the old Control-click → **Open**\nshortcut was removed in macOS Sequoia. To open it anyway (you only do this\nonce):\n\n- Drag\n**MindFlock** into your**Applications** folder and try to open it. The warning appears — click**Done** to dismiss it. - Open the menu →\n**System Settings…**→** Privacy & Security**. - Scroll down to the\n**Security** section. You'll see a line like*\"MindFlock was blocked to protect your Mac.\"*with an**Open Anyway** button next to it. Click it. - Confirm with\n**Open Anyway** again and authenticate with Touch ID or your password. MindFlock launches, and macOS remembers the choice — you won't be asked again.\n\nPrefer the terminal? This does the same thing in one line:\n\n```\nxattr -dr com.apple.quarantine /Applications/MindFlock.app\n```\n\nThe **first time** MindFlock reads a folder under Documents, Desktop,\nDownloads, or an external drive, macOS asks *\"MindFlock would like to access\nfiles…\"* — click **Allow**. Because the app is signed, that grant sticks; it\nwon't ask again for that folder.\n\n**Windows**— SmartScreen's \"Windows protected your PC\". Click** More info**→** Run anyway**.** Linux**— no prompt; AppImages aren't signed by convention.\n\nEvery release ships a `.sha256`\n\nbeside each installer (and `SHA256SUMS`\n\nfor\nthe Python artifacts), and the builds are produced in public by\n[the Release workflow](/MindFlock/MindFlock/blob/main/.github/workflows/release.yml) straight from the tag —\nso you can check both the bytes and what produced them.\n\nMost people want the [download buttons above](#download). This section is the\nsame thing spelled out, plus every other way in.\n\nTwo pieces: the **server/CLI** (runs the engine) and the **desktop app**\n(the one client, Electron — [electron/README.md](/MindFlock/MindFlock/blob/main/electron/README.md)). On\nWindows the `.exe`\n\ninstalls both; elsewhere it's two commands.\n\nOn Linux, macOS, or inside WSL on Windows (the Windows installer runs this for you, inside your default distro):\n\n```\ncurl -LsSf https://raw.githubusercontent.com/MindFlock/MindFlock/main/install.sh | sh\n```\n\nNo repo clone, no Python setup needed — the installer brings\n[uv](https://docs.astral.sh/uv/) (no root), installs the `mindflock`\n\ncommand,\nand finishes with `mindflock doctor`\n\nso anything still missing (git, tmux,\n`claude`\n\n) is listed with the exact install command for your platform.\n\nNote onit isn't a blind one — the uv installer it fetches is version-pinned and sha256-verified before it runs, and the requested branch/tag is resolved to a full commit SHA that is printed and pinned for the install, an audit trail for what actually ran. Threat model and disclosure contact:`curl | sh`\n\n:[SECURITY.md].\n\n## Prefer your own tooling? (uv / pipx / from source)\n\n```\n# uv\nuv tool install \"mindflock[web] @ git+https://github.com/MindFlock/MindFlock\"\n\n# pipx\npipx install \"mindflock[web] @ git+https://github.com/MindFlock/MindFlock\"\n\n# from a clone (contributors)\ngit clone https://github.com/MindFlock/MindFlock\ncd MindFlock\nuv sync --group web\n```\n\nUse the [download buttons](#download), grab any past build from\n[Releases](https://github.com/MindFlock/MindFlock/releases), or build it\nyourself:\n\n```\ncd electron && npm install && npm run dist\n```\n\nIt finds — and auto-starts — the server by itself.\n\n| Requirement | Notes |\n|---|---|\nOS |\nLinux, macOS (Apple silicon & Intel), Windows via WSL2 (the app runs natively on Windows; the engine lives in WSL2 — native Windows has no tmux/PTYs) |\n`git` ≥ 2.17, `tmux` ≥ 2.4 |\nOn `PATH` ; checked, with versions, by `mindflock doctor` |\n| A coding-agent CLI | `claude` (Claude Code) by default |\n`gh` (GitHub CLI) |\nFor the push/PR/merge workflow |\n| Optional | `cursor` (IDE integration), `tailscale` (phone access) |\n\n```\n ticketing service ─┐                           ┌─ desktop app (Electron)\n GitHub PR reviews  ┴─► ingestion pipeline ─┐   ├─ phone UI at /m (tailnet QR)\n                                           ▼    ▼\n                                    ┌──────────────────┐\n                                    │  session engine  │  git worktrees + tmux\n                                    │  (backend.*)     │  + provider launch\n                                    └──────────────────┘\n                                           ▲\n                            FastAPI server (backend.web)\n```\n\n| Component | Package | What it does |\n|---|---|---|\nSession engine |\n`backend.session` , `backend.config` , `backend.cmd` , `backend.log` |\nInstance lifecycle (start/pause/resume/kill), git worktree management, tmux/PTY plumbing, persisted state in `~/.mindflock/` . |\nServer + UI |\n`backend.web` |\nFastAPI server + the UI the desktop app renders: draggable terminal grid, Agent/Terminal/Diff/Queue tabs per session, workflow-stage badges with guided next-step buttons, token/cost usage, IDE integration, phone UI at `/m` , addon framework. |\nIngestion pipeline |\n`backend.ticket_ingestion` |\nPolls your ticketing service (Shortcut, Jira, Linear, GitHub Issues, Asana) for assigned work and GitHub for reviewed PRs; validates, provisions a workspace, and launches a seeded agent session per ticket / per PR. |\nProvider framework |\n`backend.providers` |\nPluggable coding-agent CLIs (Claude built in; aider/codex and others bundled; add your own via TOML). Shared hooks-based activity detection, model pricing, and rolling token/cost usage history. |\n\nSomething not working? Run `mindflock doctor`\n\nand check\n[TROUBLESHOOTING.md](/MindFlock/MindFlock/blob/main/TROUBLESHOOTING.md) — it's indexed by the exact error\ntext the tool prints.\n\nThe desktop app auto-starts the server when it isn't running; these commands are for headless/manual use:\n\n```\nmindflock serve              # localhost only (127.0.0.1) — the default\nmindflock serve tailscale    # bind 0.0.0.0: tailnet mobile URL + QR + auth token\nmindflock serve --port 9000  # custom port (default 8765)\n```\n\nRun `mindflock serve`\n\nfrom inside the git repository you want to manage — the\nstartup banner prints which repo that is (and warns if it's the MindFlock\ncheckout itself). `mindflock doctor`\n\n(also served at `GET /api/doctor`\n\n) checks\nevery dependency and prints a platform-appropriate fix for anything missing.\n\nIn the app, **+ New** creates a session (worktree + tmux + agent); click a\nsession to type into its live terminal. The phone UI lives at `/m`\n\n(scan the\nstartup QR).\n\nWith a server running, the same sessions can be driven straight from any\nterminal — the CLI talks to the server's API (auto-discovered on port 8765, or\n`--host`\n\n/`--port`\n\n/ `MINDFLOCK_HOST`\n\n/`MINDFLOCK_PORT`\n\n):\n\n```\nmindflock new                    # session on the current repo (title = basename)\nmindflock new ~/code/webapp -p \"fix the failing tests\"\nmindflock ls                     # TITLE REPO STATUS ACTIVITY STAGE DIFF COST (--json for scripts)\nmindflock attach webapp          # tmux attach to the agent's terminal (prefix ok; needs a real TTY)\nmindflock rm webapp --yes        # end a session, keep its worktree (prompts without --yes)\nmindflock open webapp            # open the workspace in the configured IDE\nmindflock events --follow        # live event stream (great for hook debugging)\n```\n\nSee [docs/cli.md](/MindFlock/MindFlock/blob/main/docs/cli.md) for the full command reference.\n\nConfigure it from the web UI's ⚙ **Settings** dialog (Ticketing / Repository /\nGitHub sections) — values are saved to `~/.mindflock/settings.json`\n\n(mode\n`0600`\n\n, never committed). No file editing needed.\n\n```\npython -m backend.ticket_ingestion  # run from the repo root\n```\n\nFor headless/scripted runs you can instead use a `config.toml`\n\n(an optional\nadvanced override): copy [ config.toml.example](/MindFlock/MindFlock/blob/main/config.toml.example) to\n\n`config.toml`\n\nand fill in your values. Every field resolves through\n`env var → ~/.mindflock/settings.json → config.toml → default`\n\n, so the\nSettings UI, an environment variable, or the file all work.Or toggle it from the web UI sidebar (**Ticket Ingestion** bar), which runs\nit as a managed subprocess and tails its log. The pipeline is a singleton per\ndirectory (`.mindflock-pipeline.lock`\n\n); a second copy exits cleanly.\n\nEvery session event (created, status/activity/stage changed, paused, deleted…) flows through a server-side event bus with three extension seams:\n\n**Shell hooks**— drop an executable in`~/.mindflock/hooks/<event>/`\n\n(env vars + JSON envelope on stdin — e.g. a desktop notification when an agent needs input).**WebSocket**— subscribe an external tool to the`WS /api/events`\n\nstream.**In-process addons**— a Python`Addon`\n\n+ an ES module the UI loads generically (the bundled**notify** addon is the worked example).\n\nSee [docs/extensions.md](/MindFlock/MindFlock/blob/main/docs/extensions.md) for the full guide.\n\n| Path | Contents |\n|---|---|\n`~/.mindflock/` |\nEngine config + session state (`config.json` , `state.json` , `worktrees/` ) and (the web Settings store: API keys, repo/ticketing config, provider + platform settings; mode `settings.json` `0600` , never committed) |\n`~/.mindflock-assistant/` |\nAssistant workspace, provider TOMLs, pricing/usage caches, scroll-speed, exit markers |\n`./config.toml` |\nOptional advanced override for the pipeline + workspace provisioning (gitignored; superseded by `settings.json` / env vars — see\n`config.toml.example` |\n`./state.json` |\nPipeline dedup state (processed stories/PRs; different file from the engine's `~/.mindflock/state.json` ) |\n`./workspaces/` |\nProvisioned story/PR workspaces, `_base_*` canonical clones, `_testmon_refresher` |\n`./logs/` |\n`pipeline.log` , `ticket-ingestion.log` |\n\nSee [docs/configuration.md](/MindFlock/MindFlock/blob/main/docs/configuration.md) for the full reference.\n\n`uv tool uninstall mindflock`\n\nremoves the venv and the `mindflock`\n\nshim, but\nnot the worktrees MindFlock registered *inside your repositories*, nor the\nactivity hooks it merged into their `.claude`\n\n/`.codex`\n\nsettings — which keep\nfiring (and keep re-creating `~/.mindflock-assistant`\n\n) after the engine is\ngone. Undo those first:\n\n```\nmindflock uninstall --dry-run   # see exactly what would be removed\nmindflock uninstall             # worktrees, hooks, scratch files (keeps settings + history)\nmindflock uninstall --purge     # …and delete ~/.mindflock + ~/.mindflock-assistant\nuv tool uninstall mindflock     # finally, the engine itself\n```\n\nOn macOS the desktop app additionally leaves `/Applications/MindFlock.app`\n\n,\n`~/Library/Application Support/MindFlock`\n\n, `~/Library/Logs/MindFlock`\n\nand\n`~/Library/Preferences/ai.mindflock.desktop.plist`\n\n. Full details in\n[docs/cli.md](/MindFlock/MindFlock/blob/main/docs/cli.md#mindflock-uninstall---purge---keep-worktrees---dry-run---yes).\n\n| Doc | Contents |\n|---|---|\n|\n\n[docs/extensions.md](/MindFlock/MindFlock/blob/main/docs/extensions.md)`/api/events`\n\nWebSocket, in-process addons, `window.mindflock`\n\nclient API[docs/configuration.md](/MindFlock/MindFlock/blob/main/docs/configuration.md)`config.toml`\n\nreference, `~/.mindflock/`\n\n+ `~/.mindflock-assistant/`\n\n, environment variables[docs/session-engine.md](/MindFlock/MindFlock/blob/main/docs/session-engine.md)[docs/cli.md](/MindFlock/MindFlock/blob/main/docs/cli.md)`mindflock`\n\nCLI: serve, doctor, uninstall, and terminal session control (new/ls/attach/rm/open/events)[docs/web-api.md](/MindFlock/MindFlock/blob/main/docs/web-api.md)[docs/web-ui.md](/MindFlock/MindFlock/blob/main/docs/web-ui.md)[docs/providers.md](/MindFlock/MindFlock/blob/main/docs/providers.md)[docs/ingestion-pipeline.md](/MindFlock/MindFlock/blob/main/docs/ingestion-pipeline.md)[docs/development.md](/MindFlock/MindFlock/blob/main/docs/development.md)\n\n```\ngit clone https://github.com/MindFlock/MindFlock\ncd MindFlock\nuv sync --group web --group dev   # web = FastAPI server deps, dev = pytest\nuv run mindflock doctor           # checks git/tmux/gh/agent CLI\nuv run mindflock serve            # localhost:8765, from a repo you want to manage\n```\n\nRun the test suite (unit + property-based [hypothesis] + integration):\n\n```\nuv run pytest\n```\n\nSee [docs/development.md](/MindFlock/MindFlock/blob/main/docs/development.md) for the full test map and\nproject layout.\n\nContributions are welcome — bug reports, docs fixes, and code alike. Please\nread [CONTRIBUTING.md](/MindFlock/MindFlock/blob/main/CONTRIBUTING.md) first. There's no CLA to sign: just\nadd a `Signed-off-by`\n\nline to your commits with `git commit -s`\n\n, certifying\nyou wrote the patch under the\n[Developer Certificate of Origin](https://developercertificate.org/).\n\nProject status — solo maintainer.MindFlock is built and maintained by one person in evenings and weekends. It is offered as-is under Apache-2.0; issues and pull requests are read and reviewed on a best-effort basis, and there is no support SLA. Bug reports (with`mindflock doctor`\n\noutput) and PRs are very welcome — just expect a hobby-project response time.\n\nIf MindFlock is useful to you, a ⭐ helps other people find it.\n\nLicensed under the [Apache License 2.0](/MindFlock/MindFlock/blob/main/LICENSE) — free and open source.\n\nThe **MindFlock** name and logo are trademarks; a license to the code is not a\nlicense to the marks. See [TRADEMARKS.md](/MindFlock/MindFlock/blob/main/TRADEMARKS.md) for the trademark\npolicy.", "url": "https://wpnews.pro/news/show-hn-mindflock-parallel-ai-coding-agents-each-in-its-own-git-worktree", "canonical_source": "https://github.com/MindFlock/MindFlock", "published_at": "2026-07-29 20:29:36+00:00", "updated_at": "2026-07-29 20:52:35.966907+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-tools"], "entities": ["MindFlock", "Claude Code", "Codex", "Gemini", "aider", "OpenCode", "GitHub", "Shortcut"], "alternates": {"html": "https://wpnews.pro/news/show-hn-mindflock-parallel-ai-coding-agents-each-in-its-own-git-worktree", "markdown": "https://wpnews.pro/news/show-hn-mindflock-parallel-ai-coding-agents-each-in-its-own-git-worktree.md", "text": "https://wpnews.pro/news/show-hn-mindflock-parallel-ai-coding-agents-each-in-its-own-git-worktree.txt", "jsonld": "https://wpnews.pro/news/show-hn-mindflock-parallel-ai-coding-agents-each-in-its-own-git-worktree.jsonld"}}