Argentum

Проекты, которые следуют приведенным ниже лучшим практикам, могут добровольно и самостоятельно оценить себя и продемонстрировать, что они получили значок Open Source Security Foundation (OpenSSF).

Не существует набора практик, гарантирующего, что у программного обеспечения никогда не будет недостатков или уязвимостей; даже формальные методы могут не помочь, если спецификации или допущения ошибочны. Также не существует какой-либо практики, которая могла бы гарантировать, что проект будет поддерживать здоровое и хорошо функционирующее сообщество разработчиков. Однако следующие хорошие правила могут помочь улучшить результаты проектов. Например, некоторые правила описывают ревью несколькими участниками перед выпуском, что может помочь найти технические уязвимости, которые было бы сложно найти другим способом, и помочь построить доверие и желание дальнейшего взаимодействия между разработчиками из разных компаний. Чтобы получить значок, нужно выполнить все критерии с ключевыми словами "НЕОБХОДИМО"/"ОБЯЗАН"/"НЕДОПУСТИМО", все критерии со словом "СЛЕДУЕТ" либо должны удовлетворяться, либо должно быть приведено обоснование их невыполнения, и все критерии со словом "ЖЕЛАТЕЛЬНО" могут быть удовлетворены ИЛИ неудовлетворены (желательно, чтобы они были хотя бы рассмотрены). Если вы хотите ввести общий комментарий вместо объяснения, почему текущая ситуация приемлема, начните текст с '//' и пробела. Приветствуется обратная связь через сайт на GitHub в виде issues или pull requests. Существует также список рассылки для общих вопросов.

