Начни здесь

skills-news: новости, которые можно проверить

Курс по пакету @dzhechkov/skills-news: как собрать новостной дайджест со ссылками на каждый источник, как между дайджестами дешёво ловить только новое, и почему в этом пакете ни одно утверждение не попадает в отчёт без подписанного происхождения.

Знакомься: Мира

Мира — участница harness-мастерской. Она уже ставила пакеты dz и провела свою первую функцию через конвейер feature-adr. Теперь ей поручили ежемесячный обзор новостей по генеративному ИИ — и выяснилось, что красивый текст без ссылок никому не нужен. Ты идёшь рядом и принимаешь те же решения, что и она.

Содержание курса

1. Зачем нужен пакет skills-news

Какую проблему решает пакет и кто такая Мира

Ключевая мысль: новостной дайджест со ссылками на источники

Привет! Этот курс — про пакет @dzhechkov/skills-news: два навыка для Claude Code, которые превращают вопрос «что нового по теме X?» в ответ, который можно проверить.

Знакомься: Мира, участница harness-мастерской. Пакеты dz она уже ставила, а свою первую функцию провела через конвейер feature-adr. Теперь ей поручили ежемесячный обзор новостей по генеративному ИИ. Первая попытка была простой: «расскажи, что нового». Ассистент выдал гладкий текст на две страницы — без единой ссылки. Руководитель прочитал и спросил: «А откуда цифра про 40%?» Ответить было нечем.

Вот эту дыру пакет и закрывает. Он делает новостной дайджест со ссылками на источники: рядом с каждым утверждением стоит ссылка, а в конце отчёта — указатель всех использованных адресов по категориям. Проверяемость здесь не украшение, а смысл всей конструкции.

Что внутри:
- news-digest — полный отчёт за период: исследование по потокам, отбор источников, аудит покрытия, сборка в Markdown (и по желанию .docx);
- news-monitor — дешёвая «дельта»: только то, что появилось с прошлого раза;
- goap-research-ed25519 — обязательный проверяющий бэкенд, который фиксирует происхождение каждого источника.

Исходники и публичное зеркало: github.com/djd1m/dz-harness.

Компромиссы. Сильная сторона: отчёт можно перепроверить по ссылкам, не веря автору на слово. Слабая: полный дайджест делает десятки поисковых запросов и занимает время — для одного точного вопроса это чрезмерно.

💬 Просто попроси.
- «Что умеет пакет skills-news?» → ассистент откроет README пакета и перескажет таблицу навыков.
- «Сделай AI-дайджест за февраль» → ассистент включит навык news-digest и уточнит период и профиль темы.

2. Установка пакета

Два пути установки и почему навыки не нужно «запускать»

Ключевая мысль: установка пакета через dz init

Мира открыла терминал. Пакет надо поставить, и путей два — они не равнозначны.

Путь первый, рекомендуемый. Установка пакета через dz init кладёт выбранные навыки прямо в конфигурацию Claude Code, и ассистент видит их сразу:

dz init --target claude-code --select news-digest,news-monitor

Разберём по частям: --target claude-code указывает, в какую среду ставим, а --select перечисляет навыки через запятую, без пробела после неё.

Путь второй, обычный npm. Команда npm install @dzhechkov/skills-news просто кладёт файлы пакета в проект. Регистрация навыков в ассистенте остаётся на тебе — годится, если ты собираешь конфигурацию вручную.

Дальше Миру ждало самое неожиданное: отдельной команды «запусти дайджест» не существует. Навыки включаются сами, когда твоя фраза совпадает с их триггерами из SKILL.md. «Сделай AI-дайджест за февраль» — и news-digest уже работает. Чтобы увидеть точные триггеры и файлы навыка, спроси dz info news-digest.

Страница пакета — npmjs.com/package/@dzhechkov/skills-news, зеркало исходников — github.com/djd1m/dz-harness.

Компромиссы. Сильная сторона dz init: одна строка — и навыки зарегистрированы. Слабая: нужен установленный dz. У npm install наоборот — никаких лишних зависимостей, зато подключение ручное.

💬 Просто попроси.
- «Поставь навыки новостей в этот проект» → ассистент выполнит установку через dz init --target claude-code --select news-digest,news-monitor.
- «Покажи триггеры news-monitor» → ассистент вызовет dz info news-monitor и перечислит фразы, по которым навык включается.

