Troubleshooting
Find the message printed by since-cutoff below. Replace example package, model and file names
with the ones in your output.
No dependency could be checked
No dependency could be checked means the dependency list was read, but every package was
skipped. Read the per-package reasons immediately above it. For connection failures, check
that PyPI is reachable; corporate proxies may need HTTPS_PROXY / NO_PROXY, and a company
TLS certificate may need SSL_CERT_FILE. These settings are used by
net.py.
For private packages, see private-index support (#43);
do not paste tokens or internal URLs into a public issue.
After correcting the reported cause, retry since-cutoff scan. It needs network access for
uncached package metadata and sources, but makes no model calls. The condition for this message
and exit code 1 is in
cli.py.
A package was skipped: download limit or no importable modules
For MB download limit (--max-download-mb), the distribution exceeds the configured size
limit. Inspect the package and reported size before raising --max-download-mb to allow it.
For could not find importable modules in, the named archive has no discoverable Python
sources or stubs; check that the package/version is the one you intended. Raising a download
limit will not add missing sources. Both checks are in
pypi.py.
Not written: there is no terminal to ask in
Not written: there is no terminal to ask in means sync could not ask for confirmation,
for example in CI. It writes nothing and exits 3. The rest of the message names the fix:
use since-cutoff sync --check to check without writing, or since-cutoff sync --yes to
apply an intended update without prompting. Review the proposed diff before permitting writes.
See the sync exit-code table
and the confirmation path in
cli.py.
The since-cutoff block was edited by hand
For a block in AGENTS.md, the printed message starts
The since-cutoff block in AGENTS.md was edited by hand; sync would replace it.
The file name follows the target you chose. sync and sync --check write nothing and exit 4.
Preserve your edits by moving them below the closing <!-- since-cutoff:end --> marker, as
the message says. If replacing those edits is intentional, use since-cutoff sync --force;
in CI, --yes is also needed to permit the write without prompting. The message is built by
edited_text() in
sync.py,
and cli.py
handles the exit code and confirmation.
Unknown model or missing training cutoff
unknown model '<id>' is followed by Pass its training cutoff explicitly; a known model
without a cutoff instead prints models.dev has no knowledge cutoff for '<id>'.
Check since-cutoff models for a recognized id, or pass --cutoff YYYY-MM or
--cutoff YYYY-MM-DD with the model’s documented training cutoff. Do not guess the date.
These errors are in
models.py;
the explicit-cutoff path bypasses that lookup in
engine.py.
Choosing a cutoff does not install or configure the model provider used by run.
An MCP client cannot find uvx or the first call times out
See the MCP setup and timeout guidance
for installing uv, supplying the full uvx path, warming the shared cache with
since-cutoff scan, and adjusting the client’s tool timeout for the first project_changes
call. These are client symptoms; their wording depends on the MCP client.
Claude Code does not read the notes in AGENTS.md
CLAUDE.md does not import AGENTS.md, so Claude Code does not read the notes in AGENTS.md
means the notes were written to AGENTS.md while CLAUDE.md does not import them. Add a line
@AGENTS.md to CLAUDE.md to keep one copy, as the rest of the message says.
CLAUDE.md does not import AGENTS.md, so the notes go to both files means both files got the
block so that every agent reads it;
CLAUDE.md imports AGENTS.md, so its since-cutoff block is a second copy of the notes
means the import was added after that. In either case, since-cutoff unapply --target CLAUDE.md
(after adding the import) leaves one copy. See the
file-selection guidance for keeping
notes in both files, and agents_import_tip() in
notes.py
for the condition that prints this tip.
the claude CLI was not found on PATH
The message the `claude` CLI was not found on PATH means the Claude Code provider could
not locate its executable. Install Claude Code and make it available in the environment
running since-cutoff, or select an already configured provider with --model.
providers/claude_code.py
checks the executable with shutil.which("claude") before starting the provider.
ANTHROPIC_API_KEY is not set
ANTHROPIC_API_KEY is not set means the Anthropic HTTP provider cannot find its key in the
current process environment. Set it privately in the environment that runs since-cutoff run,
or choose a provider you have already configured. Other HTTP providers name their required
key in the same way; see
providers/http_api.py.
Never put the key in a bug report or diagnostic log. scan, sync, status and the MCP
inspection tools do not call a model and need no model-provider key.
run checks the model’s answers with the basedpyright type checker, which is not installed
run checks the model's answers with the basedpyright type checker, which is not installed: pip install "since-cutoff[run]", or uvx --with basedpyright since-cutoff run
means the Python environment that runs since-cutoff has no basedpyright. Only run type-checks
anything, so basedpyright (with the Node.js it brings, about 180 MB) is the run extra in
pyproject.toml,
not a required dependency: scan, sync, status and the MCP server never use it. Install the
extra in that same environment with pip install "since-cutoff[run]" (or
pipx install "since-cutoff[run]"), or add it to one run without installing anything with
uvx --with basedpyright since-cutoff run. run stops with this message before the scan and
before any model call, so nothing was spent.
checker.py
uses a basedpyright executable on PATH, else the installed module with that environment’s
Python executable.
When reporting a bug, include the command, since-cutoff --version, OS/Python versions and the
sanitized diagnostic. Leave out API keys, private package-index URLs and customer source code.