MERLIN deterministic autonomous assistant framework
Project description
MERLIN is an advanced agentic system built for reliability, determinism, and deep operating system integration.
Unlike traditional LLM wrappers that rely on chaotic ReAct loops and fragile prompt-injection execution, MERLIN introduces a strict four-layer cognitive architecture to separate intelligence (reasoning, comprehension) from physiology (execution, state mutation).
Core Philosophy: Intelligence is narrow, execution is broad. Structure replaces interpretation.
โจ Superpowers & Capabilities
MERLIN is equipped to operate as a JARVIS-level assistant, featuring robust OS integrations and advanced context management.
- ๐ป Advanced OS Manipulation: Natively control your OS via the
SystemController. Open, close, and focus applications, manage media playback, check hardware metrics (battery, system load), and adjust display settings (brightness, volume, night light). - ๐ง Semantic User Memory: A structured, versioned memory system (
UserKnowledgeStore) that deterministically tracks user facts, preferences, traits, and policies. MERLIN remembers your preferences without needing an LLM to "re-learn" them every time. - โฑ๏ธ Proactive Attention Management: MERLIN doesn't just wait to be spoken to. It runs scheduled tasks, evaluates completion queues, and uses an
AttentionManagerto decide whether to interrupt you immediately, queue a notification for later, or suppress it entirely based on priority. - ๐ File System & Browser Control: Native capabilities to search, read, write to your local file system, and scrape/control the web browser.
- ๐ Granular LLM Routing: Configure specific LLM providers (OpenRouter, Gemini, HuggingFace, Ollama) for specific cognitive tasks based on speed, cost, and intelligence requirements via
models.yaml. - ๐ฌ Multi-Channel Communication: Send and receive messages via WhatsApp (neonize bridge) and Telegram (bot adapter), with email drafts and inbox reading via SMTP/IMAP.
- ๐ค Telegram Remote Control: Control MERLIN from your phone via a Telegram bot โ whitelist-secured, serialized, with queue pressure guards and bridge liveness checks.
- ๐ฅ๏ธ Professional Dashboard & Widget: A React dashboard with 10 pages (system gauges, chat, mail, WhatsApp, scheduler, memory, logs, config, mission inspector, world state) and a PySide6 floating desktop widget โ all communicating via a decoupled REST/WebSocket API.
๐ง The 4-Layer Architecture
MERLIN is divided into distinct execution layers, preventing hallucinations and enforcing strict operational contracts.
flowchart TD
%% Styling
classDef user fill:#2d3748,stroke:#4a5568,stroke-width:2px,color:#fff,font-weight:bold
classDef iface fill:#1a365d,stroke:#63b3ed,stroke-width:2px,color:#fff
classDef perception fill:#2c5282,stroke:#4299e1,stroke-width:2px,color:#fff
classDef nervous fill:#742a2a,stroke:#fc8181,stroke-width:2px,color:#fff
classDef cortex fill:#44337a,stroke:#9f7aea,stroke-width:2px,color:#fff
classDef execution fill:#276749,stroke:#68d391,stroke-width:2px,color:#fff
classDef memory fill:#7b341e,stroke:#f6ad55,stroke-width:2px,color:#fff
classDef provider fill:#285e61,stroke:#4fd1c5,stroke-width:2px,color:#fff
User((User)):::user
subgraph Interface_Layer ["Input Channels"]
direction TB
TG["Telegram Bot"]:::iface
DASH["Dashboard / Widget"]:::iface
CLI["Terminal / Voice"]:::iface
end
subgraph Perception_Layer ["1. Perception Layer (The Senses)"]
PO["Perception Orchestrator"]:::perception
CF["Conversation Frame"]:::perception
end
subgraph Nervous_System ["2. The Nervous System (BrainCore & Reflexes)"]
direction TB
BC{"BrainCore <br> Circuit Breaker"}:::nervous
SA["Structural Analyzer"]:::nervous
RE["Reflex Engine"]:::nervous
Loop["Runtime Event Loop"]:::nervous
AM["Attention Manager"]:::nervous
end
subgraph Mission_Cortex ["3. Mission Cortex (The Planner)"]
direction TB
EP{"Escalation Policy"}:::cortex
MC["Mission Cortex Compiler"]:::cortex
LLM(("LLM Router / Models")):::cortex
end
subgraph Execution_Layer ["4. Skill & Execution Layer (The Physiology)"]
direction TB
ME["Mission Executor"]:::execution
SR["Skill Registry"]:::execution
Skills["Skills: System / Browser / Email <br> FS / Memory / WhatsApp / Reasoning"]:::execution
SCHED["Tick Scheduler"]:::execution
end
subgraph Memory_State ["Memory & State (World)"]
direction TB
WT[("World Timeline")]:::memory
UK[("User Knowledge Store")]:::memory
WSP["World State Provider"]:::memory
CP["Context Provider"]:::memory
end
subgraph Providers ["External Providers"]
direction LR
EP_MAIL["Email SMTP/IMAP"]:::provider
EP_WA["WhatsApp Neonize"]:::provider
EP_BR["Browser-use Agent"]:::provider
end
%% Input Channels
User -.->|Phone| TG
User -.->|Browser| DASH
User -.->|Command / Audio| CLI
TG -->|IPC Queue| PO
DASH -->|IPC Queue| PO
CLI --> PO
PO -->|Text & Speech| CF
PO --> BC
%% Phase 1: Routing
BC -->|Feature Extraction| SA
SA -->|Features| BC
BC -->|Fast Path| RE
BC -->|Complex Intent| EP
%% Phase 2: Escalation & Compilation
EP -->|Mission Proceed| MC
EP -.->|Clarify Needed| User
MC -->|DAG Generation| LLM
LLM -->|Plan| MC
MC -->|Compiled DAG| SCHED
MC -->|Compiled DAG| ME
%% Phase 3: Execution
RE -->|Direct Execution| SR
ME -->|Topological Execution| SR
SCHED -->|Scheduled Execution| ME
SR --> Skills
%% Provider Connections
Skills --> EP_MAIL
Skills --> EP_WA
Skills --> EP_BR
%% State Mutation
Skills -->|Emit Events| WT
%% Memory Integration
WT -->|State Projection| WSP
UK -->|User Constraints| CP
WSP -.->|World Context| MC
CP -.->|Memory Context| MC
%% Proactive Systems
Loop <--> AM
Loop -->|Trigger Condition| RE
AM -.->|Notify / Proactive| User
1. Perception Layer (The Senses)
Manages concurrent, multi-modal inputs. It handles text inputs and voice recognition simultaneously with explicit cancellation semantics (e.g., typing text immediately aborts an ongoing voice recording).
- Handles text through CLI prompts (
TextPerception) - Handles voice via Speech-to-Text inference (
SpeechPerception)
2. The Nervous System (BrainCore & Reflexes)
The routing authority and fast-path execution loop. MERLIN doesn't invoke a heavy LLM for everything.
- BrainCore Circuit Breaker: Analyzes the structural features of an input. Simple commands bypass heavy cognitive processing entirely.
- Reflex Engine: A zero-LLM, deterministic reaction layer. If you say "mute volume", MERLIN matches the intent and instantly invokes the skill, taking milliseconds instead of seconds.
- Always-On Event Loop: Listens to background events, dispatches scheduled background jobs, and triggers proactive reflexes.
3. Mission Cortex (The Planner)
When complex reasoning is required, the MissionCortex acts as an LLM-powered compiler.
- Translates natural language intent into a deterministic Mission Plan (Directed Acyclic Graph).
- Enforces rigid Intermediate Representation (IR) validation. The plan is verified for correct skill arguments, routing, and dependencies before a single action is taken.
4. Skill & Execution Layer (The Physiology)
The non-cognitive layer that mutates the world.
- MissionExecutor: Executes the compiled DAG. Enables concurrent execution of parallel nodes.
- Enforced Execution Contracts: Skills are rigorously defined. An LLM cannot hallucinate arguments or manipulate the system in undefined ways.
- Effect-Driven Inline Recovery: When a node fails, the
DecisionEngineclassifies the failure, finds recovery actions via skill contract chains, and executes them inline โ bounded, deduped, and safety-gated. - World State Timeline: Every action, input, and response is tracked as an append-only event stream in the
WorldTimeline, allowing MERLIN to maintain perfect contextual awareness of its environment.
๐งญ Request Lifecycle (Control-Flow View)
flowchart LR
U[User Input] --> P[Perception]
P --> B[BrainCore]
B -->|Simple command| R[ReflexEngine]
B -->|Complex intent| C[Cognitive Coordinator]
C -->|Plan required| MC[MissionCortex Compiler]
MC --> O[MissionOrchestrator]
O --> E[MissionExecutor]
R --> S[Skill Registry]
E --> S
S --> W[WorldTimeline]
W --> RB[ReportBuilder]
RB --> OUT[Console / TTS / API]
๐ง Status
v0.1.0 โ Initial public release
- Core execution system is stable
- Text-based interaction fully supported
- OS control, file system, memory, and scheduling are production-ready
- Advanced integrations (browser automation, messaging, voice) are in active development
To access the full feature set including the dashboard UI, Telegram bot, browser control, and voice modes, clone the repository and follow the Development Setup below.
๐ Quick Start
Prerequisites: Python 3.10+ and an API key (OpenRouter, Gemini, or local Ollama).
pip install merlin-assistant
merlin init
merlin
merlin init walks you through provider selection, API key validation, and config generation. Once complete, try:
You: open notepad
You: what time is it
You: set volume to 50
๐จโ๐ป Development Setup
For contributors or users who want the full feature set (dashboard, voice, browser, Telegram, WhatsApp):
-
Clone the repository:
git clone https://github.com/AlexxBenny/Merlin.git cd Merlin
-
Create a virtual environment and install dependencies:
python -m venv .venv && source .venv/bin/activate && python -m pip install --upgrade pip && python -m pip install -e ".[dev]"
On Windows PowerShell, activate with
.\.venv\Scripts\Activate.ps1instead ofsource .venv/bin/activate.Optional feature extras:
.[voice]for local STT/TTS dependencies.[ui]for the PySide6 desktop widget.[browser]for browser-use integrations.[windows]for Windows-only control integrations
-
Set up API Keys:
cp .env.example .env
Edit
.envto include your provider API keys (e.g.,OPENROUTER_API_KEY,GEMINI_API_KEY). -
Configure Models & Routing:
- Configure LLMs for specific roles in
config/models.yaml. - Adjust routing policies in
config/routing.yaml. - Tune execution behavior in
config/execution.yaml,config/browser.yaml, andconfig/skills.yaml.
- Configure LLMs for specific roles in
-
Run MERLIN:
python main.py # Terminal-only mode python main.py --ui # With dashboard + widget python main.py --telegram # With Telegram bot adapter python main.py --ui --telegram # Dashboard + Telegram python main.py --voice # Voice-only mode python main.py --hybrid # Text + voice
When using
--ui, the dashboard is available athttp://localhost:8420and API docs athttp://localhost:8420/docs. When using--telegram, configureTELEGRAM_BOT_TOKENin.envand setallowed_user_idsinconfig/telegram.yaml.
UI Frontend Development (Optional)
If you are developing the React dashboard, install frontend dependencies separately:
cd ui/dashboard
npm install
npm run dev # http://localhost:5173 (proxied to API on :8420)
npm run build # production build
Environment Variables (Quick Reference)
Copy .env.example to .env, then set at least one provider key.
Required (at least one provider key):
OPENROUTER_API_KEYGEMINI_API_KEY
Common optional variables:
TELEGRAM_BOT_TOKEN(required for--telegrammode)OLLAMA_HOST(default:http://localhost:11434)LOG_LEVEL(default:INFO)STT_ENGINE/TTS_ENGINE(defaults:whisper/pyttsx3)BROWSER_HEADLESS(default:false)
Configuration Quick Reference
Key files in config/:
| File | Purpose |
|---|---|
models.yaml |
Role-based LLM provider/model routing |
routing.yaml |
BrainCore and escalation routing rules |
skills.yaml |
Skill registry metadata/configuration |
execution.yaml |
Executor concurrency, timeout, retries |
browser.yaml |
Browser headless/security/timeout settings |
email.yaml |
Email provider (SMTP/IMAP) configuration |
whatsapp.yaml |
WhatsApp connection and provider settings |
telegram.yaml |
Telegram bot whitelist, queue depth, timeout |
paths.yaml |
Filesystem alias mapping |
app_aliases.yaml |
App name alias normalization |
app_capabilities.yaml |
Per-app media capability flags |
๐งช Running Tests
# Run default test suite
python -m pytest -q
# Run tests marked as slow (live infra/network dependent)
python -m pytest -m slow
@pytest.mark.slow tests are excluded by default unless you explicitly run -m slow.
๐ฆ Releasing
MERLIN package version is controlled in pyproject.toml ([project].version).
The release workflow at .github/workflows/release.yml runs on tags named v* and:
- verifies tag version matches
pyproject.toml, - runs tests,
- builds wheel + sdist artifacts,
- creates a GitHub Release with download links,
- publishes to PyPI.
See docs/releasing.md for complete release steps.
๐ API & Frontend Surface (Quick Reference)
MERLIN exposes versioned endpoints under /api/v1 when running with --ui:
| Area | Example Endpoints |
|---|---|
| Chat | POST /api/v1/chat, POST /api/v1/chat/stream, GET /api/v1/chat/history |
| Runtime state | GET /api/v1/system, GET /api/v1/world, GET /api/v1/logs |
| Missions/jobs | GET /api/v1/missions, GET /api/v1/jobs, PATCH /api/v1/jobs/{id} |
| Config | GET /api/v1/config, PATCH /api/v1/config |
| Health | GET /api/v1/health |
WebSocket channels:
/ws/logsfor real-time logs/ws/eventsfor system/job/mission updates
๐ UI โ API โ Core Bridge (Execution Path)
When UI clients issue commands, MERLIN uses a decoupled, filesystem-backed command queue:
sequenceDiagram
participant UI as Dashboard / Widget
participant API as FastAPI (:8420)
participant Q as state/api/command_queue
participant B as MerlinBridge Thread
participant M as MERLIN Core
participant R as state/api/responses
UI->>API: POST /api/v1/chat (or job/config command)
API->>Q: write cmd_*.json
B->>Q: poll + consume command
B->>M: execute via live conductor
M-->>B: result / error
B->>R: write response JSON
API->>R: poll response by cmd_id
API-->>UI: HTTP/SSE/WS response
This allows the API server and frontends to remain process-isolated from core internals while still supporting exactly-once command handling.
๐งฐ Skill Inventory Snapshot
MERLIN currently ships with 48 registered skills across 7 domains:
system: 19 โ media, volume, brightness, apps, jobs, time, batterybrowser: 12 โ click, fill, scroll, navigate, go_back, go_forward, autonomous_taskemail: 5 โ read_inbox, draft_message, modify_draft, send_message, search_emailfs: 5 โ read_file, write_file, create_folder, search_file, list_directorymemory: 4 โ get_preference, set_preference, set_fact, add_policywhatsapp: 2 โ send_message, send_filereasoning: 1 โ generate_text
๐ Dashboard Pages (What You Can Inspect)
The React dashboard provides 10 focused views:
| Route | Purpose |
|---|---|
/ |
System overview (CPU/RAM/Disk/battery + mission state) |
/chat |
Chat with streaming responses + session controls |
/mail |
Email drafts, inbox, compose with approve/send workflow |
/whatsapp |
WhatsApp message history and composition |
/scheduler |
Job lifecycle controls (pause/resume/cancel) |
/memory |
User knowledge domains (preferences, facts, traits, policies, relationships) |
/logs |
Live logs via WebSocket with filtering/search |
/config |
Editable configuration forms with validation/masking |
/missions |
Mission history + DAG node inspector |
/world |
World state tree snapshot |
๐งพ Mission IR Snapshot
Complex instructions are compiled to a validated MissionPlan DAG (IR v1). Minimal shape:
{
"id": "mission_123",
"nodes": [
{
"id": "n1",
"skill": "fs.read_file",
"inputs": { "path": "/tmp/example.txt" },
"depends_on": [],
"mode": "foreground"
}
],
"metadata": { "ir_version": "1.0" }
}
See full schema and constraints in docs/ir/mission-ir.md.
๐ง Model Provider Routing (Role-Based)
MERLIN routes different cognitive roles to different model providers via config/models.yaml.
| Provider | Best For | Notes |
|---|---|---|
| OpenRouter | Flexible multi-model access | Good default for trying multiple model families |
| Gemini | Direct Google Gemini access | Often used for coordinator/compiler roles |
| Ollama | Local/offline-ish inference | Requires local Ollama server (OLLAMA_HOST) |
| HuggingFace | Inference API workflows | Set HUGGINGFACE_API_KEY when used |
๐ ๏ธ Troubleshooting
| Symptom | Likely Cause | What to Check |
|---|---|---|
python -m pytest fails to start |
Dev deps not installed | python -m pip install -e ".[dev]" |
--ui starts but dashboard is unavailable |
API server failed / port conflict | Check http://localhost:8420/health and logs |
| Voice mode does nothing | Missing voice dependencies or mic permissions | Install .[voice]; verify STT_ENGINE / TTS_ENGINE |
| Browser actions fail | Missing browser integrations/config | Install .[browser]; review config/browser.yaml |
| LLM calls fail | Missing/invalid provider keys | Verify .env keys and provider selection in config/models.yaml |
๐ฅ๏ธ Platform Notes
.[windows]extra is only for Windows-native control integrations.- On non-Windows platforms, avoid installing
.[windows]. - The React dashboard is platform-agnostic, but requires Node.js for local development.
๐ฌ Example Interactions
Here are some ways you can interact with MERLIN depending on the complexity of the task:
๐ฅ๏ธ System Control
Reflex Action (Zero-LLM Fast Path)
User: "Mute the audio" MERLIN: Instantly mutes system volume via
SystemControllerโ no LLM involved. The reflex engine matches the intent and fires the skill in milliseconds.
Volume & Brightness
User: "Set volume to 40 and brightness to 70" MERLIN: Compiles a two-node parallel DAG โ one node calls
system.set_volume, the other callssystem.set_brightness. Both execute concurrently and complete within a second.
Application Management
User: "Open Spotify and close Chrome" MERLIN: Routes through the reflex engine for instant execution.
SystemControllerlaunches Spotify via the application registry and gracefully terminates Chrome โ no compilation overhead, no LLM.
System Status
User: "How's the system doing?" MERLIN: Pulls a live snapshot โ CPU load, memory usage, disk capacity, and battery level โ from
SystemControllerhardware metrics and presents a clean summary.
Media Playback
User: "Skip this track" MERLIN: Fires
system.media_nextthrough the reflex engine, sending the media key event to the active player. Play, pause, next, and previous are all sub-second reflexes.
โฑ๏ธ Proactive Monitoring & Policies
Policy Enforcement
User: "Whenever I open Netflix, set the brightness to 30%." MERLIN: Saves this policy to the
UserKnowledgeStore. The background event loop continuously monitors running applications โ the moment Netflix is detected, theAttentionManagertriggers the brightness adjustment proactively without being asked.
Proactive System Watch
MERLIN's always-on event loop doesn't just wait for commands. It evaluates scheduled tasks, monitors system events, and runs proactive reflexes in the background. If battery drops below a threshold or a scheduled job completes, the
AttentionManagerclassifies the urgency and decides whether to interrupt you immediately, queue a notification for later, or suppress it entirely.
๐ง Email
Draft & Send
User: "Email my professor about the project deadline extension" MERLIN: Uses the
generate_textskill to draft a polished, context-aware message โ pulling your name and relevant details from memory. The draft appears in the dashboard for review. Sending requires explicit approval through a two-stage confirmation gate (risk_level: destructive), so nothing leaves your inbox without your say-so.
File Attachments
User: "Send the quarterly report to finance@company.com" MERLIN: Resolves "quarterly report" against the file index, validates the attachment (existence, permissions, size under 25 MB, MIME type), and stages the draft with the file attached. You review and approve before it's dispatched.
๐ Browser Automation
Autonomous Browsing
User: "Look up the latest GPU benchmarks and summarize the top 5" MERLIN: Spins up a
browser-useagent that navigates, scrolls, and extracts data autonomously. A three-layerBrowserSafetyGateruns before every task โ blocking financial domains and purchase actions, flagging login/download flows for confirmation. MERLIN can browse for you, but it won't buy anything or log into your accounts without explicit approval.
๐ฌ WhatsApp & Messaging
Send a Message
User: "Tell Raj on WhatsApp that I'll be 10 minutes late" MERLIN: Routes through the WhatsApp neonize bridge to deliver the message directly. File sharing works the same way โ just say "send the meeting notes to Raj on WhatsApp" and MERLIN resolves the file, attaches it, and sends.
๐ง Memory & Knowledge
Facts & Relationships
User: "My brother's name is Arjun and he lives in Bangalore" MERLIN: Stores both facts in the
UserKnowledgeStoreโ structured, versioned, instantly queryable. The next time you say "send Arjun a birthday message", MERLIN already knows who he is and where he is, without asking again.
Recall During Work
MERLIN's memory isn't a novelty โ it's wired into the execution pipeline. Stored preferences, facts, traits, and policies are injected as context into LLM prompts during mission compilation, meaning your identity and rules shape every plan MERLIN generates.
๐ File System
Nested Creation
User: "Create a folder structure for my new project: src, docs, and tests inside a folder called Atlas on the desktop" MERLIN: Compiles a multi-node DAG that creates each directory with full path resolution through
LocationConfig. Nested paths are handled natively โparents=Truemeans intermediate directories are created automatically. No manual scaffolding needed.
โฐ Job Scheduler
Timed Execution
User: "Remind me to check the server logs every 30 minutes" MERLIN: Submits a recurring job to the
TickSchedulerwith a 30-minute interval. The scheduler runs on a cooperative tick cycle โ priority-ordered, concurrency-capped, with exponential retry backoff on failure. If MERLIN restarts, boot recovery fast-forwards missed intervals so you get one catch-up execution instead of a flood.
๐ฑ Telegram Remote Control
Remote Access
When you're away from your desk, MERLIN stays reachable through a Telegram bot. Send a message from your phone โ "what's running on my machine?" or "email the report to the team" โ and it flows through the exact same execution pipeline as the desktop UI. Access is locked to a whitelist of approved Telegram user IDs, messages are serialized through queue pressure guards, and bridge liveness is verified before every dispatch. It's your full MERLIN instance in your pocket, secured at every layer.
๐ Codebase Topography
โโโ main.py & merlin.py # Entry points and central orchestration loops
โโโ merlin_assistant/ # Pip package: CLI, setup wizard, config discovery
โโโ brain/ # Routing authority (think vs. react)
โโโ cortex/ # The LLM compiler turning text into Mission DAGs
โโโ execution/ # The engine running plans, enforcing contracts, and inline recovery
โโโ infrastructure/ # Native OS adapters (e.g., Windows SystemController)
โโโ memory/ # Pure-data storage for user preferences and traits
โโโ perception/ # Input handling (Speech & Text concurrent tracking)
โโโ reporting/ # Proactive intelligence formatting (deciding how to talk back)
โโโ runtime/ # Always-on heartbeat, reflex matching, and job scheduler
โโโ skills/ # Registry of executable actions (browser, fs, system, whatsapp, etc.)
โโโ providers/ # External service connectors (email, WhatsApp/neonize)
โโโ interface/ # API boundary: bridge, FastAPI, shared IPC, Telegram bot
โโโ ui/dashboard/ # React + Vite + Tailwind v4 dashboard (10 pages)
โโโ ui/widget/ # PySide6 floating orb with chat
โโโ config/ # YAML configurations for models, routing, skills, and integrations
๐ Deep-Dive Documentation
- System overview and doc index:
docs/overview.md - Architectural laws:
ARCHITECTURE.md - Cognitive request flow:
docs/architecture/cognitive-pipeline.md - World-state model:
docs/architecture/world-state.md - Three-tier browser execution:
docs/architecture/three-tier-browser.md - Interface/API layer:
docs/subsystems/interface.md - UI dashboard and widget internals:
docs/subsystems/ui.md - Model routing and provider adapters:
docs/subsystems/models.md - Skills reference index:
docs/skills/overview.md - Environment variable reference:
docs/configuration/environment.md - YAML configuration reference:
docs/configuration/config-files.md - Mission IR specification:
docs/ir/mission-ir.md - Autonomous readiness analysis report:
docs/analysis-report.md - Email skills analysis report:
docs/email-analysis-report.md
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 merlin_assistant-0.1.0.tar.gz.
File metadata
- Download URL: merlin_assistant-0.1.0.tar.gz
- Upload date:
- Size: 650.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aae92b0f26029646989ef16d2913889379ce95dda9de4f7c0bbac08c48a31857
|
|
| MD5 |
4258f7f77f736188885fa35e4d5712e6
|
|
| BLAKE2b-256 |
e2882ece4a0914270376c8a2958db5c0fc6843f05b8c4c1b9e503cb9154fed50
|
File details
Details for the file merlin_assistant-0.1.0-py3-none-any.whl.
File metadata
- Download URL: merlin_assistant-0.1.0-py3-none-any.whl
- Upload date:
- Size: 554.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fbcd095c807d95ed4dd6ca023666737264ded515e0f375eca80a6d4a6503c2bd
|
|
| MD5 |
6f74ecb178a8d20d6417dc0983f410dd
|
|
| BLAKE2b-256 |
d7599c1d683dc76671d245b25b768d80fbf8d75f92b26cda6ab612661132f24d
|