Unofficial CLI for the Artemis learning platform
Project description
artemis-cli
Unofficial command-line interface for the Artemis learning platform.
Works with any self-hosted Artemis instance — KIT, TUM, TU Darmstadt, and more.
Features
- Students — browse courses and exercises, view problem statements
- Tutors — lock submissions, grade interactively, submit assessments, manage complaints
- Instructors — list and export submissions, submit external results
- Secure auth — JWT stored in system keyring; SSO (university login) supported via token paste
- AI grading assistant — Claude Code skill that fetches a submission and generates structured feedback for review
Installation
pip install artemis-cli
Or from source:
git clone https://github.com/wiestju/artemis-cli
cd artemis-cli
pip install -e .
Requires Python 3.10+.
Authentication
University / SSO login (KIT, TUM, …)
Most Artemis instances (including KIT) use SSO and do not accept password login via the API.
- Log in at your Artemis instance in the browser
- Open DevTools → Application → Cookies
- Copy the value of the
jwtcookie - Run:
artemis login --server https://artemis.cs.kit.edu --token <jwt>
The token is stored securely in your system keyring. Re-run this command when the token expires (usually after a few days).
Internal accounts (non-SSO instances)
artemis login --server https://your-artemis.example.com
# prompts for username and password
Quickstart
# See your courses
artemis courses list
# Exercises in a course
artemis courses exercises 42
# Read an exercise
artemis exercises view 123
# --- Tutor workflow ---
# How many submissions are left to grade?
artemis exercises dashboard 123
# Get the next submission to grade (locks it)
artemis exercises next 123
# Grade it interactively
artemis assess interactive <participation_id>
# Or submit a prepared JSON assessment
artemis assess submit <participation_id> --feedbacks feedbacks.json
# Changed your mind? Release the lock
artemis assess cancel <submission_id>
# View the submission content
artemis submissions view <participation_id>
# Check existing result + feedbacks
artemis submissions result <participation_id>
# Complaints
artemis complaints list 123
artemis complaints respond <complaint_id>
Command Reference
Auth
| Command | Description |
|---|---|
artemis login |
Authenticate and store credentials |
artemis logout |
Clear stored credentials |
artemis whoami |
Show current server and token status |
Options for login:
--server/-s— Artemis server URL--token/-t— Paste JWT directly (for SSO instances)--username/-u— Username (non-SSO only)--password/-p— Password (non-SSO only)
Courses
| Command | Description |
|---|---|
artemis courses list |
List enrolled courses with your role |
artemis courses exercises <course_id> |
List exercises for a course |
Exercises
| Command | Description |
|---|---|
artemis exercises view <id> |
Show exercise details and problem statement |
artemis exercises dashboard <id> |
Assessment progress stats (tutor+) |
artemis exercises next <id> |
Lock and display the next unassessed submission |
artemis exercises submissions <id> |
List all submissions (instructor only) |
Options for exercises next:
--correction-round 0\|1— First or second correction round (default:0)
Submissions
| Command | Description |
|---|---|
artemis submissions view <participation_id> |
Show latest submission content |
artemis submissions result <participation_id> |
Show assessed result and all feedbacks |
artemis submissions download <participation_id> |
Save file-upload submission to disk |
Options for submissions download:
--output/-o— Output file path (default:submission_<id>.zip)
Assess
| Command | Description |
|---|---|
artemis assess interactive <participation_id> |
Interactive grading REPL |
artemis assess submit <participation_id> |
Submit a pre-built assessment |
artemis assess cancel <submission_id> |
Release a locked submission without grading |
artemis assess external <exercise_id> |
Submit result for a student without a participation |
Options for assess submit:
--type text\|modeling\|file-upload\|programming(default:text)--feedbacks/-f— JSON array or path to.jsonfile--result-id— Update an existing result--note— Internal assessor note--draft— Save without finalising
Options for assess external:
--student— Student login (e.g.uXXXX) (required)--score— Score as a number (required)--feedbacks/-f— JSON array or path to.jsonfile
Complaints
| Command | Description |
|---|---|
artemis complaints list <exercise_id> |
List grade complaints |
artemis complaints feedback-list <exercise_id> |
List more-feedback requests |
artemis complaints respond <complaint_id> |
Respond to a complaint |
artemis complaints unlock <complaint_id> |
Release a locked complaint |
Options for complaints respond:
--text/-t— Response text (prompted if omitted)--accept/--reject— Decision (prompted if omitted)
Feedback JSON format
Used with assess submit --feedbacks and assess external --feedbacks:
[
{
"text": "Good explanation of the concept",
"detailText": "See section 2",
"credits": 3.0,
"type": "MANUAL_UNREFERENCED"
},
{
"text": "Missing error handling",
"credits": -1.0,
"type": "MANUAL_UNREFERENCED"
}
]
Tutor workflow
artemis exercises dashboard <exercise_id> # check progress
artemis exercises next <exercise_id> # lock next submission
# → note the participation_id
artemis submissions view <participation_id> # read the submission
artemis assess interactive <participation_id> # grade it
To undo a lock without grading:
artemis assess cancel <submission_id>
AI grading assistant (Claude Code skill)
The repo ships a ready-to-use Claude Code skill at .claude/skills/artemis-grade.md.
Setup:
- Install the AI extras:
pip install 'artemis-cli[ai]' - Add your Anthropic API key to
.env:ANTHROPIC_API_KEY=sk-ant-... - Make sure you are authenticated:
artemis whoami
Usage inside Claude Code:
/artemis-grade
Claude will ask for a participation_id and exercise_id, fetch the submission and exercise description, generate structured feedback, let you review and edit it, then submit to Artemis on confirmation.
The skill is purely read-then-submit — it never modifies data without your explicit approval.
Credential storage
- Server URL is stored in
~/.artemis/config.json - JWT token is stored in the system keyring (macOS Keychain, Windows Credential Manager, Linux Secret Service) if available, otherwise in
~/.artemis/config.jsonwith permissions600
Running the tests
Integration tests run against a live Artemis instance. Copy .env.example to .env and fill in your credentials:
pip install -e ".[dev]"
cp .env.example .env
# fill in ARTEMIS_TOKEN (or ARTEMIS_USERNAME + ARTEMIS_PASSWORD)
pytest
All IDs (course, exercise) are auto-detected — no manual configuration needed.
Compatibility
Tested against Artemis 8.x (KIT instance). The API structure has changed across versions; if you encounter unexpected 404s, your instance may be running an older release.
Contributing
Contributions are very welcome — this project is intentionally open for the community to extend.
Good first contributions:
- Support for additional Artemis API endpoints (programming exercises, quiz results, exam management)
- Additional Claude Code skills (e.g.
/artemis-dashboard,/artemis-complaints) - Better output formatting or export options (CSV, JSON)
- Support for other Artemis instances (configure your university's URL in
.env) - Improved test coverage against real Artemis instances
How to contribute:
- Fork the repo and create a branch:
git checkout -b feature/my-feature - Install dev dependencies:
pip install -e ".[dev]" - Make your changes and run the tests:
pytest - Open a pull request — describe what you changed and why
Please open an issue first for larger changes so we can discuss the approach before you invest time writing code.
License
MIT
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 artemis_lms_cli-0.1.0.tar.gz.
File metadata
- Download URL: artemis_lms_cli-0.1.0.tar.gz
- Upload date:
- Size: 21.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b5ab8a93a292e9f88c24fe1e1f3c74dbda26398133029fe57915794dbdb1c33
|
|
| MD5 |
66c76a693f0da4a5ad2f18a7712520dd
|
|
| BLAKE2b-256 |
f67c837bd410f41b1e3777906c526e13cf13b65e977be983c51cddd904b9ea5c
|
File details
Details for the file artemis_lms_cli-0.1.0-py3-none-any.whl.
File metadata
- Download URL: artemis_lms_cli-0.1.0-py3-none-any.whl
- Upload date:
- Size: 21.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7087d2246209aa4e67a4682b32e80fc64679bcae954b940366caad2fdb4ba3dd
|
|
| MD5 |
70504e34a28ddc9436994457c537fc19
|
|
| BLAKE2b-256 |
be81c8d28d43cf2e9b3cd625b965f5bdbfc25008cbaa4f88421b61a236024155
|