# Soroush Yousefpour (gabrimatic) - full site text > Every public page of https://www.gabrimatic.info as one Markdown document, in reading order. Assembled at deploy time from the same per-page Markdown alternates served by content negotiation. Shorter index: https://www.gabrimatic.info/llms.txt --- Source: https://www.gabrimatic.info/ # Soroush Yousefpour (gabrimatic) Software Engineer and Tech Lead based in **Berlin, Germany**. Also known as **Hossein Yousefpour**. Specializing in cross-platform mobile development, Web3, digital identity (verifiable credentials, decentralized identifiers), Hedera Hashgraph, and AI/LLM applications. - **Website**: https://www.gabrimatic.info - **GitHub**: https://github.com/gabrimatic - **LinkedIn**: https://linkedin.com/in/gabrimatic - **Pub.dev**: https://pub.dev/publishers/gabrimatic.info/packages - **Medium**: https://medium.com/@gabrimatic - **500px**: https://500px.com/p/gabrimatic - **X (Twitter)**: https://x.com/gabrimatic **Contact:** No public email is exposed by design. LinkedIn DM is the preferred channel for recruiting and professional outreach. GitHub for issues, PRs, and technical questions about the open-source projects. **Languages:** English, German, Farsi. ## Current - Software engineer at **Affinidi** (full-time, since Jan 2025) - building the Internet of Trust; verifiable credentials, DIDComm, agentic-AI trust gateway. - Technical Team Lead at **City-Flock** (part-time, since Apr 2025) - app matching people travelling the same way into companion journeys (foot, bike, public transport); real-time matching, chat, SOS. ## Notable past work - Senior mobile engineer at **Enpal B.V.** (Berlin, full-time, Nov 2022 - Dec 2024) - Germany's market leader in residential solar and heat pumps; customer-facing Android and iOS apps for home energy systems. - Mobile Lead at **Welf GmbH** (full-time, Mar 2022 - Sep 2022) - Aloga Auction on the App Store. - Freelance consultant at **DuckDuckGoose** (Jun 2022 - Aug 2022) - European enterprise deepfake detection; mobile pipeline on Android. - Mobile Team Lead at **Hashverse** (contract, Feb 2022 - Aug 2022) - Hedera Hashgraph crypto wallet dApp; author of the **first Hedera Dart SDK** on gRPC. - Mobile Engineer at **Medis** (technology startup studio: software, hardware, informatics, robotics; full-time, Apr 2020 - Mar 2022), **Azhman Engineers** (full-time, May 2018 - Apr 2020), and **Utap Pars** (freelance, Oct 2018 - Aug 2019). ## Sections - [Journey](https://www.gabrimatic.info/journey) - Full professional timeline - [Interests](https://www.gabrimatic.info/interests) - Building things, photography, reading, and cinema - [Open Source](https://www.gabrimatic.info/opensource) - merged external open-source contributions plus GitHub repositories, auto-categorized: AI & Machine Learning, Flutter & Dart, Native & CLI Tools, Other Projects (curated priority first, then most recently pushed) - [Definition](https://www.gabrimatic.info/definition) - Meaning of "gabrimatic" - [Agent Discovery](https://www.gabrimatic.info/agents.html) - MCP, A2A, OAuth, JSON API, WebMCP - [Accessibility](https://www.gabrimatic.info/accessibility.html) - WCAG 2.2 AA conformance record for every public surface ## For AI agents This site is agent-ready: Level 5 / 5, Agent-Native on [isitagentready.com](https://isitagentready.com/www.gabrimatic.info). Full directory: [Agent Discovery](https://www.gabrimatic.info/agents.html) - **MCP server**: `POST https://www.gabrimatic.info/api/mcp` (Streamable HTTP, tools: get_profile, get_journey, get_repos, get_page_markdown) - **A2A agent**: `POST https://www.gabrimatic.info/api/a2a` (Google A2A 0.3.0) - **JSON API**: [/api/profile](https://www.gabrimatic.info/api/profile), [/api/journey](https://www.gabrimatic.info/api/journey), [/api/repos](https://www.gabrimatic.info/api/repos), [/api/contributions](https://www.gabrimatic.info/api/contributions) - **OAuth 2.1**: `POST /api/oauth/register` (dynamic client registration, no pre-registration needed) - **Markdown negotiation**: send `Accept: text/markdown` on any page route - **Full site text**: [/llms-full.txt](https://www.gabrimatic.info/llms-full.txt) - every page's Markdown in one file, for one-request context - **Discovery files**: [/.well-known/mcp/server-card.json](https://www.gabrimatic.info/.well-known/mcp/server-card.json), [/.well-known/agent-card.json](https://www.gabrimatic.info/.well-known/agent-card.json), [/.well-known/api-catalog](https://www.gabrimatic.info/.well-known/api-catalog) --- Source: https://www.gabrimatic.info/journey # My Journey ## Affinidi - Software Engineer (full-time, remote, since Jan 2025) Affinidi is building the Internet of Trust: privacy-first infrastructure and open standards like DIDComm, OID4VCI, SD-JWT, and EUDI. The goal is trust that belongs to people, businesses, and AI agents, not to any single vendor. The platform covers verifiable credentials, trust networks and registries, encrypted messaging, and identity-first trust for agentic AI. I contribute across the Affinidi Trust Network and the Trust Developer Kit. ## City-Flock - Technical Team Lead (part-time, Berlin / remote, since Apr 2025) City-Flock pairs people heading the same way at the same time: walking, cycling, or taking public transport. Some journeys feel easier with company, especially late at night. The app matches people into real-time companion journeys, with in-app chat, SOS, and trusted contacts built in. Route sharing and personal details stay under the user's control. I'm the technical team lead: I own the architecture, set the technical direction, and lead the engineers who build it. ## Enpal B.V. - Senior Mobile Engineer (full-time, Berlin, Nov 2022 - Dec 2024) I joined Enpal in Berlin in November 2022. The company is Germany's market leader in residential solar and heat pumps. Enpal builds complete home energy systems, connected through smart energy management so households run on cheaper, cleaner electricity. I worked on the customer-facing mobile layer: the Android and iOS apps that make a home energy system easy to understand, track, and control day to day. ## Welf GmbH - Mobile Lead (full-time, Mar 2022 - Sep 2022) Welf GmbH builds enterprise software and client products across several industries. I joined as mobile lead and helped ship client products across those domains. The work included CarePoint healthcare workflows, cloud-connected product features, and the App Store release path for Aloga Auction. ## DuckDuckGoose - Freelance Consultant (Jun 2022 - Aug 2022) DuckDuckGoose AI builds forensic-grade deepfake detection for identity checks. My consulting work focused on Android. I designed a mobile pipeline for testing deepfake defenses and helped harden the app architecture so security validation could move faster. ## Hashverse - Mobile Team Lead (contract, Feb 2022 - Aug 2022) Hashverse was a Hedera Hashgraph wallet dApp for tokens, NFTs, and digital assets. I led the mobile product from its earliest days. Along the way I wrote the first Hedera Dart SDK on top of gRPC, so Flutter could talk to the Hedera network directly. ## Medis - Mobile Engineer (full-time, Apr 2020 - Mar 2022) Medis is a startup studio spanning software, hardware, informatics, and robotics. As a mobile engineer, I worked on Alobodo, Wand, Elimedi and Doris Bank across Android, iOS, and web. The work was hands-on: production releases, push notifications, real-time chat, and keeping more than one app moving at a time. ## Azhman Engineers - Mobile Engineer (full-time, May 2018 - Apr 2020) At Azhman Engineers, we brought workforce management onto mobile with AghighMobile, the companion app for the company's core platform. We also built P-Barg, a Kotlin ebook reader and online store with encrypted storage. That work was early practice in native Android product delivery, encrypted local data, and store-style content flows. ## Utap Pars - Freelance Mobile Engineer (Oct 2018 - Aug 2019) At Utap Pars, we built Kifduzak and SinaMobile from the ground up, moving core platform flows onto Android so people could keep working from their phones instead of waiting for a desktop. --- Source: https://www.gabrimatic.info/interests # My Interests The things that shape how I build, notice, and think. ## Building Things I started programming when I was twelve, and building things is still the part I care about most. I like taking an idea, finding the messy edges, and turning it into something people can use. Most of my work lives in mobile apps, SDKs, digital identity, local AI tools, and agent-facing interfaces. I like that mix because everything in it ends up in someone's hands: things people tap, run, wait for, and rely on. I keep learning because the tools keep changing. New languages, runtimes, models, and protocols are useful when they make the work sharper, not when they make the story sound bigger. ## Photography Photography is one of the few things that makes me slow down. Walking through a city with a camera turns moving through a place into actually looking at it: light, faces, reflections, small moments that are easy to miss. I use whatever camera I have with me, a DSLR or a phone. The gear matters less than whether the photo keeps something that would otherwise have lasted a second. It also sharpened how I see software. A good photo and a good interface follow the same rules: composition, contrast, and knowing what to leave out. [More on 500px](https://500px.com/p/gabrimatic) ## Reading I grew up around books, long before I had words for most of the things I cared about. They gave me places to go, people to understand, and ways of thinking I still use. I also worked in bookstores for two years. That turned reading from a private habit into a daily reminder of how much is still out there. I liked the quiet, the conversations, and helping someone choose what to read next. I read because it keeps my world from getting small. And one day, when I have built everything I want to build, I would love to disappear into a small bookstore of my own: a quiet place full of books, coffee, long conversations, and people who wandered in without a plan. ## Cinema I love cinema as craft, not just entertainment. The writing, the framing, the sound, the acting, and the quiet choices behind every scene all matter to me. I keep coming back to stories about ambition, memory, and identity: films that ask what people give up for the life they imagine. I enjoy the conversation around films almost as much as the films themselves: theory, criticism, long arguments after the credits. For me a film is never just its plot. What stays is how it was made and how it made me feel. --- Source: https://www.gabrimatic.info/opensource # Open Source The live page pulls public repositories from GitHub at runtime: - https://api.github.com/users/gabrimatic/repos It also pulls merged external open-source contribution projects from GitHub Search: - https://api.github.com/search/issues?q=author:gabrimatic+type:pr+is:merged+-user:gabrimatic ## Categorization Each repo is categorized from its name, description, and primary language. The first matching category wins: 1. **AI & Machine Learning** - LLMs, MCP servers, on-device inference (Whisper, MLX, Ollama, Kokoro, Qwen, etc.) 2. **Flutter & Dart** - any Dart project or anything mentioning Flutter 3. **Native & CLI Tools** - macOS / iOS / Homebrew / shell / system utilities 4. **Other Projects** - everything else Inside each category, curated priority work appears first. Priority is bounded from 0 to 5 and is null by default. Repos with the same priority fall back to most recently pushed first. ## Browse - GitHub profile: https://github.com/gabrimatic - Pub.dev packages (Flutter / Dart): https://pub.dev/publishers/gabrimatic.info/packages ## Notable work - **`local-whisper`** - offline-first voice dictation, transcription, cleanup, and text-to-speech for macOS, iOS, and Android, with a companion Homebrew tap. - **`mcp-web-search-tool`** - MCP server that gives AI models a real-time web-search tool. - **`mcp-prose-memory`** - MCP server for prose-based persistent memory with JSON storage. - **`kokoro-mlx`** / **`qwen3-asr-mlx`** - speech models running on Apple Silicon via MLX. - **`threadstone`** - offline terminal chat for local LLMs on Apple Silicon. - **`restart_app`** - Flutter plugin for restarting an app from code. - **`otp_auth`** - Dart package for HOTP / TOTP one-time passwords. - **`passes_box`** - offline password manager with AES-256, biometric auth, and encrypted backups. - **`ocr-capture`** - macOS utility for selecting a screen region, extracting text, and copying it in one flow. For stars, last commit, and language metadata, use the GitHub API above or open the live page. ## Contributions The contribution section closes the page: one tile per external public repository where Soroush has merged pull requests. Each tile shows only the project logo and project name. Opening a tile goes to the GitHub merged-PR search for that repository with `author:gabrimatic`. --- Source: https://www.gabrimatic.info/definition # What does "gabrimatic" mean? Welcome to the world of **gabrimatic**, a name as unique as it is meaningful, born from a blend of cultural heritage, deep symbolism, and an endless love for knowledge. Looking at its roots, *gabrimatic* begins with **Gabriel** - known in Persian as **Soroush**, my name. Both refer to a messenger carrying knowledge between worlds. That idea of connection and understanding lies at the heart of *gabrimatic*. Just as Gabriel is known for delivering messages from above, *gabrimatic* carries a passion for uncovering the unknown. That brings us to the second half of the name: **matic**, inspired by the word *enigmatic*. It captures the beauty of mystery, the excitement of discovery, and the spirit of pioneers like **Alan Turing**, who famously cracked the seemingly impossible **Enigma** code. *gabrimatic* is more than just a name; it symbolizes a journey of exploring deep and challenging ideas - from **math** to **programming** to **philosophy** - transforming mysteries into understanding and bringing clarity to complexity. So, as you enter the world of *gabrimatic*, you're not merely stepping into a name, but into a **journey**: one that explores the depths of thought, where mysteries unfold and the unknown becomes understood. --- Source: https://www.gabrimatic.info/accessibility # Accessibility This is the accessibility record for gabrimatic.info. Every public surface conforms to **WCAG 2.2 Level AA**. This page is the proof: what it covers, and the checks that back it. Level AA is the conformance bar accessibility laws point to, and all ten surfaces meet it: verified before each release with a screen reader, the keyboard, and automated tooling. ## Conformance All ten surfaces are built and verified to conform to WCAG 2.2 Level AA: the seven site routes and the three static pages listed under Surfaces. The checks run before every release. | Item | Value | | --- | --- | | Standard | [WCAG 2.2](https://www.w3.org/TR/WCAG22/) | | Conformance level | AA | | Scope | All ten public surfaces | | Basis | Automated tooling and manual assistive-technology testing | ## What is adapted The resting design is the same for everyone. These adaptations turn on with your input device or your system settings, no separate mode to find. - **Keyboard.** Everything works from the keyboard alone, in a logical order, with a focus outline that stays visible. A skip link is the first stop on every page. Custom controls answer to Enter and Space, and every control is at least 44x44 pixels. - **Screen readers.** Each page exposes navigation, main, and footer landmarks, one page-title heading, and section headings in reading order. Links carry their real destination. Decorative motion, background icons, and repeated tooltips stay out of the reading order. Moving between pages moves focus and announces the new page. - **Zoom and text size.** Browser pinch-and-zoom stays enabled up to 500%. Every page still works at 200% text on a small phone, with nothing clipped, overlapped, or trapped off-screen. - **Reduced motion.** Entrance and hover animation follows your system "reduce motion" setting. With it on, movement is dropped rather than merely shortened, and the network splash renders as a static frame. - **Contrast and transparency.** Body text meets AA contrast. When you ask your system for more contrast or less transparency, the frosted-glass panels become solid so nothing depends on the blur behind them. - **Live updates.** Loading, empty, error, and retry states are announced once through polite live regions, without chattering on decorative changes. ## Surfaces Ten public surfaces are in scope. Seven are Flutter routes; three are static HTML pages that mirror the same visual language. | Surface | What it guarantees | | --- | --- | | `/` | One identity heading, a described profile image, and keyboard-reachable links with real destinations. | | `/journey` | One page heading, then one heading per timeline entry, in the same order the eye reads them. | | `/interests` | One page heading and four always-present chapters. Continuous reading, not a tab strip. | | `/opensource` | Section headings, real repository links, keyboard-operable cards, and announced loading, empty, and error states. | | `/definition` | One page heading, a clear back-to-home link, and selectable prose read as static text. | | `/accessibility` | This record as an app route. One page heading, a table of contents, and keyboard-operable rows. | | `/agents` | The agent directory as an app route. One page heading, section headings, and keyboard-operable links. | | `/agents.html` | Skip link, landmarks, logical headings, visible focus, and useful link names. | | `/accessibility.html` | The static mirror of this record. Skip link, landmarks, logical headings, and visible keyboard focus. | | `/404.html` | Skip link, a named primary action, and an accessible-contrast button. | ## How it is checked Every surface is checked two ways before each release: with automated accessibility tools, and by hand with real assistive technology. The automated tools flag the mechanical failures: a missing landmark or heading, an unreachable skip link, low-contrast text, a lost focus outline, layout that breaks at 200% text. The manual pass covers what a tool cannot judge: keyboard-only navigation, a screen-reader pass, and a look at 200% text, reduced motion, and high contrast, on every surface. The results: - **100 / 100** Lighthouse accessibility, static pages - **0 violations** axe-core on the static pages, WCAG 2.0-2.2 A/AA - **Pass** Keyboard and screen reader, every surface ## How semantics work gabrimatic.info is built in Flutter. Alongside the visual interface, the framework builds a full accessibility tree for assistive technology. When a screen reader is running, it reads every heading, landmark, link, and label on the page: the same structure a hand-written HTML page exposes. The screen-reader pass before each release walks that tree directly, so what assistive technology reads is verified first-hand. --- Source: https://www.gabrimatic.info/agents # Agent Discovery This page maps the machine-readable side of gabrimatic.info. Every important link here is live: JSON, MCP, A2A, OAuth metadata, Markdown alternates, and the policy files agents need before they start guessing. Quickstart for LLM agents: [`/llms.txt`](https://www.gabrimatic.info/llms.txt) is the shortest text path through the same surface. **Level 5 / 5, Agent-Native.** Verified by [isitagentready.com](https://isitagentready.com/www.gabrimatic.info). The score is re-scanned after deploys so it reflects the public site, not a local assumption. ## Real-time protocols - **Model Context Protocol** (Streamable HTTP, JSON-RPC 2.0): `POST https://www.gabrimatic.info/api/mcp`. Stateless MCP server for the portfolio. It implements `initialize`, `ping`, `tools/list`, `tools/call`, `resources/list`, `resources/read`, `prompts/list`, and `prompts/get`. Tools: `get_profile`, `get_journey`, `get_repos`, `get_page_markdown`. Prompts: `profile_overview`, `hiring_snapshot`, `repo_tour`. Requests must send `Accept: application/json, text/event-stream` (the streamable HTTP transport requires both). Discovery card at [`/.well-known/mcp/server-card.json`](https://www.gabrimatic.info/.well-known/mcp/server-card.json). Try it: ``` curl -s -X POST https://www.gabrimatic.info/api/mcp \ -H 'Content-Type: application/json' \ -H 'Accept: application/json, text/event-stream' \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' ``` - **Google Agent-to-Agent (A2A)** (JSON-RPC 2.0): `POST https://www.gabrimatic.info/api/a2a`. Stateless A2A endpoint. It implements `message/send`, `tasks/get`, and `tasks/cancel`. Responses complete synchronously and point back to the sources they rely on. Agent Card at [`/.well-known/agent-card.json`](https://www.gabrimatic.info/.well-known/agent-card.json). - **WebMCP** (in-page tool registration): `navigator.modelContext` on `https://www.gabrimatic.info/`. When the site loads in an MCP-aware browser, `/webmcp.js` registers `navigate`, `get_page_markdown`, and `list_repos` via `navigator.modelContext.registerTool`. ## JSON API | Resource | URL | Cache | | --- | --- | --- | | Profile | [`/api/profile`](https://www.gabrimatic.info/api/profile) | 1 hour | | Professional journey | [`/api/journey`](https://www.gabrimatic.info/api/journey) | 1 hour | | GitHub repositories (live) | [`/api/repos`](https://www.gabrimatic.info/api/repos) | edge 5 min, SWR 5 min | | Merged open-source contributions (live) | [`/api/contributions`](https://www.gabrimatic.info/api/contributions) | edge 15 min, SWR 15 min | `/api/repos` accepts `?per_page=` (1 to 100, default 100) and `?sort=` (`updated`, `created`, `pushed`, `full_name`; default `updated`). `/api/contributions` groups merged external public PRs into one project entry with a same-origin logo URL and a link to the merged PRs in that repository. All endpoints set `Access-Control-Allow-Origin: *`. The two live endpoints serve stale copies while revalidating, so the `fetchedAt` in a cached response can legitimately lag: up to ten minutes for repositories and thirty for contributions. Each payload carries its own `cache` object stating exactly that policy - check it before flagging a timestamp as stale. The JSON API is described by [`/openapi.json`](https://www.gabrimatic.info/openapi.json) (OpenAPI 3.1). `/api/profile` and `/api/journey` return an `ETag`; send `If-None-Match` to skip unchanged bodies. A bare `GET /api` returns a JSON index of every live endpoint, and an unknown `/api/*` path returns a 404 that carries the same map, so a wrong guess always shows the way back. ## OAuth 2.1 authorization server OAuth is published for agents that expect bearer-token discipline before tool calls. The read surfaces still allow anonymous access, so this is optional for normal retrieval. Dynamic Client Registration supports loopback agent callbacks and same-site callbacks; authorization requires exact `redirect_uri` matching against the registration. | Endpoint | URL | Spec | | --- | --- | --- | | Authorization server metadata | [`/.well-known/oauth-authorization-server`](https://www.gabrimatic.info/.well-known/oauth-authorization-server) | RFC 8414 | | OpenID Connect discovery | [`/.well-known/openid-configuration`](https://www.gabrimatic.info/.well-known/openid-configuration) | OIDC Core | | Protected resource metadata | [`/.well-known/oauth-protected-resource`](https://www.gabrimatic.info/.well-known/oauth-protected-resource) | RFC 9728 | | JWKS (EdDSA public key) | [`/.well-known/jwks.json`](https://www.gabrimatic.info/.well-known/jwks.json) | RFC 7517 | | Agent authentication guide | [`/auth.md`](https://www.gabrimatic.info/auth.md) | auth.md | | Web Bot Auth directory | [`/.well-known/http-message-signatures-directory`](https://www.gabrimatic.info/.well-known/http-message-signatures-directory) | Web Bot Auth + RFC 9421 | | Dynamic client registration | `POST /api/oauth/register` | RFC 7591, loopback or same-site redirect URIs | | Authorization endpoint | `GET /api/oauth/authorize` | RFC 6749 + PKCE S256, exact registered redirect match | | Token endpoint | `POST /api/oauth/token` | RFC 6749 + OAuth 2.1 | Access tokens are `EdDSA`-signed JWTs (`typ: at+jwt`), `iss = https://www.gabrimatic.info`, `aud = https://www.gabrimatic.info/api/mcp`, 1 hour TTL. Supported scopes: `mcp:read`, `mcp:tools`. ## Markdown for Agents Every page route returns Markdown when the request carries `Accept: text/markdown`. Direct `*.md` URLs are equivalent. This keeps the visual Flutter app and the retrievable text connected to the same source of truth. ``` curl -s -H 'Accept: text/markdown' https://www.gabrimatic.info/journey ``` | Route | Markdown alternate | | --- | --- | | `/` | [`/index.md`](https://www.gabrimatic.info/index.md) | | `/journey` | [`/journey.md`](https://www.gabrimatic.info/journey.md) | | `/interests` | [`/interests.md`](https://www.gabrimatic.info/interests.md) | | `/opensource` | [`/opensource.md`](https://www.gabrimatic.info/opensource.md) | | `/definition` | [`/definition.md`](https://www.gabrimatic.info/definition.md) | | `/accessibility` | [`/accessibility.md`](https://www.gabrimatic.info/accessibility.md) | | `/agents` | [`/agents.md`](https://www.gabrimatic.info/agents.md) | ## Discovery - **llms.txt** (LLM agent quickstart): [`/llms.txt`](https://www.gabrimatic.info/llms.txt). Single Markdown file in the de-facto llms.txt format. Lists the JSON endpoints, Markdown alternates, MCP/A2A discovery cards, and OAuth surfaces. It is the shortest path from a domain name to useful context. The companion [`/llms-full.txt`](https://www.gabrimatic.info/llms-full.txt) is every page's Markdown concatenated in reading order, for agents that want the whole site in one request. - **Agent Skills index**: [`/.well-known/agent-skills/index.json`](https://www.gabrimatic.info/.well-known/agent-skills/index.json). Lists each SKILL.md with a SHA-256 digest so agents can cache it and verify what they read. - **API Catalog** (RFC 9727): [`/.well-known/api-catalog`](https://www.gabrimatic.info/.well-known/api-catalog). Linkset advertising the APIs, discovery cards, and Markdown alternates exposed by the site. - **Sitemap**: [`/sitemap.xml`](https://www.gabrimatic.info/sitemap.xml). Standard XML sitemap, also advertised through RFC 8288 `Link` headers on `/`. - **RFC 8288 Link headers**: `HEAD /` returns `Link` headers for the sitemap, `/llms.txt`, the Agent Skills index, the A2A card, the MCP server card, OAuth metadata, the API catalog, the HTTP message signatures directory, the agents page, the Markdown alternate, and service links for `/api/mcp` and `/api/a2a`. - **Content Signals**: [`/robots.txt`](https://www.gabrimatic.info/robots.txt). `Content-Signal: search=yes, ai-input=yes, ai-train=no`: retrieval and user-requested answering are allowed; training use is not. Training-only crawlers are blocked by user-agent.