{"id":50713519,"url":"https://github.com/zaydiscold/last365days-skill","last_synced_at":"2026-06-09T17:03:09.920Z","repository":{"id":344067344,"uuid":"1180312556","full_name":"zaydiscold/last365days-skill","owner":"zaydiscold","description":"Claude Code skill for persistent research tracking. Wraps last30days with per-person/topic running logs.","archived":false,"fork":false,"pushed_at":"2026-03-31T00:55:45.000Z","size":220,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-31T04:27:03.194Z","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/zaydiscold.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-12T23:12:32.000Z","updated_at":"2026-03-31T00:55:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/zaydiscold/last365days-skill","commit_stats":null,"previous_names":["zaydiscold/last365days-skill"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zaydiscold/last365days-skill","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zaydiscold%2Flast365days-skill","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zaydiscold%2Flast365days-skill/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zaydiscold%2Flast365days-skill/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zaydiscold%2Flast365days-skill/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zaydiscold","download_url":"https://codeload.github.com/zaydiscold/last365days-skill/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zaydiscold%2Flast365days-skill/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34116461,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"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":"2026-06-09T17:03:09.091Z","updated_at":"2026-06-09T17:03:09.913Z","avatar_url":"https://github.com/zaydiscold.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003elast365days-skill\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  Persistent research tracking for people, brands, and topics. This skill wraps\n  a bundled research engine derived from\n  \u003ca href=\"https://github.com/mvanhorn/last30days-skill\"\u003elast30days\u003c/a\u003e and\n  saves each run into a dated Markdown timeline.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/skill-v1.2.1-B4A7D6?style=flat-square\u0026labelColor=1a1a2e\" alt=\"skill version\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/license-MIT-D4AF37?style=flat-square\u0026labelColor=1a1a2e\" alt=\"license\" /\u003e\n\u003c/p\u003e\n\n## What it does\n\nThe bundled research engine can research a topic deeply, but the output is\nephemeral. Once the session ends, you lose the accumulated context.\n`last365days` adds persistence on top of that workflow.\n\nEach run appends a dated section to a single Markdown file for that person or\ntopic. Over time, that file becomes a timeline you can revisit, diff, export,\nand extend.\n\n## Compatibility matrix\n\nThis repo is runtime-agnostic at the file level and ships its own research\nengine.\n\n| Runtime | Supported | Notes |\n| --- | --- | --- |\n| Claude Code | Yes | Native skill workflow and `CLAUDE_SKILL_DIR` path support |\n| Codex | Yes | Reads the same skill files and Python helper |\n| Cursor | Yes | Works as a repo-backed skill with the same persistence layer |\n| OpenClaw | Yes | Uses the same Markdown storage model |\n| Python CLI only | Partial | `persist.py` commands work directly without the skill wrapper |\n\n## Install\n\n`last365days` is standalone. It vendors `scripts/last30days.py` plus its\nsupporting library, so users do not need a separate `last30days` install.\n\nThe bundled engine keeps Bird/X behavior inside this repo. Output, cache, and\nconfig paths default to `last365days` namespaces:\n\n- `~/.local/share/last365days/out`\n- `~/.cache/last365days`\n- `~/.config/last365days`\n\nTo install globally:\n\n```bash\nnpx skills add zaydiscold/last365days-skill@last365days -g -y\n```\n\nTo install for one agent only:\n\n```bash\nnpx skills add zaydiscold/last365days-skill@last365days -y\n```\n\nBy default, saved research goes to `~/Desktop/last365days/`. Override that\ndirectory with `LAST365DAYS_DIR`.\n\n`persist.py` reads stats from `~/.local/share/last365days/out/report.json` by\ndefault. Override that location with `LAST365DAYS_OUTPUT_DIR` or the\n`--report-path` flag.\n\n## Usage\n\nThe main skill entry point is `/last365days`.\n\n```bash\n/last365days kanye west\n/last365days AI video tools\n```\n\nRun it again later on the same topic and the skill appends a new dated entry:\n\n```bash\n/last365days kanye west\n```\n\nIf the match is exact or high confidence, the skill appends automatically. If\nthe match is only medium confidence, the skill now asks the user to confirm\nwhether it should reuse the existing file or create a new one.\n\nTo browse existing profiles:\n\n```bash\n/last365days\n```\n\n## Persist CLI reference\n\n`last365days/scripts/persist.py` is the persistence layer behind the skill. You\ncan run it directly when you want diagnostics or structured exports.\n\n### Core commands\n\nThese commands are the ones the skill depends on during normal use.\n\n```bash\npython3 last365days/scripts/persist.py list\npython3 last365days/scripts/persist.py match \"Kanye West\"\npython3 last365days/scripts/persist.py history \"kanye-west\"\npython3 last365days/scripts/persist.py read \"kanye-west\"\npython3 last365days/scripts/persist.py search \"founder mode\"\npython3 last365days/scripts/persist.py slugify \"Kanye West\"\n```\n\n### New v1.1 commands\n\nThese commands improve trust, debugging, and operability.\n\n```bash\npython3 last365days/scripts/persist.py doctor\npython3 last365days/scripts/persist.py diff \"kanye-west\" 2026-03-05 2026-04-05\npython3 last365days/scripts/persist.py export \"kanye-west\" --format json\npython3 last365days/scripts/persist.py export --all --format csv\n```\n\n`doctor` checks:\n\n- whether the research directory exists or can be created\n- whether the last365days output directory is available\n- whether `report.json` is readable and shaped like a valid report\n- whether the bundled research engine is present\n- whether optional `qmd` indexing is available\n\n`diff` compares two saved date blocks from the same profile using a deterministic\nunified diff.\n\n`export` lets you move data out of the Markdown files without hand parsing:\n\n- `export \u003cslug\u003e --format md|json|csv`\n- `export --all --format json|csv`\n\n## How it works\n\nThe runtime behavior is split cleanly between the skill instructions and the\nPython helper.\n\n```text\n/last365days \u003ctopic\u003e\n        │\n        ▼\nSKILL.md\n  1. List existing profiles\n  2. Match against existing files\n  3. Ask for confirmation on medium-confidence matches\n  4. Run bundled research\n  5. Synthesize and compare against history\n  6. Persist the new entry\n        │\n        ▼\npersist.py\n  - appends Markdown entries\n  - reads report.json for stats\n  - exposes history/search/diff/export/doctor commands\n```\n\nSaved files live in `~/Desktop/last365days/` by default:\n\n```text\n~/Desktop/last365days/\n├── kanye-west.md\n├── taylor-swift.md\n├── ai-video-tools.md\n└── ...\n```\n\nThe Markdown format is documented in\n`last365days/references/file-format.md`.\n\n## Repository map\n\nIf you need to understand where to look before changing something, start here.\n\n- `last365days/SKILL.md`: runtime workflow, matching rules, and user-facing\n  research behavior\n- `last365days/scripts/last30days.py`: bundled research engine entry point\n- `last365days/scripts/lib/`: bundled research engine support modules\n- `last365days/scripts/persist.py`: persistence CLI, storage parsing, exports,\n  diffs, and diagnostics\n- `last365days/references/file-format.md`: profile file structure and same-day\n  update format\n- `last365days/references/operations.md`: browse, export, diff, and\n  troubleshooting flows that are intentionally kept out of the main skill path\n- `tests/test_persist.py`: CLI regression coverage for slugify, matching,\n  history, search, doctor, diff, and export\n- `.github/workflows/ci.yml`: syntax check plus test execution on push and pull\n  request\n\n## Testing and CI\n\nThis repo now includes a minimal built-in Python test suite and a GitHub Actions\nworkflow.\n\nRun everything locally with:\n\n```bash\npython3 -m compileall last365days tests\npython3 -m unittest discover -s tests -v\n```\n\nCI runs the same two checks on every push to `main` and on pull requests.\n\n## Known limitations\n\nThe current design stays intentionally lean. A few limits are deliberate.\n\n- Medium-confidence matches still rely on user confirmation rather than richer\n  identity metadata.\n- `diff` compares whole dated Markdown blocks. It does not produce semantic\n  summaries.\n- `export --all --format md` is not supported.\n- Source stats depend on a compatible `report.json` produced by the bundled engine.\n- There are no destructive workflows yet for merge, delete-entry, or\n  delete-profile.\n- File writes are simple append operations. There is no broad locking or atomic\n  rewrite strategy yet.\n\n## v1.2 backlog\n\nThese items are intentionally deferred because they add more risk than the v1.1\nchanges.\n\n- `merge`, `delete-entry`, and `delete-profile` with backup and confirmation\n- profile metadata blocks such as aliases, canonical handles, and timestamps\n- broader locking and atomic rewrite strategy for concurrent edits\n\n## Changelog\n\n### v1.2.1\n\n- trimmed vendored Bird dependency files that are not needed at runtime (`.d.ts` and source maps)\n- re-verified the bundled engine, diagnostics, and test suite after the trim\n\n### v1.2.0\n\n- vendored the `last30days` research engine into this repo so `last365days` works standalone\n- moved default output, cache, and config paths to `last365days` namespaces\n- updated docs and diagnostics to validate the bundled engine instead of an external install\n\n### v1.1.1\n\n- clarified X/Twitter behavior and Bird troubleshooting\n\n### v1.1.0\n\n- added `doctor` diagnostics for path, dependency, and `report.json` validation\n- added `diff \u003cslug\u003e \u003cdate1\u003e \u003cdate2\u003e` for deterministic profile comparisons\n- added `export` support for Markdown, JSON, and CSV outputs\n- added a test suite for core CLI behavior\n- added GitHub Actions CI for syntax and tests\n- changed medium-confidence matches to require explicit user confirmation\n- expanded documentation with a repo map, command reference, and known limits\n\n### v1.0.1\n\n- added Anthropic skill guide metadata and compatibility frontmatter\n- moved file format details into `references/file-format.md`\n- added troubleshooting and better trigger phrases\n- added `search` plus CLI path overrides for `persist.py`\n- improved Unicode slug handling and deterministic fallback slugs\n- guarded the `qmd` after-hook so it only runs when available\n\n### v1.0.0\n\n- shipped persistent per-person and per-topic Markdown timelines\n- wrapped `last30days` research output in a reusable profile model\n- added same-day duplicate handling and automatic source stats\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"./LICENSE\"\u003eMIT\u003c/a\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzaydiscold%2Flast365days-skill","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzaydiscold%2Flast365days-skill","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzaydiscold%2Flast365days-skill/lists"}