Northwestern University CLI
Project description
nul-cli
Northwestern University Libraries command-line tooling.
nul installs AI-assistant skills for Northwestern University Libraries workflows. It reads the
NUL community catalog — a Claude
Code plugin marketplace — and writes each plugin's SKILL.md files into the
agent skill directories used by Codex, ChatGPT, Cursor, and similar tools.
Two install paths from one source of truth:
- Claude Code users can add the catalog directly with
/plugin marketplace add nulib-labs/nul-skillsand then/plugin install <plugin>@nul-skills—nul-cliis not required. - Codex, ChatGPT, Cursor, and other clients use
nul skills add <plugin>to install the plugin's skills into.agents/skills/.
nul also installs a generated nul-cli skill that documents the CLI's own
command tree.
Installation
Installation via uv:
uv tool install nul-cli
nul --help
Run without installing:
uvx --from nul-cli nul --help
Installation via pip:
pip install nul-cli
nul --help
Usage
nul --help
nul skills --help
List available plugins (community catalog + the generated nul-cli skill):
nul skills list
Preview a plugin's skill (defaults to the only skill if there's just one;
otherwise pass <plugin>:<skill>):
nul skills preview meadow
nul skills preview meadow:run-tests
Install the generated nul-cli skill:
nul skills add
Install all skills from a community plugin. Community skills are installed into
flat namespaced directories (<plugin>-<skill>) to avoid collisions across
plugins:
nul skills add meadow
# installs .agents/skills/meadow-run-tests/
Install one specific skill from a multi-skill plugin:
nul skills add meadow:run-tests
Upgrade installed skills (compares the recorded revision against the upstream commit SHA at each plugin's path):
nul skills upgrade
Community Catalog Source
The catalog is fetched from nulib-labs/nul-skills (branch main). Each
install records the resolved commit SHA in .nul-skill-manifest.json, and
upgrade re-resolves to detect new commits touching that plugin's path.
Naming note. The catalog file is
.claude-plugin/marketplace.jsonand each entry is a plugin with its own.claude-plugin/plugin.jsonmanifest. These are Claude Code plugin marketplace conventions, kept verbatim so the samenul-skillsrepo can be added as a Claude plugin source. We use "community" as the user-facing term throughout the CLI.Plugins may also bundle commands, hooks, or MCP servers for Claude Code.
nul-cliignores those and only installs SKILL.md files — non-Claude clients will use those skills via their own agent skill discovery.
Override via env vars:
NUL_SKILLS_REPO—<owner>/<repo>to fetch from (defaultnulib-labs/nul-skills).NUL_SKILLS_REF— branch, tag, or commit SHA (defaultmain).NUL_SKILLS_PATH— local checkout to use instead of fetching. Useful when iterating on skills locally.GITHUB_TOKEN/GH_TOKEN— used (if set) to lift GitHub API rate limits.
Development
uv sync
uv run nul --help
uv run nul skills add --help
Running Tests
uv run pytest
Building
uv build
uv run twine check dist/*
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nul_cli-0.1.0a1.tar.gz.
File metadata
- Download URL: nul_cli-0.1.0a1.tar.gz
- Upload date:
- Size: 16.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b6c2c238b1254f13123597e1e4169c8321b7fddd26e1f443f70c69b852f53ca4
|
|
| MD5 |
13a9a90b2623ab185969de4d6f790a6b
|
|
| BLAKE2b-256 |
5b5f673027179d6f7752e4e5f2da0da921a0de8ad5194faee55061f89a06ef33
|
File details
Details for the file nul_cli-0.1.0a1-py3-none-any.whl.
File metadata
- Download URL: nul_cli-0.1.0a1-py3-none-any.whl
- Upload date:
- Size: 15.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d7da931d9444fbf000f9550042e1d93ba6ff61423fb1b93823cc30358115ad98
|
|
| MD5 |
478d34874468eec011697d113cdfeab3
|
|
| BLAKE2b-256 |
219fc9bb71487ab75302f3903c0ec22fe79f9e961b82a8b0aa47413d3ee5d7aa
|