{"id":48926579,"url":"https://github.com/prodrom3/nostos","last_synced_at":"2026-05-01T16:00:42.021Z","repository":{"id":183526527,"uuid":"670245390","full_name":"prodrom3/nostos","owner":"prodrom3","description":"Zero-dependency Python CLI for batch-updating and curating a fleet of git repositories. SQLite metadata index, fail-closed upstream probes (GitHub / GitLab / Gitea), weekly digest, Obsidian bridge.","archived":false,"fork":false,"pushed_at":"2026-05-01T12:24:43.000Z","size":487,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-05-01T13:13:28.397Z","etag":null,"topics":["automation","batch-processing","cli","devsecops","fleet-management","git","git-pull","gitea","github","gitlab","obsidian","parallel","python","red-team","repository-management","sqlite","zero-dependencies"],"latest_commit_sha":null,"homepage":"https://github.com/prodrom3/gitpulse","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/prodrom3.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":"MAINTAINERS.md","copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-07-24T15:57:25.000Z","updated_at":"2026-05-01T12:24:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"891a8ccf-1337-4c99-8270-511e785a2251","html_url":"https://github.com/prodrom3/nostos","commit_stats":null,"previous_names":["prodrom3/reporevamp","prodrom3/gitpulse","prodrom3/nostos"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/prodrom3/nostos","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prodrom3%2Fnostos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prodrom3%2Fnostos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prodrom3%2Fnostos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prodrom3%2Fnostos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/prodrom3","download_url":"https://codeload.github.com/prodrom3/nostos/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prodrom3%2Fnostos/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32503204,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"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":["automation","batch-processing","cli","devsecops","fleet-management","git","git-pull","gitea","github","gitlab","obsidian","parallel","python","red-team","repository-management","sqlite","zero-dependencies"],"created_at":"2026-04-17T07:03:44.035Z","updated_at":"2026-05-01T16:00:42.014Z","avatar_url":"https://github.com/prodrom3.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nostos\n\n[![CI](https://github.com/prodrom3/nostos/actions/workflows/ci.yml/badge.svg)](https://github.com/prodrom3/nostos/actions/workflows/ci.yml)\n[![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](./LICENSE)\n[![Release](https://img.shields.io/github/v/release/prodrom3/nostos.svg)](https://github.com/prodrom3/nostos/releases)\n[![PyPI](https://img.shields.io/pypi/v/nostos.svg)](https://pypi.org/project/nostos/)\n[![Platforms](https://img.shields.io/badge/platforms-Linux%20%7C%20macOS%20%7C%20Windows-lightgrey.svg)](#compatibility)\n\n```\n                     __\n   ____  ____  _____/ /_____  _____\n  / __ \\/ __ \\/ ___/ __/ __ \\/ ___/\n / / / / /_/ (__  ) /_/ /_/ (__  )\n/_/ /_/\\____/____/\\__/\\____/____/\n\n  the homecoming - a fleet of git repositories\n```\n\n\u003e **nostos** is a Python CLI for batch-updating and curating fleets of git repositories in parallel. Built for developers and platform teams who maintain dozens - or hundreds - of cloned repositories and need a reliable, auditable, scriptable way to keep them in sync.\n\n---\n\n## Overview\n\nnostos is three tools in one:\n\n1. A **batch-pull engine** that walks a directory tree (and/or a curated index), discovers every git repository it can reach, and updates them concurrently. Dirty trees, detached HEADs, and missing upstreams are reported and skipped, never overwritten.\n2. A **metadata index** (SQLite) recording identity, provenance, tags, notes, and triage status for every repository in your fleet.\n3. An **upstream probe layer** that queries GitHub, GitLab, and Gitea - hosted and self-hosted - for health signals (archived, stars, last push, latest release, license). Fail-closed by default: only hosts listed in `~/.config/nostos/auth.toml` are ever contacted.\n\nUse cases:\n\n- **Developers with many cloned repos** that drift. `nostos ~/projects` pulls them all in parallel; dirty trees and detached HEADs are reported, never overwritten.\n- **Curated project collections** - anyone who ingests new repos from blog posts, papers, or colleague pointers. `nostos add \u003curl\u003e` clones and captures provenance in one step; `nostos triage` walks the new intake; `nostos list --tag python --untouched-over 90` answers \"what have I stopped using?\" in milliseconds.\n- **Upstream health monitoring** for tracked open-source projects. `nostos refresh` caches archived status, last push, and latest release; `nostos list --upstream-archived` surfaces repos whose upstream has been archived or taken down.\n- **Build boxes and mirror hosts** maintaining read-only clones. JSON output and deterministic exit codes make nostos safe to embed in cron and CI.\n- **Cross-machine fleet replication.** `nostos export` / `nostos import` ship your fleet (metadata plus clone-on-import) between machines, with path remapping for cross-OS moves.\n\n---\n\n## Quick start\n\n```bash\npipx install nostos                         # or: pip install nostos\nnostos completion install                   # enable shell tab-completion\n\nnostos --dry-run                            # preview updates under cwd\nnostos ~/projects --workers 16              # pull in parallel\n\nnostos add https://github.com/org/tool.git --tag recon\nnostos list --tag recon --untouched-over 90\nnostos triage                               # classify new intake\n```\n\nNo third-party runtime dependencies beyond `argcomplete` (required for tab-completion, bundled with every install).\n\n---\n\n## Installation\n\n### Requirements\n\n| Component | Minimum | Recommended |\n| --- | --- | --- |\n| Python | 3.10 | 3.12+ |\n| Git | 2.25 | **2.45.1+** (nostos warns at startup on versions with CVE-2024-32002 / 32004 / 32465) |\n| OS | Linux / macOS / Windows | - |\n\n### Install\n\n```bash\n# Isolated (recommended)\npipx install nostos\n\n# System-wide\npip install nostos\n\n# From source\ngit clone https://github.com/prodrom3/nostos.git\ncd nostos \u0026\u0026 pip install .\n```\n\nVerify with `nostos --version` and `nostos --help`.\n\n### Shell tab-completion\n\n```bash\nnostos completion install        # auto-detects your shell\nexec $SHELL                      # reload\nnostos \u003cTAB\u003e\u003cTAB\u003e                # lists all verbs\n```\n\n`install` is idempotent and writes a managed block into `~/.bashrc`, `~/.zshrc`, or `~/.config/fish/conf.d/nostos.fish`. Remove with `nostos completion uninstall`. Native Windows shells (PowerShell / cmd) are not supported by argcomplete upstream; use Git Bash or WSL.\n\n---\n\n## Usage\n\nnostos is verb-first: `nostos \u003cverb\u003e [args]`. An invocation without a verb is an implicit `pull`, so old scripts and cron jobs keep working.\n\n| Verb | Purpose |\n| --- | --- |\n| `pull` (default) | Batch-update discovered repositories. |\n| `add` | Ingest a local path or remote URL into the metadata index. |\n| `list` | Filter and print the repo fleet. |\n| `show` | Print full metadata for one repo. |\n| `tag` | Add or remove tags on a repo. |\n| `tags` | List every tag in the index with attachment counts; optionally prune orphans. |\n| `note` | Append a timestamped note. |\n| `triage` | Walk newly-added repos interactively and classify them. |\n| `refresh` | Fetch upstream metadata. Opsec-gated. See [docs/upstream-probes.md](docs/upstream-probes.md). |\n| `topics` | Manage topic curation rules (deny / alias) applied when `--auto-tags` imports upstream topics. |\n| `digest` | Weekly changeset report (zero network). |\n| `dashboard` | Render a static HTML fleet health report. |\n| `vault` | Obsidian vault bridge (`export` / `sync`). See [docs/vault.md](docs/vault.md). |\n| `export` / `import` | Portable JSON bundles for cross-machine / backup. See [docs/bundle-schema.md](docs/bundle-schema.md). |\n| `update` | Self-update. Auto-detects source / pipx / pip install. |\n| `doctor` | Index integrity check; `--fix` auto-remediates safe issues. |\n| `attack` | MITRE ATT\u0026CK technique lookup + tagging helper. |\n| `completion` | Shell tab-completion setup. |\n| `rm` | Remove a repo from the index (optionally `--purge` the clone). |\n\nEvery verb has `--help`. Every verb that lists or returns results supports `--json`.\n\n### Key flags - `nostos pull`\n\n| Flag | Default | Description |\n| --- | --- | --- |\n| `path` | cwd | Root directory to scan. |\n| `--from-index` | off | Pull every repo registered in the metadata index. |\n| `--dry-run` | off | List discovered repos without pulling. |\n| `--fetch-only` | off | Fetch from remotes; do not merge or rebase. |\n| `--tags` | off | Also fetch all git tags. |\n| `--rebase` | off | Use `git pull --rebase`. |\n| `--depth N` | 5 | Directory-scan depth limit. |\n| `--workers N` | 8 | Concurrent worker threads. |\n| `--timeout N` | 120 | Seconds before a git operation is killed. |\n| `--exclude PATTERN...` | - | Glob patterns to skip repos by directory name. |\n| `--json` | off | Machine-readable output. |\n| `-q`, `--quiet` | off | Suppress progress; print only the summary. |\n\nEvery pulled repo is automatically registered in the metadata index with an updated `last_touched_at`.\n\n### Examples\n\n```bash\n# Daily batch pull\nnostos ~/projects\n\n# CI-friendly: quiet, JSON, fetch-only\nnostos --fetch-only --quiet --json | jq '.counts'\n\n# Ingest + triage\nnostos add https://github.com/org/tool.git --tag recon --source \"blog:orange.tw\"\nnostos triage\n\n# Ingest with auto-fetched repo topics from the upstream host (requires auth.toml)\nnostos add https://github.com/r4ulcl/Mythic-OSEP-CheatSheet --tag osep,c2 --auto-tags\n\n# Subdomain-recon tools from the Pentesting/Bug-Bounty Mindmap\nnostos add https://github.com/OWASP/Amass            --tag subdomain,vertical-corelation,recon --auto-tags\nnostos add https://github.com/aboul3la/Sublist3r     --tag subdomain,recon --auto-tags\nnostos add https://github.com/guelfoweb/knock        --tag subdomain,recon --auto-tags\nnostos add https://github.com/projectdiscovery/subfinder --tag subdomain,recon --auto-tags\n\n# Bulk-ingest every public repo of a GitHub user / org (requires auth.toml)\nnostos add --from-owner projectdiscovery --tag recon --auto-tags --workers 8\nnostos add --from-owner tomnomnom --tag hacks --auto-tags --lang go --limit 20\nnostos add --from-owner orgname --tag c2 --auto-tags \\\n    --include-forks --match '^(mythic|caldera)' --clone-dir ~/repos\n\n# DevSecOps queries against the cached fleet (run `nostos refresh --all --cves` first)\nnostos list --license MIT,Apache-2.0          # only permissively-licensed repos\nnostos list --license-not GPL-3.0,AGPL-3.0    # reject copyleft for our product\nnostos list --upstream-cve                    # repos with at least one open advisory\nnostos list --upstream-severity high          # high+ severity only\n\n# Backfill topics across the whole fleet on the next refresh\nnostos refresh --all --auto-tags\n\n# Curate the imported topics: drop junk, collapse synonyms\nnostos topics deny foo hacktoberfest ubuntu\nnostos topics alias red-teaming redteam\nnostos topics alias penetration-testing pentest\nnostos topics list\nnostos refresh --all --auto-tags         # re-curate the fleet\n\n# Share rules across machines or with colleagues\nnostos topics export \u003e team-rules.toml\nnostos topics import team-rules.toml             # default: merge with local rules\nnostos topics import team-rules.toml --replace   # overwrite local rules\ncurl -sS https://example.com/rules.toml | nostos topics import -   # via stdin\n\n# Quick start: import the curated default rule set bundled with nostos\nnostos topics import extras/topic_rules/default.toml\n\n# Retroactively curate tags already in the index after editing rules\nnostos topics apply --dry-run     # preview what would change\nnostos topics apply               # apply for real (idempotent)\nnostos topics apply --repo /path/to/one/repo\n\n# Find C2 tools you haven't touched in 90 days\nnostos list --tag c2 --untouched-over 90\n\n# Portable backup\nnostos export --out fleet.json\nnostos import fleet.json --clone-dir ~/repos   # on another machine\n```\n\n---\n\n## Configuration\n\nOptional INI file at `~/.nostosrc`. CLI flags always override file values.\n\n```ini\n[defaults]\ndepth         = 5\nworkers       = 8\ntimeout       = 120\nmax_log_files = 20\nrebase        = false\nclone_dir     = /home/user/repos\n\n[exclude]\npatterns = archived-*, .backup-*, vendor-*\n\n[add]\nauto_tags = false             # default. Set true to make `nostos add` always\n                              # fetch repo topics from the upstream host.\n```\n\n### Environment variables\n\n| Variable | Effect |\n| --- | --- |\n| `NO_COLOR` | Disables ANSI color when set to any non-empty value. |\n| `NOSTOS_SHELL` | Overrides `$SHELL` when detecting the target shell for `nostos completion`. Accepts `bash` / `zsh` / `fish`. |\n| `GITHUB_TOKEN`, etc. | Referenced via `token_env = \"...\"` in `~/.config/nostos/auth.toml` for upstream probes. |\n| `XDG_CONFIG_HOME` | Relocates `~/.config/nostos/` (default `~/.config`). |\n| `XDG_DATA_HOME` | Relocates `~/.local/share/nostos/` - the index DB **and** the `logs/` subdirectory (default `~/.local/share`). |\n| `APPDATA` / `LOCALAPPDATA` | Windows fallbacks when the XDG variables are unset: config lives under `%APPDATA%\\nostos\\`, data under `%LOCALAPPDATA%\\nostos\\`. |\n\nPrecedence, highest to lowest: **CLI flags** -\u003e **`~/.nostosrc`** -\u003e **built-in defaults**.\n\n---\n\n## Core concepts\n\n### Metadata index\n\nSQLite at `$XDG_DATA_HOME/nostos/index.db` (default `~/.local/share/nostos/index.db`, `0600` perms, WAL mode, `secure_delete=ON`). One row per repository plus tags, timestamped notes, provenance, and triage status. Every verb reads from and writes to this file; the batch `pull` auto-registers every repo it touches.\n\n| Column | Description |\n| --- | --- |\n| `path` | Absolute, `realpath`-normalised. Unique. |\n| `remote_url` | `origin` remote (HTTPS credentials stripped). |\n| `source` | Free-text provenance (`\"blog:...\"`, `\"auto-discovered\"`, `\"legacy-watchlist\"`). |\n| `status` | `new`, `reviewed`, `in-use`, `dropped`, `flagged`. |\n| `quiet` | Opsec flag: never probe upstream for this repo. |\n| `added_at` / `last_touched_at` | ISO-8601 UTC timestamps. |\n| tags / notes | Many-to-many tags; append-only timestamped notes. |\n\nFor at-rest confidentiality, place `$XDG_DATA_HOME/nostos/` on a disk-layer encrypted volume (LUKS / FileVault / BitLocker). nostos ships no built-in DB encryption by design.\n\n### Upstream probes\n\n`nostos refresh` populates cached upstream health (archived, stars, last push, release, license) for each repo, gated by `~/.config/nostos/auth.toml`. Unconfigured hosts are never contacted. Fail-closed invariants are documented in [docs/upstream-probes.md](docs/upstream-probes.md).\n\n### Portable bundles\n\n`nostos export` / `nostos import` serialise the metadata index as a schema-versioned JSON bundle. The import path resolves each entry against the local filesystem (direct match, `$HOME`-relative match, `--remap`) and clones repos that carry a `remote_url` but do not exist locally. Full schema and algorithm in [docs/bundle-schema.md](docs/bundle-schema.md).\n\n### Obsidian vault\n\n`nostos vault export` turns the index into one markdown file per repo with YAML frontmatter. `nostos vault sync` reconciles operator edits to `status` / `tags` back into the DB. Details and Dataview queries in [docs/vault.md](docs/vault.md).\n\n---\n\n## Output\n\n### Human-readable\n\n```\n  [1/9] updated: /home/user/projects/repo-a\n  [2/9] up-to-date: /home/user/projects/repo-d\n  [3/9] skipped: /home/user/projects/repo-e\n\n--- Summary ---\nUpdated (3): ...\nSkipped (1): /home/user/projects/repo-e - dirty working tree\nTotal: 9 | Updated: 3 | Up-to-date: 5 | Skipped: 1 | Failed: 0\n```\n\n### JSON\n\n```bash\nnostos --json | jq '.counts'\n```\n\nProgress lines go to `stderr`; `--json` output on `stdout` stays clean for pipes.\n\n---\n\n## CI / automation\n\n| Exit code | Meaning |\n| --- | --- |\n| `0` | All discovered repos updated or already up-to-date. |\n| `1` | At least one repo failed to update. |\n\nSkipped repositories (dirty, detached, no upstream) do **not** fail the run - they are surfaced in the summary for review.\n\n```yaml\n# GitHub Actions\n- name: Refresh vendored clones\n  run: |\n    nostos ./vendor --quiet --json \u003e /tmp/nostos.json\n    jq '.counts' /tmp/nostos.json\n```\n\n```cron\n# crontab\n*/30 * * * *  /usr/local/bin/nostos ~/projects --quiet --fetch-only\n```\n\n---\n\n## Logging\n\nEach run writes a timestamped log file to `$XDG_DATA_HOME/nostos/logs/` (default `~/.local/share/nostos/logs/` on Linux / macOS, `%LOCALAPPDATA%\\nostos\\logs\\` on Windows) alongside the metadata index - so logs survive `pipx reinstall` and are always findable regardless of install method. Example filename: `2026-04-17_14-30-00.log`. Rotated to the most recent 20 (configurable via `max_log_files`). Files are `0600`; the `logs/` directory is `0700` on Unix. HTTPS credentials of the form `https://user:token@host/` are sanitized to `https://***@host/` before being written.\n\n---\n\n## Security\n\nnostos treats git operations on untrusted working directories as an attack surface, and the metadata index as an intelligence artifact. Defense-in-depth applies at both layers.\n\n| Control | Description |\n| --- | --- |\n| Git version check | Startup warning on git \u003c 2.45.1 (CVE-2024-32002 / 32004 / 32465). |\n| Safe remote clone | `add \u003curl\u003e` clones with `--no-checkout` and disables hooks via `GIT_CONFIG_*`. |\n| Credential redaction | HTTPS credentials stripped from all logs and from `remote_url` values in the index. |\n| File permissions | Logs and index DB `0600`; config and data dirs `0700` (Unix). |\n| Ownership checks | `~/.nostosrc`, `auth.toml`, and legacy watchlist rejected if not owned by the invoking user or world-writable. |\n| Repository ownership | Repos not owned by the current user are skipped on Unix. |\n| Symlink protection | The `logs/` directory is rejected if it is a symlink. |\n| No shell injection | Every subprocess call uses list arguments; `shell=True` is never used. |\n| Index hardening | SQLite `journal_mode=WAL`, `secure_delete=ON`, `foreign_keys=ON`; deleted rows overwritten on disk. |\n| Probe fail-closed | Upstream probes only contact hosts listed in `auth.toml`; `--offline` hard-disables the network layer. |\n| Per-repo quiet flag | `add --quiet-upstream` makes a repo ineligible for upstream probes; the probe layer never queries or logs these repos. |\n| Token hygiene | Tokens sourced from env vars by default, sent as `Authorization: Bearer`, redacted from every log and error path. |\n\nReport security issues privately via a [GitHub security advisory](https://github.com/prodrom3/nostos/security/advisories/new). See [SECURITY.md](SECURITY.md) for the full disclosure process.\n\n---\n\n## Compatibility\n\n| OS | Python 3.10 | 3.11 | 3.12 | 3.13 |\n| --- | :---: | :---: | :---: | :---: |\n| Ubuntu (latest) | ✓ | ✓ | ✓ | ✓ |\n| macOS (latest)  | ✓ | ✓ | ✓ | ✓ |\n| Windows (latest) | ✓ | ✓ | ✓ | ✓ |\n\nCI exercises every cell of this matrix on every push and pull request.\n\n---\n\n## Architecture\n\nSee [docs/architecture.md](docs/architecture.md) for the module layout, dependency graph, and end-to-end flows (`pull`, `add` -\u003e `triage`, `import`).\n\n---\n\n## Versioning \u0026 support\n\nnostos follows [Semantic Versioning](https://semver.org/) 2.0. Breaking changes appear only in new major versions and are called out in [CHANGELOG.md](CHANGELOG.md) and the corresponding GitHub release notes.\n\n- **Stable:** CLI flags, exit codes, JSON output schema, bundle schema (reader accepts all versions in `READABLE_SCHEMAS`).\n- **Internal:** the `core/` Python API is not a supported public API; import at your own risk.\n\nCurrent version: see [`VERSION`](./VERSION) and `nostos --version`.\n\nResponse expectations (best-effort, non-commercial): see [MAINTAINERS.md](MAINTAINERS.md).\n\n---\n\n## Project documents\n\n| File | Purpose |\n| --- | --- |\n| [CHANGELOG.md](CHANGELOG.md) | Per-release change log (mirrors GitHub releases). |\n| [CONTRIBUTING.md](CONTRIBUTING.md) | Dev setup, test / lint / mypy workflow, PR style. |\n| [MAINTAINERS.md](MAINTAINERS.md) | Primary maintainer, escalation path, release authority. |\n| [SECURITY.md](SECURITY.md) | Private disclosure process. |\n| [LICENSE](LICENSE) | MIT. |\n\nDeep-dive docs under [`docs/`](docs/):\n\n| File | Topic |\n| --- | --- |\n| [docs/architecture.md](docs/architecture.md) | Module layout, dependency graph, run / intake / import flows. |\n| [docs/upstream-probes.md](docs/upstream-probes.md) | Upstream probe auth, commands, opsec invariants. |\n| [docs/bundle-schema.md](docs/bundle-schema.md) | Portable bundle format v2 and import resolution algorithm. |\n| [docs/vault.md](docs/vault.md) | Obsidian vault bridge and narrow two-way sync. |\n\n---\n\n## License\n\nReleased under the [MIT License](./LICENSE). Authored by [prodrom3](https://github.com/prodrom3); maintained by the **radamic** organization.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprodrom3%2Fnostos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprodrom3%2Fnostos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprodrom3%2Fnostos/lists"}