agentsclimarketplace

Obsidian bases

Skill matvej-melikhov/karpathy-llm-wiki/.claude/skills/obsidian-bases

Программная реализация паттерна LLM Wiki (А. Карпаты). ВКР СПбГЭТУ "ЛЭТИ" 2026

Install
npx -y skills add matvej-melikhov/karpathy-llm-wiki --skill obsidian-bases

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • 18 days oldThe repository was created 18 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Создание и редактирование Obsidian Bases (.base файлов): нативный database-слой Obsidian для динамических таблиц, card views, list views, фильтров, формул. Триггеры: создай base, добавь base file, obsidian bases, base view, фильтр заметок, формула, database view, динамическая таблица.

SKILL.md

11.3 KB, ~3.0k tokens by cl100k_base, as published. Nobody here has run it

obsidian-bases: database-слой Obsidian

Obsidian Bases (запущен в 2025) превращает заметки vault в queryable динамические views: таблицы, карточки, списки. Определяются в .base файлах. Плагин не требуется — это core-фича Obsidian с v1.9.10.

Официальная документация: https://help.obsidian.md/bases/syntax


⚠️ Дефолтные дашборды генерирует скрипт

Шаблонные дашборды (<Domain>.base для каждой страницы из wiki/domains/, глобальный dashboard.base) создаёт bin/gen_dashboards.py автоматически из Stop-hook'а. Файлы создаются только если отсутствуют — ручные правки в существующих сохраняются.

Этот скилл нужен только для нешаблонных задач: разовые кастомные Bases по нестандартному фильтру (например, «все entities типа paper за 2024 год», «questions со статусом draft»). Для дефолтных domain-дашбордов — ничего делать не надо, скрипт справится.


⚠️ Критично: только отдельные .base файлы

Markdown code-блоки ```base ... ``` НЕ рендерятся Obsidian'ом. Они отображаются как обычный текст в кодовом блоке — пустота на месте таблицы.

Bases работает только в виде отдельного файла с расширением .base и валидным YAML. Чтобы показать таблицу внутри markdown-заметки, используй embed:

![[MyBase.base]]

Это правило часто нарушается генераторами шаблонов с помощью code-блоков — всегда заменяй на embed.


Формат файла

.base файлы содержат валидный YAML. Корневые ключи: filters, formulas, properties, summaries, views.

# Глобальные фильтры: применяются КО ВСЕМ views
filters:
  and:
    - file.hasTag("wiki")
    - 'status != "ready"'

# Вычисляемые свойства
formulas:
  age_days: '(now() - file.ctime).days.round(0)'
  status_icon: 'if(status == "ready", "✅", "🔄")'

# Переопределение display name для panel свойств
properties:
  status:
    displayName: "Статус"
  formula.age_days:
    displayName: "Возраст (дней)"

# Один или несколько views
views:
  - type: table
    name: "Все страницы"
    order:
      - file.name
      - type
      - status
      - updated
      - formula.age_days

Фильтры

Фильтры выбирают, какие заметки появляются. Применяются глобально или per-view.

# Один строковый фильтр
filters: 'status == "in-progress"'

# AND: все должны быть true
filters:
  and:
    - 'status != "ready"'
    - file.hasTag("wiki")

# OR: любой может быть true
filters:
  or:
    - file.hasTag("idea")
    - file.hasTag("entity")

# NOT: исключить совпадения
filters:
  not:
    - file.inFolder("wiki/meta")

# Вложенные
filters:
  and:
    - file.inFolder("wiki/")
    - or:
        - 'type == "idea"'
        - 'type == "entity"'

Операторы фильтров

== != > < >= <=

Полезные функции фильтров

ФункцияПример
file.hasTag("x")Заметки с тегом x
file.inFolder("path/")Заметки в папке
file.hasLink("Note")Заметки, ссылающиеся на Note

Properties

Три типа:

  • Note properties: из frontmatter — status, type, updated
  • File properties: метаданные — file.name, file.mtime, file.size, file.ctime, file.tags, file.folder
  • Formula properties: вычисляемые — formula.age_days

Формулы

Определяются в formulas:. Используются как formula.name в order: и properties:.

formulas:
  # Дней с момента создания
  age_days: '(now() - file.ctime).days.round(0)'

  # Дней до даты-свойства
  days_until: 'if(due_date, (date(due_date) - today()).days, "")'

  # Условный label
  status_icon: 'if(status == "ready", "✅", if(status == "in-progress", "🔄", "🌱"))'

  # Оценка количества слов
  word_est: '(file.size / 5).round(0)'

Ключевое правило: вычитание двух дат возвращает Duration, не число. Всегда обращайся к .days сначала:

