{"id":29927521,"url":"https://github.com/crypdick/obsidian-llm","last_synced_at":"2025-08-02T13:11:06.388Z","repository":{"id":230992278,"uuid":"779369139","full_name":"crypdick/obsidian-llm","owner":"crypdick","description":null,"archived":false,"fork":false,"pushed_at":"2025-08-01T08:35:15.000Z","size":1943,"stargazers_count":1,"open_issues_count":4,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-01T10:42:40.125Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/crypdick.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-03-29T17:16:08.000Z","updated_at":"2025-08-01T08:35:11.000Z","dependencies_parsed_at":"2024-04-04T01:46:19.027Z","dependency_job_id":"f77dad6d-ed25-40ac-8ef9-9b9689afd086","html_url":"https://github.com/crypdick/obsidian-llm","commit_stats":null,"previous_names":["crypdick/obsidian-llm"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/crypdick/obsidian-llm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crypdick%2Fobsidian-llm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crypdick%2Fobsidian-llm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crypdick%2Fobsidian-llm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crypdick%2Fobsidian-llm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crypdick","download_url":"https://codeload.github.com/crypdick/obsidian-llm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crypdick%2Fobsidian-llm/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268394071,"owners_count":24243350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-02T13:11:02.758Z","updated_at":"2025-08-02T13:11:06.366Z","avatar_url":"https://github.com/crypdick.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Obsidian Llm\n\n[![PyPI](https://img.shields.io/pypi/v/obsidian-llm.svg)][pypi_]\n[![Status](https://img.shields.io/pypi/status/obsidian-llm.svg)][status]\n[![Python Version](https://img.shields.io/pypi/pyversions/obsidian-llm)][python version]\n[![License](https://img.shields.io/pypi/l/obsidian-llm)][license]\n\n[![Read the documentation at https://obsidian-llm.readthedocs.io/](https://img.shields.io/readthedocs/obsidian-llm/latest.svg?label=Read%20the%20Docs)][read the docs]\n[![Tests](https://github.com/crypdick/obsidian-llm/workflows/Tests/badge.svg)][tests]\n[![Codecov](https://codecov.io/gh/crypdick/obsidian-llm/branch/main/graph/badge.svg)][codecov]\n\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit\u0026logoColor=white)][pre-commit]\n[![Black](https://img.shields.io/badge/code%20style-black-000000.svg)][black]\n\n[pypi_]: https://pypi.org/project/obsidian-llm/\n[status]: https://pypi.org/project/obsidian-llm/\n[python version]: https://pypi.org/project/obsidian-llm\n[read the docs]: https://obsidian-llm.readthedocs.io/\n[tests]: https://github.com/crypdick/obsidian-llm/actions?workflow=Tests\n[codecov]: https://app.codecov.io/gh/crypdick/obsidian-llm\n[pre-commit]: https://github.com/pre-commit/pre-commit\n[black]: https://github.com/psf/black\n\n# Obsidian.md Vault Improvement Assistant\n\nThis project aims to automate maintenance of an Obsidian.md vault created from Bryan Jenk's template.\n\n## Features\n\n- **Filling Missing Aliases**: suggests missing aliases within the YAML frontmatter\n- **Suggesting Missing Links**: recommends which parts of a note should be turned into wikilinks\n- **Merging SyncThing Conflicts**: resolves conflicts in the `.md` files generated by Syncthing\n- **Bumping Note Status**: scans all notes currently tagged as stubs (`📝/🟥️`) and decide whether to bump its status. In particular, we count the number of links in the body of the note and suggest a status based on that. Note status are as follows:\n  - `📝/🟥️`: _Stub_. 0 links.\n  - `📝/🟧️`: _Processing_. 1-4 links.\n  - `📝/🟩️`: _Evergreen_. 5+ links.\n- **Bumping Journal Status**: scans all journal notes tagged as incomplete (`📓/🟥️`) and decides whether to bump its status. In particular, we use ChatGPT to decide whether there are any action items in the journal. If there are, it will prompt the user to capture them into a task manager (manual step). When the user indicates they have finished capturing the tasks, the job continues. If ChatGPT finds no action items, the journal status is bumped without user interaction.\n  - `📓/🟨`: _Captured_. The note contained action items, and the user has finished capturing them into a task manager.\n  - `📓/🟩️`: _Processed_. The note contained no action items, and does not need to be processed further.\n\nAll edits are presented to the user in a `meld` diff editor, allowing for interactive approval or modification of suggestions.\n\n## Getting Started\n\n### Requirements\n\n- Python 3.11\n- Installation of required packages from `poetry.lock` file\n\n### Quickstart\n\n1. Clone the repository to your local machine.\n2. Install dependencies using `poetry install`.\n3. (Optional) Create a `.env` file in the root directory using `sample.env` as a template.\n4. Run `poetry run obsidian-llm --task \u003ctask type\u003e` to start the application. Task types include:\n   - `aliases`: suggest missing aliases within the YAML frontmatter\n   - `bump-note-status`: suggest bumping of a note's status based on number of wikilinks\n   - `bump-journal-status`: suggest bumping of a journal's status based on whether it contains action items\n   - `spell-check-titles`: spell check all note titles\n   - `linkify`: suggests missing wikilinks in the body of each note\n   - `merge-syncthing-conflicts`: resolves conflicts in the `.md` files generated by Syncthing\n   - `fix-file-names`: removes special characters from filenames that cause sync issues to other operating systems\n\n## Usage\n\nWhen running the steps, it is recommended to close Obsidian to prevent conflicts with the vault. This can happen\nif the vault is open and Obsidian is updating the `modified` timestamp of the files.\n\nThe exception is when running the `spell-check-titles` task, as this does not modify the files. Files should be renamed manually in Obsidian so that it propagates the updates to wikilinks.\n\n## Recommended workflow\n\n1. Merge Syncthing file conflicts: `poetry run obsidian-llm --task merge-syncthing-conflicts`\n2. Bump journal status: `poetry run obsidian-llm --task bump-journal-status`\n3. Correct title spelling errors, or else future LLM calls may hallucinate the correct spellings: `poetry run obsidian-llm --task spell-check-titles`\n4. Adding aliases helps with later linking steps: `poetry run obsidian-llm --task aliases`\n5. Linkify now that aliases are added and titles are corrected: `poetry run obsidian-llm --task linkify`\n6. Bump note status now that links are added: `poetry run obsidian-llm --task bump-note-status`\n\nPlease see the [Command-line Reference] for details.\n\n## Contributing\n\nContributions are very welcome.\nTo learn more, see the [Contributor Guide].\n\n## License\n\nDistributed under the terms of the [MIT license][license],\n_Obsidian Llm_ is free and open source software.\n\n## Issues\n\nIf you encounter any problems,\nplease [file an issue] along with a detailed description.\n\n## TODO\n\n- help link to relevant pages using RAG\n- add @beartype to all functions and add type hints\n- consolidate all prompts into prompts/ folder\n- suggest notes which should be merged based on title\n- suggest notes which should be split based on length\n\n## Credits\n\nThis project was generated from [@cjolowicz]'s [Hypermodern Python Cookiecutter] template.\n\n[@cjolowicz]: https://github.com/cjolowicz\n[pypi]: https://pypi.org/\n[hypermodern python cookiecutter]: https://github.com/cjolowicz/cookiecutter-hypermodern-python\n[file an issue]: https://github.com/crypdick/obsidian-llm/issues\n[pip]: https://pip.pypa.io/\n\n\u003c!-- github-only --\u003e\n\n[license]: https://github.com/crypdick/obsidian-llm/blob/main/LICENSE\n[contributor guide]: https://github.com/crypdick/obsidian-llm/blob/main/CONTRIBUTING.md\n[command-line reference]: https://obsidian-llm.readthedocs.io/en/latest/usage.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrypdick%2Fobsidian-llm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrypdick%2Fobsidian-llm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrypdick%2Fobsidian-llm/lists"}