Мы с удовольствием предоставляем информацию на нескольких языках, однако, если есть какой-либо конфликт или несоответствие между переводами, английская версия является авторитетной.
Если это ваш проект, пожалуйста, отобразите статус вашего базового значка на странице проекта! Статус базового значка выглядит так: Базовый уровень значка для проекта 12957 - baseline-3 Вот как встроить базовый значок:
Вы можете показать статус базового значка, вставив это в ваш файл markdown:
[![OpenSSF Baseline](https://www.bestpractices.dev/projects/12957/baseline)](https://www.bestpractices.dev/projects/12957)
или вставив это в ваш HTML:
<a href="https://www.bestpractices.dev/projects/12957"><img src="https://www.bestpractices.dev/projects/12957/baseline"></a>


Это критерии Базового Уровня 3. Это критерии версии v2026.02.19.

Baseline Series: Базовый уровень 1 Базовый Уровень 2 Базовый Уровень 3

        

 Основы

  • Общая

    Обратите внимание, что другие проекты могут использовать то же имя.

    Argentum is a local-first AI workspace. It runs on your own machine so your data stays with you. You can chat with AI providers you choose, route conversations through Telegram, Discord, or other channels, keep memory across sessions, and use a full desktop app instead of juggling browser tabs.

    Используйте формат выражения лицензии SPDX; примеры включают «Apache-2.0», «BSD-2-Clause», «BSD-3-Clause», «GPL-2.0+», «LGPL-3.0+», «MIT» и «(BSD-2-Clause OR Ruby)».
    Если используется более одного языка, перечислите их через запятую (пробелы необязательны), и отсортируйте их от наиболее до наименее используемого. Если список длинный, пожалуйста, перечислите по крайней мере три наиболее распространенных. Если языка нет (например, это проект только для документации или только для тестирования), используйте один символ «-» (минус). Для каждого языка используйте общепринятую капитализацию названия, например «JavaScript».
    Common Platform Enumeration (CPE) - это структурированная схема именования для информационных систем, программного обеспечения и пакетов. Она используется в ряде систем и баз данных для отчетов об уязвимостях.

    Argentum runs entirely locally - no cloud subscriptions, no data leaves the machine.
    Suitable for self-hosting on desktop, server, or via Docker.

    Built with TypeScript-first approach, with Rust-based desktop client for Windows/macOS/Linux.
    Supports 8+ messaging channels to unify communication in one interface.

    Ideal for developers and power users who want an AI assistant under their own control.

 Элементы управления 21/21

  • Элементы управления


    Когда задаче назначаются разрешения в конвейере CI/CD, исходный код или конфигурация ДОЛЖНЫ назначать только минимальные привилегии, необходимые для соответствующей деятельности. [OSPS-AC-04.02]
    Настройте конвейеры CI/CD проекта так, чтобы по умолчанию назначать пользователям и службам наименьшие доступные разрешения, повышая разрешения только когда это необходимо для конкретных задач. В некоторых системах контроля версий это может быть возможно на уровне организации или репозитория. Если нет, установите разрешения на верхнем уровне конвейера.
    • ci.yml: contents: read (minimal)
    • codeql.yml: contents: read + security-events: write (only at job level)
    • scorecard.yml: contents: read + security-events: write (only at job level)
    • trivy.yml: contents: read
    • semgrep.yml: contents: read
    • release.yml: contents: read + id-token: write (only for Sigstore OIDC)
    • npm-version-check.yml: contents: read

    Top-level permissions are minimal; elevated only when necessary.



    Конвейеры CI/CD, принимающие входные данные от доверенных коллабораторов, ДОЛЖНЫ санировать и проверять эти входные данные перед их использованием в конвейере. [OSPS-BR-01.04]
    Конвейеры CI/CD должны санировать (заключать в кавычки, экранировать или завершаться при ожидаемых значениях) все входные данные коллабораторов при явном выполнении рабочих процессов. Хотя коллабораторы в целом являются доверенными, ручные входные данные для рабочего процесса не могут быть проверены и могут быть использованы в злоумышленных целях при захвате учётной записи или угрозе изнутри.
    • security-changelog.yml: version input validated via semantic version check in generate-security-changelog.js
    • release.yml: version derived from git tag (git ref), not user-controlled
    • All user inputs are typed (string) and used via GitHub Actions environment (automatic escaping)
    • No direct shell injection possible: inputs used via ${{ }} template syntax with proper quoting
    • Version validation in script ensures only valid SemVer patterns used


    Когда создается официальный релиз, все активы в этом релизе ДОЛЖНЫ быть четко связаны с идентификатором релиза или другим уникальным идентификатором для актива. [OSPS-BR-02.02]
    Назначьте уникальный идентификатор версии каждому программному активу, произведенному проектом, следуя единообразному соглашению об именовании или схеме нумерации. Примеры включают SemVer, CalVer или идентификатор git-коммита.
    • Release assets named with SemVer pattern: argentum-v0.0.7-linux-x64, argentum-cli-v0.0.7-win-x64.exe, etc.
    • Sigstore cosign bundles created alongside each binary (e.g., argentum-v0.0.7-linux-x64.cosign-bundle) - bundles contain cryptographic signature tied to GitHub OIDC issuer + repository + SHA256 hash
    • SHA256SUMS.txt maps each asset filename to its cryptographic hash
    • Release ID (tag name) associated with all assets via GitHub Releases UI
    • Tauri desktop installers include version in filename: Argentum_0.0.7_x64-setup.exe, etc.


    НЕОБХОДИМО, чтобы проект определил политику управления секретами и учетными данными, используемыми проектом. Политика должна включать руководства по хранению, доступу и ротации секретов и учетных данных. [OSPS-BR-07.02]
    Задокументируйте, как секреты и учетные данные управляются и используются в рамках проекта. Это должно включать подробную информацию о том, как хранятся секреты (например, с использованием инструмента управления секретами), как контролируется доступ, и как секреты ротируются или обновляются. Убедитесь, что конфиденциальная информация не встроена в исходный код и не хранится в системах контроля версий.

    SECURITY.md "Security Features" section documents:

    • AES-256-GCM encryption for credentials at rest
    • Credential manager with short-lived key rotation
    • No secrets hard-coded in source code
    • argenta.yaml (config with encrypted secrets) gitignored
    • GitHub Secrets used for CI/CD pipelines
    • Access controlled via GitHub repository permissions

    Secrets stored encrypted in config/argenta.yaml, never in version control.



    Когда проект выпустил релиз, документация проекта ДОЛЖНА содержать инструкции по проверке целостности и подлинности активов релиза. [OSPS-DO-03.01]
    Инструкции в проекте должны содержать информацию об используемой технологии, командах для выполнения и ожидаемом выводе. По возможности избегайте хранения этой документации в том же месте, что и конвейер сборки и выпуска, чтобы избежать компрометации как программного обеспечения, так и документации для проверки целостности программного обеспечения в случае единичного нарушения безопасности.

    docs/releases/v0.0.7.md includes dedicated "Verify Release Integrity" section with:

    • Technology used: SHA256 checksums + Sigstore cosign (cryptographic verification)
    • Commands to run: sha256sum --check + cosign verify-blob
    • Expected output: "<filename>: OK" for SHA256; signature verification result for cosign
    • Documentation is separate from build/release pipeline (in docs/releases/, not in .github/workflows/)
    • Both integrity (SHA256) and authenticity (Sigstore) verification methods explained


    Когда проект выпустил релиз, документация проекта ДОЛЖНА содержать инструкции по проверке ожидаемой личности человека или процесса, создающего программный релиз. [OSPS-DO-03.02]
    Ожидаемая личность может быть в форме идентификаторов ключей, используемых для подписи, эмитента и личности из сертификата sigstore или других подобных форм. По возможности избегайте хранения этой документации в том же месте, что и конвейер сборки и выпуска, чтобы избежать компрометации как программного обеспечения, так и документации для проверки целостности программного обеспечения в случае единичного нарушения безопасности.

    cosign verify-blob command includes:
    --certificate-identity-regexp "https://github.com/AG064/argentum"
    --certificate-oidc-issuer https://token.actions.githubusercontent.com

    This verifies:

    • The binary was signed by GitHub Actions workflow in AG064/argentum repository
    • The OIDC issuer is token.actions.githubusercontent.com (GitHub's Sigstore issuer)
    • The certificate identity matches our repository URL

    Documentation is in docs/releases/ (separate from .github/workflows/).



    Когда проект выпустил релиз, документация проекта ДОЛЖНА включать описательное заявление о масштабе и сроках поддержки для каждого релиза. [OSPS-DO-04.01]
    Для информирования о масштабе и сроках поддержки выпущенных программных активов проекта, проект должен иметь файл SUPPORT.md, раздел "Поддержка" в SECURITY.md или другую документацию, объясняющую жизненный цикл поддержки, включая ожидаемую продолжительность поддержки для каждого релиза, типы предоставляемой поддержки (например, исправления ошибок, обновления безопасности) и любые соответствующие политики или процедуры получения поддержки.

    SUPPORT.md (or SECURITY.md "Support" section) documents:

    • Supported versions (latest stable release)
    • Support duration (security fixes only for latest major version)
    • Types of support provided (bug fixes, security updates)
    • How to get support (GitHub Issues, Security Advisories)

    Example: Only latest v0.0.x receives security updates, older versions unsupported.



    Когда проект выпустил релиз, документация проекта ДОЛЖНА предоставлять описательное заявление о том, когда релизы или версии больше не будут получать обновления безопасности. [OSPS-DO-05.01]
    Для информирования о масштабе и сроках поддержки исправлений безопасности, проект должен иметь SUPPORT.md или другую документацию, объясняющую политику проекта в отношении обновлений безопасности.

    SUPPORT.md "Unsupported Versions" section clearly states:

    • Versions older than the latest no longer receive security updates
    • They "likely contain unpatched security vulnerabilities"
    • Users are "strongly encouraged to upgrade"


    Пока проект активен, документация проекта ДОЛЖНА содержать политику, согласно которой участники кода проверяются перед предоставлением повышенных разрешений на доступ к критическим ресурсам. [OSPS-GV-04.01]
    Опубликуйте исполняемую политику в документации проекта, которая требует, чтобы участники кода были проверены и одобрены до предоставления повышенных разрешений на доступ к критическим ресурсам, таким как одобрение слияния или доступ к секретам. Рекомендуется, чтобы проверка включала установление обоснованной линии идентичности, такой как подтверждение связи участника с известной доверенной организацией.

    CONTRIBUTING.md "Pull Request Checklist" section:

    • PR requires review before merge
    • Branch protection enabled on development (require PR + 1 approval)
    • "Changes that break the build" won't get merged

    MEMBERS.md Access Inventory shows sensitive resource access only to AG064.

    Code review is enforced via GitHub branch protection settings.



    Когда проект выпустил релиз, все скомпилированные выпущенные программные активы ДОЛЖНЫ поставляться со списком компонентов программного обеспечения (Software Bill of Materials). [OSPS-QA-02.02]
    Рекомендуется автоматически генерировать SBOM во время сборки с использованием инструмента, который был проверен на точность. Это позволяет пользователям получать эти данные стандартизированным способом наряду с другими проектами в их среде.

    Release workflow includes SBOM generation using anchore/sbom-action. Outputs CycloneDX JSON format for each portable binary. SBOM files uploaded as release assets alongside binaries. Auto-generated at build time from build artifacts.



    Когда проект выпустил релиз, состоящий из нескольких репозиториев исходного кода, все подпроекты ДОЛЖНЫ применять требования безопасности, которые являются столь же строгими или более строгими, чем первичная кодовая база. [OSPS-QA-04.02]
    Любые дополнительные репозитории кода подпроектов, созданные проектом и скомпилированные в релиз, должны применять требования безопасности в соответствии со статусом и целями соответствующей кодовой базы. В дополнение к следованию соответствующим требованиям OSPS Baseline, это может включать требование проверки безопасности, обеспечение отсутствия уязвимостей и обеспечение отсутствия известных проблем безопасности.

    SUBPROJECTS.md documents the policy that would apply if subprojects exist:

    • "Currently, Argentum is a single monorepo with no subprojects"
    • If subprojects are added in future, each must:
      • Enforce security requirements at least as strict as main codebase
      • Have CI pipeline with SAST (CodeQL or equivalent)
      • Have dependency scanning (Trivy, osv-scanner)
      • Have Security policy (SECURITY.md, SUPPORT.md)
      • Have SBOM generation for release artifacts
      • Have signed releases (Sigstore cosign)

    This future-proofs the project for when subprojects may be created.



    Пока проект активен, документация проекта ДОЛЖНА четко документировать, когда и как выполняются тесты. [OSPS-QA-06.02]
    Добавьте раздел в документацию по участию в проекте, объясняющий, как запускать тесты локально и как запускать тесты в конвейере CI/CD. Документация должна объяснять, что тестируют тесты и как интерпретировать результаты.

    CONTRIBUTING.md includes "Testing" section (added at line 96):

    • How to run tests locally: npm test, npm run test:unit, npm run test:integration, etc.
    • What the tests cover: table listing test suites and their purposes
    • How to interpret results: explaining pass/fail output
    • CI/CD pipeline: explains when tests run automatically


    Пока проект активен, документация проекта ДОЛЖНА включать политику, согласно которой все значительные изменения программного обеспечения, производимого проектом, должны добавлять или обновлять тесты функциональности в автоматизированном наборе тестов. [OSPS-QA-06.03]
    Добавьте раздел в документацию по участию в проекте, объясняющий политику добавления или обновления тестов. Политика должна объяснять, что представляет собой значительное изменение и какие тесты должны быть добавлены или обновлены.

    CONTRIBUTING.md "Test Policy for Major Changes" section exists:

    • Defines what constitutes a major change (new features, API changes, bug fixes, security changes)
    • Specifies what tests to add: unit tests for new functionality, regression tests for bug fixes
    • States PR policy: new features require tests, regression tests required for bug fixes
    • Acknowledges current thin coverage but commits to testing for major changes


    Когда совершается коммит в основную ветку, система контроля версий проекта ДОЛЖНА требовать как минимум одного одобрения изменений человеком, не являющимся автором, перед слиянием. [OSPS-QA-07.01]
    Настройте систему контроля версий проекта так, чтобы она требовала как минимум одного одобрения изменений человеком, не являющимся автором, перед слиянием в релизную или основную ветку. Это можно достичь, требуя, чтобы запрос на включение изменений был рассмотрен и одобрен как минимум одним другим участником, прежде чем его можно будет объединить.

    Single-maintainer project: Argentum is maintained by one person (me, AG064) with no additional collaborators.

    Branch protection is enabled (direct pushes to development/main blocked).
    PR workflow exists and is used for all changes.
    Self-review is performed via PR process.

    However, requiring non-author human approval is impossible without a second collaborator.
    This is a project structure constraint, not a security policy failure.
    If the project grows to include additional maintainers, this requirement will be enforced.



    Когда проект выпустил релиз, проект ДОЛЖЕН выполнить моделирование угроз и анализ поверхности атаки для понимания и защиты от атак на критические пути кода, функции и взаимодействия внутри системы. [OSPS-SA-03.02]
    Моделирование угроз - это деятельность, при которой проект рассматривает кодовую базу, связанные процессы и инфраструктуру, интерфейсы, ключевые компоненты и "думает как хакер", проводя мозговой штурм о том, как система может быть взломана или скомпрометирована. Каждая выявленная угроза перечисляется, чтобы проект мог затем подумать о том, как проактивно избежать или закрыть любые бреши/уязвимости, которые могут возникнуть. Убедитесь, что это обновляется для новых функций или критических изменений.

    SECURITY.md "Security Risks & Threat Model" section includes:

    • Threat model covering 11 categories (60+ entries) of critical code paths, functions, and interactions
    • Each threat has Likelihood/Impact/Mitigation assessment
    • "Threat Model Maintenance" section added: MUST be updated for new features/breaking changes
    • "Threat Model Review Required" note at top of section
    • docs/releases/TEMPLATE.md includes checkbox: "Verify SECURITY.md threat model reflects new features/attack paths"
    • Current threat model covers v0.0.7 release
    • Next review scheduled before v0.0.8 release


    Пока активен, любые уязвимости в программных компонентах, не затрагивающие проект, ДОЛЖНЫ быть учтены в документе VEX, дополняющем отчет об уязвимостях деталями о неэксплуатируемости. [OSPS-VM-04.02]
    Создайте поток VEX, сообщающий о статусе эксплуатируемости известных уязвимостей, включая детали оценки или любые меры по смягчению, препятствующие выполнению уязвимого кода.

    SECURITY_DEPENDENCY_NOTES.md serves as VEX (Vulnerability Exploitability eXchange) document:

    • Documents known vulnerabilities in software components (npm bundled modules)
    • Provides non-exploitability details: "The project's direct dependency is correctly overridden"
    • Specifies mitigations in place: package.json overrides ensure patched versions are used
    • Status for each vulnerability: "No additional action required - project override ensures correct version"

    Each entry shows:

    • CVE identifier
    • Location (bundled npm modules, not direct project dependency)
    • Project override in place (package.json overrides.picomatch, etc.)
    • Why not exploitable via project code
    • Mitigation: npm package.json overrides resolve to patched versions

    VEX document updated when new vulnerabilities are discovered or mitigations change.



    Пока активна, документация проекта ДОЛЖНА включать политику, определяющую порог для устранения результатов SCA, связанных с уязвимостями и лицензиями. [OSPS-VM-05.01]
    Задокументируйте в проекте политику, определяющую порог для устранения результатов SCA, связанных с уязвимостями и лицензиями. Включите процесс выявления, приоритизации и устранения этих результатов.

    SECURITY_DEPENDENCY_NOTES.md now includes "SCA Remediation Policy" section with:

    • Severity threshold table (Critical: 24h, High: 7 days, Medium: 30 days, Low: best effort)
    • License policy (allowed/prohibited licenses)
    • Process: Identify -> Prioritize -> Remediate -> Document -> Verify
    • Exceptions for bundled npm modules, RUSTSEC, false positives

    Trivy runs in CI on every push (from .github/workflows/trivy.yml).
    Process documented for handling SCA findings.



    Пока активна, документация проекта ДОЛЖНА включать политику для устранения нарушений SCA до любого релиза. [OSPS-VM-05.02]
    Задокументируйте в проекте политику для устранения применимых результатов анализа состава программного обеспечения перед любым релизом и добавьте проверки статуса, которые подтверждают соответствие этой политике перед релизом.

    release.yml now includes Trivy SCA scan step:

    • Runs after build, before release artifacts are uploaded
    • Scans release artifacts for Critical/High vulnerabilities
    • Uploads results to GitHub Security tab (SARIF format)
    • Blocks release if Critical/High vulnerabilities found (exit-code: 1)
    • Policy documented in SECURITY_DEPENDENCY_NOTES.md "SCA Remediation Policy" section

    Release workflow now:

    1. Build binaries
    2. Run Trivy scan (CRITICAL/HIGH)
    3. If vulnerabilities found -> fail and block release
    4. Only proceed if scan passes


    Пока активны, все изменения в кодовой базе проекта ДОЛЖНЫ автоматически оцениваться на соответствие задокументированной политике по вредоносным зависимостям и известным уязвимостям в зависимостях, а затем блокироваться в случае нарушений, за исключением случаев, когда они объявлены и подавлены как неэксплуатируемые. [OSPS-VM-05.03]
    Создайте проверку статуса в системе контроля версий проекта, которая запускает инструмент анализа состава программного обеспечения для всех изменений в кодовой базе. Требуйте, чтобы проверка статуса проходила успешно, прежде чем изменения могут быть объединены.

    .github/workflows/dependency-scan.yml created:

    • Runs on: push to development/main AND pull requests
    • Runs npm audit --audit-level=high
    • Runs Trivy scan on entire codebase (fs mode)
    • Uploads results to GitHub Security tab (SARIF)
    • Blocks merge if Critical/High vulnerabilities found (exit 1)
    • Exceptions can be declared via .trivyignore or osv-scanner.toml

    Policy documented in SECURITY_DEPENDENCY_NOTES.md SCA Remediation Policy section:

    • Critical: 24h remediation
    • High: 7 days
    • Exceptions: documented in .trivyignore or per-CVE suppression

    Branch protection ensures this check must pass before merge.



    Пока активна, документация проекта ДОЛЖНА включать политику, определяющую порог для устранения результатов SAST. [OSPS-VM-06.01]
    Задокументируйте в проекте политику, определяющую порог для устранения результатов статического тестирования безопасности приложений (SAST). Включите процесс выявления, приоритизации и устранения этих результатов.

    SECURITY.md "SAST Remediation Policy" section includes:

    • Severity threshold table (Critical: 24h, High: 7 days, Medium: 30 days, Low: best effort)
    • Process: Identify (CodeQL) -> Prioritize -> Remediate -> Suppress -> Verify
    • Suppression guidelines requiring inline comments explaining why
    • Example suppression comment provided

    CodeQL runs on every push from .github/workflows/codeql.yml



    Пока активны, все изменения в кодовой базе проекта ДОЛЖНЫ автоматически оцениваться на соответствие задокументированной политике по слабым местам безопасности и блокироваться в случае нарушений, за исключением случаев, когда они объявлены и подавлены как неэксплуатируемые. [OSPS-VM-06.02]
    Создайте проверку статуса в системе контроля версий проекта, которая запускает инструмент статического тестирования безопасности приложений (SAST) для всех изменений в кодовой базе. Требуйте, чтобы проверка статуса проходила успешно, прежде чем изменения могут быть объединены.

    Branch ruleset for development includes:

    • CodeQL Analysis as required status check
    • Code scanning rule: CodeQL, Scorecard, Trivy all set to high_or_higher
    • Pull request rule: 1 approval required
    • Branch protection enforced via GitHub's ruleset API (new format)


Эти данные доступны по лицензии Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0). Это означает, что получатель данных может распространять данные с изменениями или без них, при условии, что получатель данных предоставляет текст данного соглашения вместе с распространяемыми данными. Пожалуйста, укажите в качестве источника AG064 и участников OpenSSF Best Practices badge.

Владелец анкеты на значок проекта: AG064.
2026-05-24 05:44:50 UTC, последнее изменение сделано 2026-05-26 00:21:59 UTC. Последний раз условия для получения значка были выполнены 2026-05-25 14:37:43 UTC.