https://github.com/zaydiscold/last365days-skill
Claude Code skill for persistent research tracking. Wraps last30days with per-person/topic running logs.
https://github.com/zaydiscold/last365days-skill
Last synced: 9 days ago
JSON representation
Claude Code skill for persistent research tracking. Wraps last30days with per-person/topic running logs.
- Host: GitHub
- URL: https://github.com/zaydiscold/last365days-skill
- Owner: zaydiscold
- License: mit
- Created: 2026-03-12T23:12:32.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-03-31T00:55:45.000Z (3 months ago)
- Last Synced: 2026-03-31T04:27:03.194Z (3 months ago)
- Language: Python
- Size: 215 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
last365days-skill
Persistent research tracking for people, brands, and topics. This skill wraps
a bundled research engine derived from
last30days and
saves each run into a dated Markdown timeline.
## What it does
The bundled research engine can research a topic deeply, but the output is
ephemeral. Once the session ends, you lose the accumulated context.
`last365days` adds persistence on top of that workflow.
Each run appends a dated section to a single Markdown file for that person or
topic. Over time, that file becomes a timeline you can revisit, diff, export,
and extend.
## Compatibility matrix
This repo is runtime-agnostic at the file level and ships its own research
engine.
| Runtime | Supported | Notes |
| --- | --- | --- |
| Claude Code | Yes | Native skill workflow and `CLAUDE_SKILL_DIR` path support |
| Codex | Yes | Reads the same skill files and Python helper |
| Cursor | Yes | Works as a repo-backed skill with the same persistence layer |
| OpenClaw | Yes | Uses the same Markdown storage model |
| Python CLI only | Partial | `persist.py` commands work directly without the skill wrapper |
## Install
`last365days` is standalone. It vendors `scripts/last30days.py` plus its
supporting library, so users do not need a separate `last30days` install.
The bundled engine keeps Bird/X behavior inside this repo. Output, cache, and
config paths default to `last365days` namespaces:
- `~/.local/share/last365days/out`
- `~/.cache/last365days`
- `~/.config/last365days`
To install globally:
```bash
npx skills add zaydiscold/last365days-skill@last365days -g -y
```
To install for one agent only:
```bash
npx skills add zaydiscold/last365days-skill@last365days -y
```
By default, saved research goes to `~/Desktop/last365days/`. Override that
directory with `LAST365DAYS_DIR`.
`persist.py` reads stats from `~/.local/share/last365days/out/report.json` by
default. Override that location with `LAST365DAYS_OUTPUT_DIR` or the
`--report-path` flag.
## Usage
The main skill entry point is `/last365days`.
```bash
/last365days kanye west
/last365days AI video tools
```
Run it again later on the same topic and the skill appends a new dated entry:
```bash
/last365days kanye west
```
If the match is exact or high confidence, the skill appends automatically. If
the match is only medium confidence, the skill now asks the user to confirm
whether it should reuse the existing file or create a new one.
To browse existing profiles:
```bash
/last365days
```
## Persist CLI reference
`last365days/scripts/persist.py` is the persistence layer behind the skill. You
can run it directly when you want diagnostics or structured exports.
### Core commands
These commands are the ones the skill depends on during normal use.
```bash
python3 last365days/scripts/persist.py list
python3 last365days/scripts/persist.py match "Kanye West"
python3 last365days/scripts/persist.py history "kanye-west"
python3 last365days/scripts/persist.py read "kanye-west"
python3 last365days/scripts/persist.py search "founder mode"
python3 last365days/scripts/persist.py slugify "Kanye West"
```
### New v1.1 commands
These commands improve trust, debugging, and operability.
```bash
python3 last365days/scripts/persist.py doctor
python3 last365days/scripts/persist.py diff "kanye-west" 2026-03-05 2026-04-05
python3 last365days/scripts/persist.py export "kanye-west" --format json
python3 last365days/scripts/persist.py export --all --format csv
```
`doctor` checks:
- whether the research directory exists or can be created
- whether the last365days output directory is available
- whether `report.json` is readable and shaped like a valid report
- whether the bundled research engine is present
- whether optional `qmd` indexing is available
`diff` compares two saved date blocks from the same profile using a deterministic
unified diff.
`export` lets you move data out of the Markdown files without hand parsing:
- `export --format md|json|csv`
- `export --all --format json|csv`
## How it works
The runtime behavior is split cleanly between the skill instructions and the
Python helper.
```text
/last365days
│
▼
SKILL.md
1. List existing profiles
2. Match against existing files
3. Ask for confirmation on medium-confidence matches
4. Run bundled research
5. Synthesize and compare against history
6. Persist the new entry
│
▼
persist.py
- appends Markdown entries
- reads report.json for stats
- exposes history/search/diff/export/doctor commands
```
Saved files live in `~/Desktop/last365days/` by default:
```text
~/Desktop/last365days/
├── kanye-west.md
├── taylor-swift.md
├── ai-video-tools.md
└── ...
```
The Markdown format is documented in
`last365days/references/file-format.md`.
## Repository map
If you need to understand where to look before changing something, start here.
- `last365days/SKILL.md`: runtime workflow, matching rules, and user-facing
research behavior
- `last365days/scripts/last30days.py`: bundled research engine entry point
- `last365days/scripts/lib/`: bundled research engine support modules
- `last365days/scripts/persist.py`: persistence CLI, storage parsing, exports,
diffs, and diagnostics
- `last365days/references/file-format.md`: profile file structure and same-day
update format
- `last365days/references/operations.md`: browse, export, diff, and
troubleshooting flows that are intentionally kept out of the main skill path
- `tests/test_persist.py`: CLI regression coverage for slugify, matching,
history, search, doctor, diff, and export
- `.github/workflows/ci.yml`: syntax check plus test execution on push and pull
request
## Testing and CI
This repo now includes a minimal built-in Python test suite and a GitHub Actions
workflow.
Run everything locally with:
```bash
python3 -m compileall last365days tests
python3 -m unittest discover -s tests -v
```
CI runs the same two checks on every push to `main` and on pull requests.
## Known limitations
The current design stays intentionally lean. A few limits are deliberate.
- Medium-confidence matches still rely on user confirmation rather than richer
identity metadata.
- `diff` compares whole dated Markdown blocks. It does not produce semantic
summaries.
- `export --all --format md` is not supported.
- Source stats depend on a compatible `report.json` produced by the bundled engine.
- There are no destructive workflows yet for merge, delete-entry, or
delete-profile.
- File writes are simple append operations. There is no broad locking or atomic
rewrite strategy yet.
## v1.2 backlog
These items are intentionally deferred because they add more risk than the v1.1
changes.
- `merge`, `delete-entry`, and `delete-profile` with backup and confirmation
- profile metadata blocks such as aliases, canonical handles, and timestamps
- broader locking and atomic rewrite strategy for concurrent edits
## Changelog
### v1.2.1
- trimmed vendored Bird dependency files that are not needed at runtime (`.d.ts` and source maps)
- re-verified the bundled engine, diagnostics, and test suite after the trim
### v1.2.0
- vendored the `last30days` research engine into this repo so `last365days` works standalone
- moved default output, cache, and config paths to `last365days` namespaces
- updated docs and diagnostics to validate the bundled engine instead of an external install
### v1.1.1
- clarified X/Twitter behavior and Bird troubleshooting
### v1.1.0
- added `doctor` diagnostics for path, dependency, and `report.json` validation
- added `diff ` for deterministic profile comparisons
- added `export` support for Markdown, JSON, and CSV outputs
- added a test suite for core CLI behavior
- added GitHub Actions CI for syntax and tests
- changed medium-confidence matches to require explicit user confirmation
- expanded documentation with a repo map, command reference, and known limits
### v1.0.1
- added Anthropic skill guide metadata and compatibility frontmatter
- moved file format details into `references/file-format.md`
- added troubleshooting and better trigger phrases
- added `search` plus CLI path overrides for `persist.py`
- improved Unicode slug handling and deterministic fallback slugs
- guarded the `qmd` after-hook so it only runs when available
### v1.0.0
- shipped persistent per-person and per-topic Markdown timelines
- wrapped `last30days` research output in a reusable profile model
- added same-day duplicate handling and automatic source stats