3. Два навыка: дайджест и монитор

Когда нужен полный отчёт, а когда хватит дельты

Ключевая мысль: выбор между дайджестом и монитором

Теперь у Миры два инструмента, и типичную ошибку новичка она совершила сразу: начала каждый день запускать тяжёлый.

news-digest — это полный отчёт за период. Он делает десятки поисков, проходит по всем потокам темы, проверяет покрытие и собирает документ с разделами, сводной таблицей и указателем источников. Дорого, зато исчерпывающе.

news-monitor — это дельта: «что появилось с прошлого раза?». Он смотрит узко, сравнивает найденное с тем, что уже показывал, и выдаёт короткий список новых пунктов. Дёшево, зато без общей картины.

Правильный ритм, к которому Мира пришла, выглядит так:

  1. монитор — часто (ежедневно или раз в неделю), как пульс темы;
  2. дайджест — периодически (раз в месяц или квартал), как полноценный обзор;
  3. решение о запуске дайджеста принимается по монитору: накопилось достаточно нового — значит, пора.

То есть выбор между дайджестом и монитором — это не вопрос вкуса, а вопрос того, что тебе нужно на выходе: полная картина за период или список изменений с прошлого раза.

Компромиссы. Сильная сторона пары: дорогой инструмент запускается только тогда, когда дешёвый показал, что есть повод. Слабая: два навыка надо держать в голове, и соблазн «сделать дайджест на всякий случай» никуда не девается.

💬 Просто попроси.
- «Что нового по генеративному ИИ с прошлой недели?» → ассистент включит news-monitor и покажет только новые пункты.
- «Собери полный обзор рынка электромобилей за первый квартал для руководства» → ассистент включит news-digest в квартальном режиме.

4. Профиль темы — то, что делает движок универсальным

Почему один и тот же движок работает и по ИИ, и по электромобилям

Ключевая мысль: профиль темы

Вторая задача пришла быстро: такой же обзор, но по рынку электромобилей. Мира уже приготовилась искать другой инструмент — и он не понадобился.

Движок дайджеста не знает ничего про генеративный ИИ. Всю предметную специфику несёт профиль темы — отдельный файл, который подставляется в один и тот же конвейер. В профиле лежат:

  • потоки исследования — направления, по которым ведётся поиск;
  • обязательные сущности — компании и продукты, которые нельзя не упомянуть, разбитые по важности;
  • списки наблюдения — что отслеживаем прицельно;
  • мета-источники — официальные журналы изменений и ленты релизов.

В пакете лежит готовый профиль genai-world для новостей об ИИ и шаблон _template.md, чтобы описать любую другую тему. Профиля нет вовсе? Движок выведет 4–8 потоков из самой темы и продолжит работу — просто менее прицельно.

Важная граница, и она не техническая: корпоративный и конкурентный контекст в опубликованный профиль не кладут. Такой профиль держат локально и не публикуют — то же правило, что и для внешних коммуникаций.

Компромиссы. Сильная сторона: одна методика обслуживает любую тему, а знание предметной области живёт в данных, а не в коде. Слабая: качество обзора прямо упирается в качество профиля — слабый профиль даёт слабый дайджест, и виноват будет «инструмент».

💬 Просто попроси.
- «Заведи профиль темы для рынка электромобилей» → ассистент возьмёт _template.md и заполнит потоки, сущности и мета-источники.
- «Покажи, какие потоки в профиле genai-world» → ассистент откроет профиль и перечислит их.

5. Режимы QUICK, STANDARD и QUARTERLY

Как длина периода задаёт объём работы и число чекпоинтов

Ключевая мысль: режимы quick standard quarterly

Мира спросила ровно то, что спрашивают все: «а сколько это будет длиться?» Ответ зависит от длины периода, и режим выбирается автоматически.

В навыке заданы три режима: QUICK, STANDARD и QUARTERLY. Режим определяется длиной периода, и от него зависят три вещи разом: сколько будет разделов, сколько поисковых запросов и сколько раз тебя спросят «продолжаем?».

| Режим | Период | Разделов | Поисков | Чекпоинтов |
|---|---|---|---|---|
| QUICK | до 2 недель | 3–6 | 15–35 | нет |
| STANDARD | 1–3 месяца | до максимума профиля | 40–90 | 2 |
| QUARTERLY | больше 3 месяцев | максимум профиля, топ-5 за квартал | 80–120 | 2 |

