Skip to main content

Sijl

Sijl (سِجِلّ, Arabic for "a record, a register") — your work, on the record.

Sijl summarises your own git work for a review period — a quarter, a half year, the last six months — straight from the repositories already on your computer. It reads git history only: no accounts to connect, no tracker to fill in, nothing uploaded.

What it does

  • Finds your repositories under the folders you name, and your commits in them — matched by your exact email addresses, pushed or not, copies (rebases, cherry-picks) counted once.
  • Writes a review-ready Markdown report: a summary in sentences, highlights, per repository, per month, kinds of work, the merge requests and pull requests you delivered, Jira tickets, work not pushed yet, and Caveats saying what was left out and why. Every commit is linked to GitHub or GitLab.
  • Lets you ask an AI about your period with evidence: sijl digest writes a compact file with ids to cite for Claude Code or any AI chat; sijl ask asks Claude directly and checks every id the answer cites against your history.
  • Stays honest about its numbers: a fixed, stated rule for everything it picks, and the numbers are evidence of work, not a performance score.

A report starts like this (a made-up example):

# Work summary — Alex Example

**Period:** 1 April 2026 to 30 June 2026 (inclusive; by author date, in each commit's own timezone)

## Summary

Between 1 April 2026 and 30 June 2026 you authored **13 commits** on **13 active days** across
**3 repositories** — most in app (7), site (4), tools (2). Your longest streak was **3 weekdays**
in a row with commits, from 11 May 2026 to 13 May 2026 (…). 1 more commit is not pushed yet and
not in these numbers (see *Not pushed yet*). 5 merge requests and pull requests of yours were
merged, and you merged 1 for colleagues (see *Delivered*).

## Highlights

- **Busiest month:** April 2026 — 5 commits on 5 active days.
- **Largest merge requests and pull requests** (3 of 5, by commits of yours):
  - #13 Search — 2 commits of yours, in site, merged 2026-04-22
  - !42 Export the report (PROJ-12) — 2 commits of yours, in app, merged 2026-04-08
  …

Requirements

  • macOS or Linux. Windows is untested.
  • git 2.36 or newer (git --version).
  • uv, which installs Sijl and fetches Python 3.12 for it if your computer does not have it: brew install uv, or curl -LsSf https://astral.sh/uv/install.sh | sh.

Install

uv tool install git+https://github.com/ibnelhithem/sijl@v1.0.0
sijl --version                    # sijl 1.0.0

If your shell says sijl: command not found, run uv tool update-shell once and open a new terminal.

  • Upgrade: run the install command again with the newer version (…@v1.1.0).
  • Uninstall: uv tool uninstall sijl (your config file and saved reports stay; delete them yourself if you want them gone).

More, including installing from a downloaded wheel: docs/install.md.

First run

  1. See which config file Sijl reads:

    sijl config show
    

    The first line names it: ~/.config/sijl/config.toml, or $XDG_CONFIG_HOME/sijl/config.toml when that variable is set. It does not exist yet — create it:

    [identity]
    emails = ["you@example.com"]    # every address you commit with
    
    [scan]
    roots = ["~/code"]              # folders that hold your repositories
    
    [window]
    last = "6m"                     # or quarter = "2026Q3", half = "2026H1", year = 2026
    

    Not sure which addresses you commit with? Inside one of your repositories, git log -5 --format=%ae shows them. Use exactly those, and list them all (a work address, a personal one, GitHub's …@users.noreply.github.com). Every setting: docs/configuration.md.

  2. Check what it will read:

    sijl repos
    

    Every repository it found, once each, and every folder it skipped, with the reason (docs/repos.md).

  3. Write the report:

    sijl report --out ~/review.md
    

    Run it from outside your repositories (your home folder is fine): Sijl refuses to write a relative --out path into a repository it reads. Without --out the report is printed instead. Any flag overrides the file for one run, for example --quarter 2026Q3 or --root ~/code/work; sijl report --help lists them all.

  4. Read it, starting with Summary, Highlights and Caveats — the Caveats say what was not counted and why, before anyone else asks. What every section means: docs/report.md.

Asking AI — two tiers

Both tiers ask about the same evidence: your period's commits, merge requests, pull requests and tickets, each with an id the answer can cite.

Tier 1 — free, nothing sent by Sijl. Write the digest and give it to Claude Code (or attach it in any AI chat you use):

sijl digest --with-prompt --out digest.txt
claude 'Read digest.txt and answer: what did I deliver for ABC-123?'

Colleagues' names and email addresses are replaced by [person N] / [email N]; your own name and addresses, commit subjects, merge request and pull request titles, repository names and ticket keys are kept as written. Check your employer's policy on AI tools before you give the file to one. More: docs/digest.md.

Tier 2 — sijl ask, billed to you. With an Anthropic API key (create one at console.anthropic.com; usage is billed to your account):

export ANTHROPIC_API_KEY=…
sijl ai status                            # is AI on, and why
sijl ask "What did I deliver in Q3?"      # one question
sijl ask -i                               # follow-up questions, one yes for all

Nothing is sent before Sijl shows you exactly what will be sent, with a cost estimate, and you say yes. As a rough guide for six months of work: about $0.40–0.80 for the first question and about $0.02 for each follow-up, which re-reads the evidence from Claude's cache. The answer is shown as an AI-written block; the Evidence section after it is what Sijl verified — each id the answer cited, with your history's own line for it. Ids that are not in your evidence are marked. More: docs/ai.md.

Troubleshooting

You see What it means
no git repository found (exit 3) Nothing under your roots is a repository Sijl can read. Run sijl repos to see what it searched and why each folder was skipped; point roots at the folder that contains your repositories.
The report says "No commits by … were found" Your emails do not match your commits exactly. Run git log -5 --format=%ae in a repository and copy those addresses into emails — all of them.
--out … would write into the scanned repository … (exit 2) You ran it inside a repository with a relative path. Run it from your home folder, or give the full path the message suggests.
sijl: command not found Run uv tool update-shell and open a new terminal.

Exit codes: 0 done · 2 a usage or configuration error (the message names the flag or the setting) · 3 no repository found · 4 AI is off, failed or gave no complete answer · 5 an answer cites an id that is not in your evidence · 1 git is missing or failed.

Privacy

  • Everything runs on your computer. Sijl only reads git history: it never writes into your repositories and never runs commands a repository's own settings name.
  • No network — except sijl ask and sijl ai check, which send to Claude only after showing you what will be sent and getting your yes.
  • Reports and digests are files you choose to write; they contain your work history, so treat them like any other personal document.

Documentation

docs/ — install, configuration, the report, sijl repos, sijl digest, sijl ask. Contributing: CONTRIBUTING.md. Changes: CHANGELOG.md.

Licence

MIT © 2026 ibnelhithem.

Metadata

Release files for sijl 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sijl 1.0.1
File Size Uploaded Provenance
sijl-1.0.1.tar.gz 184.0 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for sijl 1.0.1
File Interpreter ABI Platform
sijl-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 384.9 kB

Release files / sijl-1.0.1.tar.gz

Download URL sijl-1.0.1.tar.gz
Size 184.0 kB
Tags Source
SHA-256 checksum
How to use checksums
ba8d69d6f8074ab247779ccdf665904649cd45c7fdc800cab0f72944e4c1d07d
BLAKE2b-256 checksum
How to use checksums
5971f219bea565b888a96220cad58f37fa73bdf3935fd154f44ce7bb3ce857cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 22, 2026.

Transparency log

Release files / sijl-1.0.1-py3-none-any.whl

Download URL sijl-1.0.1-py3-none-any.whl
Size 201.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f3692f0d42f0cb2f409b491effc75789585fa54919fbc6aa7dcf73fa8efa2482
BLAKE2b-256 checksum
How to use checksums
e74a1d1b4b3264f66ac0cd0159020b50abdfc423bc592eb6464e9317f8609dce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 22, 2026.

Transparency log

Security for sijl 1.0.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for sijl-1.0.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 22, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page