Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
blank_issues_enabled: false
contact_links:
- name: Security vulnerability
url: https://github.com/eduardoborjas/magnus-cli/security/policy
url: https://github.com/aedneth/magnus-cli/security/policy
about: Please report security issues privately per SECURITY.md, not as public issues.
- name: Commercial license inquiry
url: mailto:eduardoa.borjas@gmail.com
Expand Down
12 changes: 10 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ All notable changes to this project are documented here. The format is based on

## [Unreleased]

## [0.1.0] — 2026-06-02

### Added

- Initial project scaffold: TypeScript + ESM, `tsup` bundler, Vitest, ESLint/Prettier, CI.
- Initial project scaffold: TypeScript + ESM, `tsup` bundler, Vitest, ESLint/Prettier, CI matrix (ubuntu/macos/windows × node 20/22).
- Download core: ordered platform detection (`music.youtube.com` before `youtube.com`),
audio/video flag builders, configurable output-folder map, `yt-dlp` subprocess wrapper.
- Commands: `download` (default), `audio`, `batch`, `capture`, `stats`, `config`,
Expand All @@ -20,4 +22,10 @@ All notable changes to this project are documented here. The format is based on
never-store-expiring-MP4 rule.
- Dual licensing: AGPL-3.0 + commercial.

[Unreleased]: https://github.com/eduardoborjas/magnus-cli/commits/main
### Fixed

- CI workflow: moved `npm run build` before `npm test` so `dist/cli.js` exists when agent-mode integration tests run.
- CLI stdout flushing: replaced `process.exit()` with `process.exitCode` assignment to prevent pipe-buffer truncation on macOS + Node 20 for large JSON outputs (e.g. `magnus manifest --json`).

[Unreleased]: https://github.com/aedneth/magnus-cli/compare/v0.1.0...HEAD
[0.1.0]: https://github.com/aedneth/magnus-cli/releases/tag/v0.1.0
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Thanks for your interest in improving Magnus! This guide covers the basics.
## Development setup

```bash
git clone https://github.com/eduardoborjas/magnus-cli.git
git clone https://github.com/aedneth/magnus-cli.git
cd magnus-cli
npm install
npm run build
Expand Down
20 changes: 19 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@

**Universal `yt-dlp` media downloader + Apify-driven social-capture pipeline — built for humans *and* terminal AI agents.**

[![CI](https://github.com/eduardoborjas/magnus-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/eduardoborjas/magnus-cli/actions/workflows/ci.yml)
[![CI](https://github.com/aedneth/magnus-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/aedneth/magnus-cli/actions/workflows/ci.yml)
[![npm](https://img.shields.io/npm/v/magnus.svg)](https://www.npmjs.com/package/magnus)
[![License: AGPL-3.0](https://img.shields.io/badge/license-AGPL--3.0%20%2B%20Commercial-blue.svg)](#license)
[![Node](https://img.shields.io/badge/node-%3E%3D20-brightgreen.svg)](https://nodejs.org)

Expand Down Expand Up @@ -67,6 +68,14 @@ magnus config list # show resolved config

> **Tip:** always quote URLs containing `&`, or your shell will background the command.

## Why magnus?

**vs raw `yt-dlp`:** Every platform needs different flags, different output paths, and different post-processing. Magnus encodes those rules once — `music.youtube.com` always goes to `~/Music/YT Music/`, YouTube video always goes to `~/Videos/Social Media/YouTube/`, TikTok always strips the watermark — so you type one command and get the right file, in the right place, every time. It also wraps every operation in a clean JSON envelope, making `yt-dlp`-backed workflows scriptable and CI-safe.

**vs browser extensions:** Browser extensions are one-at-a-time, TTY-dependent, and invisible to scripts and agents. Magnus runs headless, accepts URLs from stdin, and pipelines into `jq`, shell scripts, Claude Code, and CI jobs. `cat urls.txt | magnus batch - --json` is a valid production command.

**vs manual Apify runs:** Apify's web UI has no spend controls, no resume capability, and returns raw JSON with no rendering. Magnus adds a `$40-abort / $50-hard-cap` canary gate, per-platform SQLite resume queues (restart any run from where it stopped), and renders results directly into CKIS/Obsidian Markdown — one command from saved posts to vault notes.

## Configuration

Config lives under XDG paths (`~/.config/magnus/` on Linux):
Expand All @@ -80,6 +89,15 @@ magnus config path # print the resolved config directory
magnus config set capture.budgetHardCapUsd 50
```

## Roadmap

- [x] **v0.1.0** — download core (ordered platform detection, audio/video flag sets, output-folder map), Apify capture pipeline (SQLite queues, canary, spend caps, CKIS Markdown), full agent-native layer (`--json`, `--yes`, manifest, MCP server), dual AGPL-3.0 + commercial license
- [ ] **v0.2.0** — interactive Ink v5 TUI: live progress bars, download spinners, capture cost dashboard
- [ ] **v0.3.0** — `magnus doctor` full auto-fix mode, `npm publish` pipeline, first public npm release
- [ ] **v0.4.0** — playlist support, concurrent download pool, per-item retry with back-off
- [ ] **v0.5.0** — capture queue management TUI, per-actor Apify cost breakdown, queue drain/pause commands
- [ ] **v1.0.0** — stable public API, full docs site, public launch

## License

Magnus is **dual-licensed**:
Expand Down
Loading
Loading