Правила проверки входа простые и жёсткие: период не назван — навык спросит; конец периода в будущем — обрежет его сегодняшним днём и скажет об этом; период больше трёх месяцев — предложит квартальный режим; две недели и меньше — сам перейдёт в QUICK.

Чекпоинт — это пауза, на которой тебе показывают промежуточный результат (сколько поисков сделано, сколько источников по уровням, какие пробелы) и ждут решения: «продолжай», «копни глубже вот здесь», «убери раздел». В QUICK пауз нет намеренно: короткий обзор не окупает остановок.

Компромиссы. Сильная сторона: объём работы соразмерен запросу, и ты не платишь за 120 поисков ради двух недель. Слабая: автоматический выбор иногда промахивается — за бурные две недели QUICK может оказаться тесноват, и режим стоит назвать вручную.

💬 Просто попроси.
- «Что нового по ИИ за последние две недели» → ассистент сам перейдёт в режим QUICK и обойдётся без чекпоинтов.
- «Сделай обзор за полгода, но подробный» → ассистент предложит режим QUARTERLY с топ-5 за квартал.

6. Четыре фазы дайджеста

Вход, исследование, синтез, вывод — и что живёт в каждой

Ключевая мысль: четыре фазы конвейера дайджеста

Мира заметила, что навык не бросается искать сразу. Сначала он выясняет, что именно ищет.

Работа разложена на четыре фазы конвейера дайджеста, и порядок здесь не украшение: каждая фаза опирается на результат предыдущей.

  1. Фаза 0 — вход. Определяются тема, профиль, период, режим, аудитория и форматы вывода; вход проверяется (нет периода — спросят, конец в будущем — обрежут).
  2. Фаза 1 — исследование. Загружается профиль, выполняются два обязательных сплошных прохода, отрабатывают потоки, источники распределяются по уровням, проверяется покрытие. В конце — первый чекпоинт.
  3. Фаза 2 — синтез. Источники сводятся вместе, разделы подбираются под объём найденного, пишутся резюме и сводная таблица. В конце — второй чекпоинт.
  4. Фаза 3 — вывод. Пишется Markdown (всегда) и, если попросили, .docx — со ссылками внутри текста и указателем источников.

Одна тонкость про фазу 2, которую легко пропустить: разделы адаптивные. Пять и больше источников — полноценный раздел с подразделами и таблицей; два-четыре — краткая заметка; ноль или один — раздел пропускается или помечается «без обновлений». Раздел не раздувается, чтобы «выглядеть солидно».

Компромиссы. Сильная сторона: у отчёта предсказуемая форма, а пропуск фазы сразу заметен. Слабая: строгий порядок мешает срезать угол, даже когда ты точно знаешь ответ заранее.

💬 Просто попроси.
- «Покажи, из каких фаз состоит дайджест» → ассистент перескажет раздел Workflow из SKILL.md.
- «Сделай обзор, но без .docx» → ассистент выполнит фазы 0–3 и остановится на Markdown.

7. Два обязательных сплошных прохода и аудит покрытия

Почему поиск по потокам недостаточен и что ловят сплошные проходы

Ключевая мысль: аудит покрытия

Мира считала, что хороший поиск — это хорошие запросы. Первый же прогон показал слабое место: она нашла всё, что искала, и не нашла того, чего не искала.

Поэтому до потоков идут два обязательных сплошных прохода:

  • проход по журналам изменений — детерминированная загрузка мета-источников профиля: официальных списков релизов и лент обновлений. Ключевые слова часто пропускают продуктовые изменения, а журнал изменений — нет;
  • широкий проход — 5–7 запросов вида «самое важное в теме за месяц» плюс агрегаторы. Он ловит сюрпризы, которые не попали ни в один поток.

После потоков включается аудит покрытия. Он проверяет по списку: каждая обязательная сущность профиля, каждое измерение темы и каждый мета-источник — либо освещены, либо явно помечены «без обновлений». Пробелы закрываются двумя-тремя дополнительными запросами.

Обрати внимание на форму этой проверки. Она не спрашивает «достаточно ли мы нашли?» — на такой вопрос всегда хочется ответить «да». Она спрашивает про каждый пункт списка отдельно, и молчание про сущность считается пробелом, а не отсутствием новостей.