# КОРРЕКТНО
age: '(now() - file.ctime).days'

# НЕПРАВИЛЬНО: упадёт
age: '(now() - file.ctime).round(0)'

Всегда защищай nullable свойства через if():

# КОРРЕКТНО
days_left: 'if(due_date, (date(due_date) - today()).days, "")'

Типы views

Table

views:
  - type: table
    name: "Wiki Index"
    limit: 100
    order:
      - file.name
      - type
      - status
      - updated
    groupBy:
      property: type
      direction: ASC

Cards

views:
  - type: cards
    name: "Галерея"
    order:
      - file.name
      - tags
      - status

List

views:
  - type: list
    name: "Быстрый список"
    order:
      - file.name
      - status

Шаблоны для wiki vault

Дашборд содержимого wiki (все non-meta страницы)

filters:
  and:
    - file.inFolder("wiki/")
    - not:
        - file.inFolder("wiki/meta")

formulas:
  age: '(now() - file.ctime).days.round(0)'

properties:
  formula.age:
    displayName: "Возраст (дней)"

views:
  - type: table
    name: "Все страницы wiki"
    order:
      - file.name
      - type
      - status
      - updated
      - formula.age
    groupBy:
      property: type
      direction: ASC

Индекс сущностей (люди, организации, репо)

filters:
  and:
    - file.inFolder("wiki/entities/")
    - 'file.ext == "md"'

views:
  - type: table
    name: "Сущности"
    order:
      - file.name
      - entity_type
      - status
      - updated
    groupBy:
      property: entity_type
      direction: ASC

Идеи по домену

filters:
  and:
    - file.inFolder("wiki/ideas/")

views:
  - type: table
    name: "Идеи"
    order:
      - file.name
      - domain
      - status
      - tags
      - updated
    groupBy:
      property: domain
      direction: ASC

Встраивание в заметки

![[MyBase.base]]

![[MyBase.base#View Name]]

Где сохранять

Все .base файлы — в wiki/meta/dashboards/:

wiki/meta/dashboards/dashboard.base               — основной view содержимого
wiki/meta/dashboards/entities.base                — трекер сущностей
wiki/meta/dashboards/domains.base                 — обзор доменов
wiki/meta/dashboards/Machine Learning.base        — view для domain-страницы
wiki/meta/dashboards/<DomainTitle>.base           — view для каждого domain-MOC

Имена .base файлов уникальны по vault — embed работает по basename без указания пути:

<!-- в wiki/domains/Machine Learning.md -->
![[Machine Learning.base]]

Obsidian резолвит ссылку по уникальному имени и embed находит файл из любой папки.

Почему именно wiki/meta/

  • Обычная папка — Obsidian её индексирует и embed работает (см. секцию ниже про dot-prefix, который не работает).
  • Отделена от контентаmeta/ исключается из обычных дашбордов через not file.inFolder("wiki/meta/") и не попадает в графы знаний.
  • Группирует инфраструктуру — рядом с lint-state, lint-report, dashboard.base.

⚠️ Dot-prefix НЕ работает для .base файлов

Соблазнительная идея — назвать файл .X.base, чтобы Obsidian скрыл его из File Explorer (как .gitignore). На практике:

  • Obsidian полностью игнорирует dot-файлы (как и dot-папки), не индексирует их и не резолвит wikilinks.
  • Embed ![[.X.base]] показывает «Заметка не существует. Нажмите, чтобы создать.»

Единственный способ скрыть .base файлы из основной File Explorer view — держать их в отдельной папке (wiki/meta/) и при необходимости свернуть её или скрыть через настройки темы / плагина File Explorer.


Правила YAML quoting

  • Формулы с двойными кавычками → оберни в одинарные: 'if(done, "Yes", "No")'
  • Строки с двоеточиями или спецсимволами → оберни в двойные: "Status: Active"
  • Незаключённые в кавычки строки с : ломают YAML парсинг

Чего НЕ делать

  • Не пиши Bases-конфиг в markdown code-блоке ```base ... ```не рендерится. Только отдельный .base файл + embed ![[X.base]].
  • Не используй from: или where:: это синтаксис Dataview, не Bases
  • Не используй sort: на root уровне: сортировка per-view через order: и groupBy:
  • Не клади .base файлы вне vault: они рендерятся только внутри Obsidian
  • Не ссылайся на formula.X в order: без определения X в formulas:
  • Не клади .base файлы в папки или с именами с dot-prefix (.bases/X.base, .X.base) — Obsidian игнорирует и dot-папки, и dot-файлы полностью; embed не сработает. Для скрытия из File Explorer держи их в обособленной папке wiki/meta/.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.