{"owner":"ankitects","repo":"anki","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["CLAUDE.md"],"skills":{"CLAUDE.md":"# Claude Code Configuration\n\n> **Note:** Every command you need — building, running, testing, linting,\n> formatting — is defined as a recipe in the project `justfile`. Run\n> `just --list` to see them. Do not invoke `./ninja`, `./run`, or scripts\n> under `./tools` directly — use the `just` recipes instead.\n\n## Project Overview\n\nAnki is a spaced repetition flashcard program with a multi-layered architecture. Main components:\n\n- Web frontend: Svelte/TypeScript in ts/\n- PyQt GUI, which embeds the web components in aqt/\n- Python library which wraps our rust Layer (pylib/, with Rust module in pylib/rsbridge)\n- Core Rust layer in rslib/\n- Protobuf definitions in proto/ that are used by the different layers to\n  talk to each other.\n\n## Running Anki\n\nTo build and run Anki in development mode:\n\n```\njust run\n```\n\nThis builds pylib and qt, then launches Anki with debugging enabled. Web\nviews are served at http://localhost:40000/_anki/pages/ (e.g.,\ndeckconfig.html). Use `just run-optimized` for a release-optimized build.\nFor live-reloading during web development, run `just web-watch` in a\nseparate terminal — it monitors ts/, sass/, and qt/aqt/data/web/ and\nauto-rebuilds on changes (`just rebuild-web` triggers a one-off rebuild).\n\n## Building/checking\n\n`just check` will format the code and run the main build & checks.\nPlease do this as a final step before marking a task as completed.\n\nRun `just` (or `just --list`) to see all available commands.\n\n## Quick iteration\n\nDuring development, you can build/check subsections of our code:\n\n- Rust: `cargo check`\n- Python: `just lint` (runs mypy/ruff), and if wheel-related, `just wheels`\n- TypeScript/Svelte: `just lint` (includes check:svelte and check:typescript)\n\nLanguage-specific tests are also available: `just test-rust`, `just test-py`,\n`just test-ts`. Use `just fmt` / `just fix-fmt` for formatting and\n`just fix-lint` to auto-fix lint issues.\n\nTypeScript/Svelte browser e2e tests live in `ts/tests/e2e/` and run with\n`just test-e2e`. The harness launches a temporary Anki instance and drives\nmediasrv pages with Playwright's Chromium.\n\nBe mindful that some changes (such as modifications to .proto files) may\nneed a full build with `just check` first.\n\n## Build tooling\n\n`just` recipes wrap our build system (implemented in build/), which takes\ncare of downloading required deps and invoking our build steps. See the\nproject `justfile` for the full set of recipes.\n\n## Translations\n\nftl/ contains our Fluent translation files. We have scripts in rslib/i18n\nto auto-generate an API for Rust, TypeScript and Python so that our code can\naccess the translations in a type-safe manner. Changes should be made to\nftl/core or ftl/qt. Except for features specific to our Qt interface, prefer\nthe core module. When adding new strings, confirm the appropriate ftl file\nfirst, and try to match the existing style.\n\n## Protobuf and IPC\n\nOur build scripts use the .proto files to define our Rust library's\nnon-Rust API. pylib/rsbridge exposes that API, and \\_backend.py exposes\nsnake_case methods for each protobuf RPC that call into the API.\nSimilar tooling creates a @generated/backend TypeScript module for\ncommunicating with the Rust backend (which happens over POST requests).\n\n## Fixing errors\n\nWhen dealing with build errors or failing tests, invoke 'check' or one\nof the quick iteration commands regularly. This helps verify your changes\nare correct. To locate other instances of a problem, run the check again -\ndon't attempt to grep the codebase.\n\n## Ignores\n\nThe files in out/ are auto-generated. Mostly you should ignore that folder,\nthough you may sometimes find it useful to view out/{pylib/anki,qt/\\_aqt,ts/lib/generated} when dealing with cross-language communication or our other generated sourcecode.\n\n## Installer\n\nThe code for our Briefcase-based installer is in qt/installer, with\nseparate templates for each platform (mac-template/, linux-template/,\nwindows-template/).\n\n## Rust dependencies\n\nPrefer adding to the root workspace, and using dep.workspace = true in the individual Rust project.\n\n## Rust utilities\n\nrslib/{process,io} contain some helpers for file and process operations,\nwhich provide better error messages/context and some ergonomics. Use them\nwhen possible.\n\n## Rust error handling\n\nin rslib, use error/mod.rs's AnkiError/Result and snafu. In our other Rust modules, prefer anyhow + additional context where appropriate. Unwrapping\nin build scripts/tests is fine.\n\n## Individual preferences\n\nSee @.claude/user.md\n"},"files":{"CLAUDE.md":"# Claude Code Configuration\n\n> **Note:** Every command you need — building, running, testing, linting,\n> formatting — is defined as a recipe in the project `justfile`. Run\n> `just --list` to see them. Do not invoke `./ninja`, `./run`, or scripts\n> under `./tools` directly — use the `just` recipes instead.\n\n## Project Overview\n\nAnki is a spaced repetition flashcard program with a multi-layered architecture. Main components:\n\n- Web frontend: Svelte/TypeScript in ts/\n- PyQt GUI, which embeds the web components in aqt/\n- Python library which wraps our rust Layer (pylib/, with Rust module in pylib/rsbridge)\n- Core Rust layer in rslib/\n- Protobuf definitions in proto/ that are used by the different layers to\n  talk to each other.\n\n## Running Anki\n\nTo build and run Anki in development mode:\n\n```\njust run\n```\n\nThis builds pylib and qt, then launches Anki with debugging enabled. Web\nviews are served at http://localhost:40000/_anki/pages/ (e.g.,\ndeckconfig.html). Use `just run-optimized` for a release-optimized build.\nFor live-reloading during web development, run `just web-watch` in a\nseparate terminal — it monitors ts/, sass/, and qt/aqt/data/web/ and\nauto-rebuilds on changes (`just rebuild-web` triggers a one-off rebuild).\n\n## Building/checking\n\n`just check` will format the code and run the main build & checks.\nPlease do this as a final step before marking a task as completed.\n\nRun `just` (or `just --list`) to see all available commands.\n\n## Quick iteration\n\nDuring development, you can build/check subsections of our code:\n\n- Rust: `cargo check`\n- Python: `just lint` (runs mypy/ruff), and if wheel-related, `just wheels`\n- TypeScript/Svelte: `just lint` (includes check:svelte and check:typescript)\n\nLanguage-specific tests are also available: `just test-rust`, `just test-py`,\n`just test-ts`. Use `just fmt` / `just fix-fmt` for formatting and\n`just fix-lint` to auto-fix lint issues.\n\nTypeScript/Svelte browser e2e tests live in `ts/tests/e2e/` and run with\n`just test-e2e`. The harness launches a temporary Anki instance and drives\nmediasrv pages with Playwright's Chromium.\n\nBe mindful that some changes (such as modifications to .proto files) may\nneed a full build with `just check` first.\n\n## Build tooling\n\n`just` recipes wrap our build system (implemented in build/), which takes\ncare of downloading required deps and invoking our build steps. See the\nproject `justfile` for the full set of recipes.\n\n## Translations\n\nftl/ contains our Fluent translation files. We have scripts in rslib/i18n\nto auto-generate an API for Rust, TypeScript and Python so that our code can\naccess the translations in a type-safe manner. Changes should be made to\nftl/core or ftl/qt. Except for features specific to our Qt interface, prefer\nthe core module. When adding new strings, confirm the appropriate ftl file\nfirst, and try to match the existing style.\n\n## Protobuf and IPC\n\nOur build scripts use the .proto files to define our Rust library's\nnon-Rust API. pylib/rsbridge exposes that API, and \\_backend.py exposes\nsnake_case methods for each protobuf RPC that call into the API.\nSimilar tooling creates a @generated/backend TypeScript module for\ncommunicating with the Rust backend (which happens over POST requests).\n\n## Fixing errors\n\nWhen dealing with build errors or failing tests, invoke 'check' or one\nof the quick iteration commands regularly. This helps verify your changes\nare correct. To locate other instances of a problem, run the check again -\ndon't attempt to grep the codebase.\n\n## Ignores\n\nThe files in out/ are auto-generated. Mostly you should ignore that folder,\nthough you may sometimes find it useful to view out/{pylib/anki,qt/\\_aqt,ts/lib/generated} when dealing with cross-language communication or our other generated sourcecode.\n\n## Installer\n\nThe code for our Briefcase-based installer is in qt/installer, with\nseparate templates for each platform (mac-template/, linux-template/,\nwindows-template/).\n\n## Rust dependencies\n\nPrefer adding to the root workspace, and using dep.workspace = true in the individual Rust project.\n\n## Rust utilities\n\nrslib/{process,io} contain some helpers for file and process operations,\nwhich provide better error messages/context and some ergonomics. Use them\nwhen possible.\n\n## Rust error handling\n\nin rslib, use error/mod.rs's AnkiError/Result and snafu. In our other Rust modules, prefer anyhow + additional context where appropriate. Unwrapping\nin build scripts/tests is fine.\n\n## Individual preferences\n\nSee @.claude/user.md\n"},"items":[{"name":"CLAUDE.md","path":"CLAUDE.md","title":"CLAUDE.md","content":"# Claude Code Configuration\n\n> **Note:** Every command you need — building, running, testing, linting,\n> formatting — is defined as a recipe in the project `justfile`. Run\n> `just --list` to see them. Do not invoke `./ninja`, `./run`, or scripts\n> under `./tools` directly — use the `just` recipes instead.\n\n## Project Overview\n\nAnki is a spaced repetition flashcard program with a multi-layered architecture. Main components:\n\n- Web frontend: Svelte/TypeScript in ts/\n- PyQt GUI, which embeds the web components in aqt/\n- Python library which wraps our rust Layer (pylib/, with Rust module in pylib/rsbridge)\n- Core Rust layer in rslib/\n- Protobuf definitions in proto/ that are used by the different layers to\n  talk to each other.\n\n## Running Anki\n\nTo build and run Anki in development mode:\n\n```\njust run\n```\n\nThis builds pylib and qt, then launches Anki with debugging enabled. Web\nviews are served at http://localhost:40000/_anki/pages/ (e.g.,\ndeckconfig.html). Use `just run-optimized` for a release-optimized build.\nFor live-reloading during web development, run `just web-watch` in a\nseparate terminal — it monitors ts/, sass/, and qt/aqt/data/web/ and\nauto-rebuilds on changes (`just rebuild-web` triggers a one-off rebuild).\n\n## Building/checking\n\n`just check` will format the code and run the main build & checks.\nPlease do this as a final step before marking a task as completed.\n\nRun `just` (or `just --list`) to see all available commands.\n\n## Quick iteration\n\nDuring development, you can build/check subsections of our code:\n\n- Rust: `cargo check`\n- Python: `just lint` (runs mypy/ruff), and if wheel-related, `just wheels`\n- TypeScript/Svelte: `just lint` (includes check:svelte and check:typescript)\n\nLanguage-specific tests are also available: `just test-rust`, `just test-py`,\n`just test-ts`. Use `just fmt` / `just fix-fmt` for formatting and\n`just fix-lint` to auto-fix lint issues.\n\nTypeScript/Svelte browser e2e tests live in `ts/tests/e2e/` and run with\n`just test-e2e`. The harness launches a temporary Anki instance and drives\nmediasrv pages with Playwright's Chromium.\n\nBe mindful that some changes (such as modifications to .proto files) may\nneed a full build with `just check` first.\n\n## Build tooling\n\n`just` recipes wrap our build system (implemented in build/), which takes\ncare of downloading required deps and invoking our build steps. See the\nproject `justfile` for the full set of recipes.\n\n## Translations\n\nftl/ contains our Fluent translation files. We have scripts in rslib/i18n\nto auto-generate an API for Rust, TypeScript and Python so that our code can\naccess the translations in a type-safe manner. Changes should be made to\nftl/core or ftl/qt. Except for features specific to our Qt interface, prefer\nthe core module. When adding new strings, confirm the appropriate ftl file\nfirst, and try to match the existing style.\n\n## Protobuf and IPC\n\nOur build scripts use the .proto files to define our Rust library's\nnon-Rust API. pylib/rsbridge exposes that API, and \\_backend.py exposes\nsnake_case methods for each protobuf RPC that call into the API.\nSimilar tooling creates a @generated/backend TypeScript module for\ncommunicating with the Rust backend (which happens over POST requests).\n\n## Fixing errors\n\nWhen dealing with build errors or failing tests, invoke 'check' or one\nof the quick iteration commands regularly. This helps verify your changes\nare correct. To locate other instances of a problem, run the check again -\ndon't attempt to grep the codebase.\n\n## Ignores\n\nThe files in out/ are auto-generated. Mostly you should ignore that folder,\nthough you may sometimes find it useful to view out/{pylib/anki,qt/\\_aqt,ts/lib/generated} when dealing with cross-language communication or our other generated sourcecode.\n\n## Installer\n\nThe code for our Briefcase-based installer is in qt/installer, with\nseparate templates for each platform (mac-template/, linux-template/,\nwindows-template/).\n\n## Rust dependencies\n\nPrefer adding to the root workspace, and using dep.workspace = true in the individual Rust project.\n\n## Rust utilities\n\nrslib/{process,io} contain some helpers for file and process operations,\nwhich provide better error messages/context and some ergonomics. Use them\nwhen possible.\n\n## Rust error handling\n\nin rslib, use error/mod.rs's AnkiError/Result and snafu. In our other Rust modules, prefer anyhow + additional context where appropriate. Unwrapping\nin build scripts/tests is fine.\n\n## Individual preferences\n\nSee @.claude/user.md\n","category":"root","tokens":1126}]}