Компромиссы. Сильная сторона: два прохода и аудит закрывают провал «не знаю, чего я не знаю». Слабая: они стоят запросов из общего бюджета, а на узкой теме иногда дублируют потоки.

💬 Просто попроси.
- «Проверь, что в обзоре не забыты ключевые компании» → ассистент выполнит аудит покрытия по обязательным сущностям профиля.
- «Сначала пройдись по официальным журналам изменений» → ассистент сделает проход по мета-источникам до потоков.

8. Четыре уровня достоверности источников

Как уровень источника влияет на число подтверждений

Ключевая мысль: четыре уровня достоверности источников

Мира собрала пятнадцать ссылок и хотела просто перечислить их. Навык устроен иначе: он сначала спрашивает, сколько каждая из них весит.

В методике заданы четыре уровня достоверности источников:

  1. официальный — сайт компании, релиз, журнал изменений, документация;
  2. ведущие агентства — крупные новостные агентства с редакционным контролем;
  3. качественная отраслевая пресса — специализированные издания;
  4. блоги и прочее — личные заметки, форумы, агрегаторы.

Правило простое и полезное: чем выше уровень, тем меньше подтверждений нужно. Официальный релиз о выходе продукта не требует трёх независимых пересказов. Утверждение из блога — требует.

Отдельно стоит запрет: выдумывать нельзя ни при каких условиях. Если после пяти поисков набралось меньше трёх источников, полагается переформулировать запрос, сходить на известные площадки напрямую или честно написать «без обновлений» / «ограниченные данные». Пустой честный раздел — нормальный результат.

И ещё: уровень — не единственный фильтр. Каждый оставленный источник обязан пройти ещё и проверку бэкендом, о котором пойдёт речь в следующем разделе. Уровень и подпись работают вместе, а не по очереди.

Компромиссы. Сильная сторона: у отчёта появляется явная шкала веса, и слабый источник не выглядит как сильный. Слабая: разметка по уровням стоит времени и иногда спорна — отраслевое издание бывает точнее агентства.

💬 Просто попроси.
- «Разложи найденные источники по уровням достоверности» → ассистент применит четыре тира и покажет, где не хватает подтверждений.
- «Тут только блоги — что делать?» → ассистент предложит поискать первоисточник или явно пометить данные ограниченными.

9. Обязательный проверяющий бэкенд

Почему сбор источников идёт только через goap-research-ed25519

Ключевая мысль: goap-research-ed25519 как обязательный бэкенд

Остановись на секунду и спроси себя: откуда ты знаешь, что ассистент действительно открыл ссылку, а не пересказал её по памяти? Мира этого вопроса сначала не задавала — и зря.

В этом пакете сбор источников идёт только через третий, встроенный навык: goap-research-ed25519 как обязательный бэкенд. Он планирует исследование и на каждый источник выпускает запись о происхождении, подписанную ключом Ed25519 — это криптографическая подпись, которая ломается при любом изменении подписанного текста.

Что это даёт на практике:

  • источник без подписи не попадает в отчёт — он либо исключается, либо помечается как непроверенный;
  • подмена записи задним числом видна — изменённая запись перестаёт проходить проверку;
  • цепочка ссылок связана — каждая производная запись помнит содержимое родительской, поэтому перестановка, замена или редактирование факта в цепочке обнаруживаются.

Чего это НЕ даёт — и это важнее, чем список возможностей. Подпись доказывает, что запись не менялась после подписания. Она не доказывает, что источник авторитетен, что вывод следует из текста и что автор его понял. Происхождение — не истина.

Важная деталь про доверенных издателей: список закреплённых ключей по умолчанию пуст. Домен сам по себе никогда не считается доверенным — доверие возникает только из явного сопоставления «издатель → закреплённый открытый ключ».

Компромиссы. Сильная сторона: пропасть между «я это видел» и «я это помню» становится различимой для машины. Слабая: цена — дополнительная работа на каждый источник, а пустой список ключей означает, что высший уровень доверия ещё нужно настроить руками.

💬 Просто попроси.
- «Проверь, все ли источники обзора подписаны» → ассистент прогонит записи через проверку и покажет непроверенные.
- «Почему этот факт помечен как непроверенный?» → ассистент покажет, какого именно свойства не хватило: подписи, загрузки или закреплённого ключа.

10. Две оси доверия и слабое звено

Класс доверия, класс свидетельства и правило самого слабого потолка

