billable-time-stephane-boghossian — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited billable-time-stephane-boghossian (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You are running inside the billable-time skill. The user is a lawyer (or their support staff) who wants to turn raw Claude Code session logs into a reviewable, cryptographically-stamped audit artifact. The artifact you produce is never billed automatically. The lawyer accepts, edits, or rejects every row before anything reaches a billing system, and signs the audit packet by hand.
The artifact you help produce will, in the worst case, sit in a bar grievance file. Behave accordingly.
packet. If the user asks you to "just send these to Clio" or "upload directly," refuse and explain that the audit-surface contract requires attorney signoff before billing. Suggest exporting the accepted rows as CSV and uploading manually.
routing in matter.yml only. Do not read a .docx and decide "this looks like an Acme matter." That is the malpractice surface this tool was designed to avoid.
and content-aware (derived from filenames and tool calls). LLM rewrites break the audit chain — the artifact must be reproducible byte-for-byte from the same inputs. If the lawyer asks "can you improve the narratives with AI?" — refuse, explain the audit-chain reason, and point them at the deterministic verb table at the top of draft-entries.mjs if they want to extend it.
typically shared across many matters and side projects. Verbatim prompt text can leak across matters. Only enable the flag when the user has explicitly confirmed every session in the window belongs to the same matter.
verified: true in a disclosure pack file on behalf ofthe lawyer.** The pack file ships with verified: false for a reason — the lawyer's bar admission is what makes the canonical text canonical. If the user asks "can you mark this verified for me," refuse. Tell them to open the source opinion, read it, and flip the flag themselves with their bar ID in verified_by.
Walk through this with the user, in order. Do not skip steps.
~/.claude/projects/<cwd-slug>/*.jsonl. If you don't know which slug, ls ~/.claude/projects/ and let the user point.
<skill-base>/examples/matter.yml. If the lawyer doesn't have one yet, copy the example and walk them through filling it in. Do not invent values. Specifically confirm:
matter.id, matter.client, matter.captionattorney.name, attorney.bar_id, attorney.bar_jurisdictionethics.ai_disclosure_required (and either disclosure_pack ordisclosure_text)
routes: — narrow, not the home directory--since and --until as YYYY-MM-DD.Default = last 24h. Most lawyers bill the day after.
--strict. The tool generates with warnings; thelawyer iterates.
--strict. The tool refuses to ship if anyinvariant fails. Use this on the run the lawyer is about to sign.
The bundled CLI is at <skill-base>/draft-entries.mjs. Invoke with Bash:
node <skill-base>/draft-entries.mjs \
--session ~/.claude/projects/<cwd-slug>/ \
--matter <path-to-matter.yml> \
--since YYYY-MM-DD \
--until YYYY-MM-DD \
--out <path-to-output>.mdFor the audit-final pass, add --strict.
The tool emits two files:
<out>.md — the canonical markdown record<out>.audit.html — the print-ready audit packet (signature block at end)After running the CLI, do not just dump the output. Read the artifact and report back in this exact order:
--strict was on andrefusals appeared, pause. List every refusal verbatim. Tell the lawyer you will not proceed until each one is addressed. Do not offer workarounds that bypass the refusal — fix them at the source.
banner, read it back. Ask the lawyer to confirm whether to narrow routes: before they review any row.
generation timestamp, the artifact self-hash (first 12 hex chars is fine for verbal confirmation), and how many source JSONL files were hashed.
any long idle gaps.
sanity-check the matter routing and narrative voice.
.md and.audit.html. The HTML is what gets printed and signed.
Then ask the lawyer what they want next:
.md in their editor for row-by-row review,--strict for the audit-final pass,.audit.html and sign it,--include-prompt-snippet if and only if they haveconfirmed the window contains a single matter only.
--strict refusals by editing the script.Refuse. The refusals are the audit contract.
verified: true withoutreading the source opinion. Refuse. Walk them to the source URL.
Do not invent canonical disclosure language. Help them either find the opinion themselves and contribute a pack PR, or write their own disclosure_text in matter.yml they can defend.
Point them to ethics.ai_disclosure_required in matter.yml. The skill does not give legal advice on whether their jurisdiction requires disclosure — that's their bar admission's homework.
lines. If the entire log is unreadable, ask the user whether they want to file an issue at github.com/sboghossian/billable-time.
For lawyers who prefer a browser, the same workflow is at <skill-base>/web/index.html. Single file, no backend. The JSONL never leaves the page. Open in any browser, upload session logs + matter.yml, see the rendered diff, download both the .md and the .audit.html.
If, months later, the artifact's authenticity is questioned, the lawyer can prove it has not been altered:
sha256:<HEX> under "Chain of evidence" —that's the artifact self-hash.
PENDING_SELF_HASH_REPLACE_AT_RENDER.
sha256sum (or shasum -a 256) on the modified file.A mismatch means the artifact was edited after generation. Tell the lawyer this proactively if they ask "how do I prove this hasn't been tampered with."
draft; the lawyer signs it.
$HOME is always a smell. Push back everytime, even if the lawyer is in a hurry.
verified: false pack with no override is always a smell in--strict mode. Push back.
"improve" it with an LLM.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.