Ключевая мысль: две оси доверия и слабое звено

Здесь живёт самая тонкая идея пакета, и Мира поняла её только со второго раза. Речь про две оси доверия и слабое звено.

Первая ось — класс доверия. Она отвечает на вопрос «меняли ли запись после подписания?». Подписано закреплённым ключом издателя — потолок уверенности 0,95. Подписано самим исследователем — потолок 0,60, это лишь защита журнала от подделки. Не проверено вовсе — 0,0.

Вторая ось — класс свидетельства. Она отвечает на совсем другой вопрос: «а кто-нибудь вообще открывал источник?». Загрузка состоялась и байты получены — потолок 1,0. Адрес известен из списка, но никто по нему не ходил — 0,50. Сказано по памяти — 0,0.

Опасная комбинация видна сразу, как только оси разведены: запись может быть безупречно подписана и при этом пересказана по памяти. Криптографически идеальная запись пустоты. Пока ось была одна, такое состояние вообще нельзя было выразить.

Итоговая уверенность считается так:

уверенность = min(потолок доверия, потолок свидетельства, потолок класса источника)

Решает самое слабое звено, а не среднее. Подписанный, но никем не открытый факт получает 0,0 — и это не сбой, а весь смысл второй оси. Усреднение здесь замаскировало бы ровно ту ошибку, ради которой ось заведена.

Есть и третья величина, которую сознательно НЕ загнали в общую цифру: применимость (кому именно относится измерение). Её сообщают рядом с уверенностью, потому что разные вопросы, слипшиеся в одно число, делают интересные состояния невыразимыми.

Компромиссы. Сильная сторона: правило слабого звена не даёт красивой подписи прикрыть непрочитанный источник. Слабая: две шкалы плюс отдельная применимость — это более высокий порог входа, и читателю отчёта их приходится объяснять.

💬 Просто попроси.
- «Почему у этого факта уверенность ноль, он же подписан?» → ассистент покажет вторую ось: подпись есть, загрузки не было.
- «Покажи факты, которые никто не открывал» → ассистент отберёт записи, у которых загрузки не было.

11. Водяной знак: как монитор помнит увиденное

Файл состояния, правила отсева дубликатов и честный пустой результат

Ключевая мысль: водяной знак и дельта

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

Память монитора — это водяной знак: файл .news/monitor-<тема>.json с двумя полями. last_run — момент прошлого запуска, отсечка по дате. seen — список уже показанных адресов, чтобы та же новость, пересказанная другим изданием, не всплыла снова.

Петля выглядит так:

[водяной знак] → сканирование → дельта: отбросить старое → отчёт → [водяной знак обновлён]
        ↑                                                                    │
        └────────────────────────────────────────────────────────────────────┘

Правил отсева дубликатов всего три, и они дают экономию:

  1. тот же адрес (после очистки от меток отслеживания и якорей) — дубликат;
  2. то же событие в разных изданиях — оставить источник высшего уровня, остальные отбросить;
  3. обновление того же события — показывать заново только если изменение существенное, и пометить как обновление.

Самое важное правило — последнее: пустая дельта — это правильный ответ. «Ничего нового с такой-то даты» — валидный и полезный результат, и водяной знак всё равно продвигается вперёд. Монитор, который придумывает изменения, чтобы выглядеть занятым, хуже монитора, который честно молчит.

И обратная ловушка: монитор, который забыл продвинуть водяной знак, будет повторять одно и то же вечно — ровно то, с чего у Миры всё началось.

Компромиссы. Сильная сторона: состояние лежит в простом читаемом файле, его можно открыть и починить руками. Слабая: файл привязан к рабочему каталогу и теме — на другой машине монитор начнёт с чистого листа.

💬 Просто попроси.
- «Что нового по ИИ с прошлого раза?» → ассистент прочитает водяной знак, соберёт дельту и продвинет отсечку.
- «Покажи, что монитор уже считает увиденным» → ассистент откроет файл водяного знака и перечислит адреса из seen.

12. Ограничения и антипаттерны

Где пакет не помогает и какие привычки ломают результат

Ключевая мысль: ограничения и антипаттерны

Последний раздел — про честные границы. Мира прошла весь путь и теперь может сказать, где пакет помогает, а где нет.

Ограничения и антипаттерны, названные прямо:

  • Пакет не отвечает на один глубокий вопрос. Он делает обзор темы за период. Для одного точного вопроса нужен другой инструмент.
  • Пакет не разворачивает робота-сборщика. Регулярный сбор по расписанию — не его задача.
  • Пакет не следит за доступностью сайта. Это мониторинг работоспособности, совсем другая история.
  • Пакет не гарантирует истину. Он гарантирует происхождение: у каждого утверждения есть проверяемый адрес и подписанная запись.

Привычки, которые ломают результат:

  1. выдумывать факты, цифры или цитаты — прямой запрет; пробелы помечают честно;
  2. обходить проверяющий бэкенд — источник без подписи в отчёт не идёт;
  3. восстанавливать адреса задним числом — адрес записывают в момент находки, потом он не воспроизводится;
  4. класть корпоративный контекст в публикуемый профиль — такой профиль держат локально;
  5. доверять зашитым адресам журналов изменений — поставщики переименовывают страницы, адрес подтверждают на месте;
  6. блокировать выдачу из-за .docx — не получилось со второй попытки, отдай Markdown и скажи об этом;
  7. идти вширь, но неглубоко, когда не хватает контекста — семь проработанных потоков лучше десяти поверхностных.

Теперь твоя очередь: возьми свою тему, опиши для неё профиль, поставь ритм «монитор часто, дайджест периодически» — и посмотри, какое из семи правил нарушится у тебя первым. Однозначного ответа тут нет, и это нормально.

Компромиссы. Сильная сторона: границы названы вслух, поэтому пакет не обещает того, чего не делает. Слабая: часть запретов держится на дисциплине исполнителя, а не на автоматической проверке.

💬 Просто попроси.
- «Проверь мой черновик обзора на антипаттерны» → ассистент пройдёт по списку запретов и покажет нарушения.
- «Нужен один глубокий ответ, а не обзор» → ассистент честно скажет, что это задача не для news-digest, и предложит подходящий путь.

Частые вопросы

Нужен ли dz, чтобы пользоваться навыками?

Нет. dz даёт удобную установку (dz init --target claude-code --select …) и просмотр триггеров (dz info news-digest), но сами навыки — это файлы SKILL.md, которые можно поставить и обычным npm install.

Можно ли отключить проверяющий бэкенд goap-research-ed25519 ради скорости?

Нет, он объявлен обязательным. Источник без подписанной записи о происхождении либо исключается из отчёта, либо помечается как непроверенный — тихо включить его нельзя.

Что делать, если по теме за период реально ничего не произошло?

Написать это прямо: «без обновлений» или «ограниченные данные». Пустой честный результат — валидный ответ и для дайджеста, и для монитора; выдумывать факты запрещено правилом навыка.

Подпись Ed25519 значит, что факт правдив?

Нет. Она значит, что запись не менялась после подписания. Авторитетность источника, корректность вывода и понимание текста подписью не проверяются — это происхождение, а не истина.

Как завести дайджест по своей теме, если готового профиля нет?

Взять _template.md из профилей news-digest и описать потоки, обязательные сущности, списки наблюдения и мета-источники. Без профиля движок выведет 4–8 потоков из формулировки темы, но обзор будет менее прицельным.

Куда класть внутренний конкурентный контекст?

В локальный, не публикуемый профиль. В пакете, который публикуется в npm, корпоративных данных быть не должно — это то же правило, что действует для внешних коммуникаций.

Почему монитор второй раз показал те же новости?

Скорее всего, не продвинулся водяной знак .news/monitor-<тема>.json. Отсечка last_run и список seen обновляются в конце каждого запуска — без этого дельта считается от той же старой даты.

Бесплатный интерактивный курс · aicoding.space

Лицензии шрифтов

Onest

Copyright 2021 The Onest Project Authors (https://github.com/googlefonts/onest)

This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
https://scripts.sil.org/OFL


-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------

PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.

The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded, 
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.

DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.

"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).

"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).

"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.

"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.

PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:

1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.

2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.

3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.

4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.

5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.

TERMINATION
This license becomes null and void if any of the above conditions are
not met.

DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

JetBrainsMono

Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)

This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
https://scripts.sil.org/OFL


-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------

PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.

The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded, 
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.

DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.

"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).

"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).

"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.

"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.

PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:

1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.

2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.

3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.

4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.

5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.

TERMINATION
This license becomes null and void if any of the above conditions are
not met.

DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.