NexLink — Nextcloud, Exchange & YouTube Connector
Built by Firma de AI, supported by Firma de IT.
This skill connects Nextcloud, Exchange, and YouTube into one practical workflow layer for:
- Nextcloud: file operations, sharing, document understanding, workflow extraction
- Exchange: email, calendar, tasks, analytics
- YouTube: transcript extraction with language fallback
Available Modules
| Module | Description | Command |
|---|---|---|
| Nextcloud | Files, sharing, summarization, Q&A, action extraction, Contacts (CardDAV) | nexlink files <...> | nexlink contacts --source nextcloud <...> |
| Exchange | Email, Calendar, Tasks, Analytics, Contacts | nexlink <mail|cal|tasks|analytics|sync|contacts> |
| YouTube | Transcript extraction with language fallback | nexlink youtube transcript|languages <url> |
What it solves
Use this skill when you want to work with:
- Nextcloud files: listing, search, upload, download, move, sharing
- document understanding: extract-text, summarize, ask-file
- workflow extraction: extract actions from files and create Exchange tasks
- YouTube transcripts:
nexlink youtube transcript <url>(text/JSON, language fallback, save to Nextcloud) - emails, replies, drafts and attachments in Exchange
- calendar, meetings and follow-up tasks
- Exchange tasks, including delegate access
- Contacts: Exchange contacts (EWS) and Nextcloud contacts (CardDAV)
Quick Start
# Connection
nexlink mail connect
# List emails
nexlink mail read --limit 10
nexlink mail read --unread
# Send email
nexlink mail send --to "client@example.com" --subject "Offer" --body "..."
# Reply
nexlink mail reply --id EMAIL_ID --body "Reply"
Calendar
# Events
nexlink cal today
nexlink cal week
nexlink cal list --days 7
# Create event
nexlink cal create --subject "Meeting" --start "2024-01-15 14:00" --duration 60
# With attendees
nexlink cal create --subject "Team Meeting" --start "2024-01-15 14:00" --to "user1@example.com,user2@example.com"
Tasks
# List
nexlink tasks list
nexlink tasks list --overdue
# Create
nexlink tasks create --subject "Review proposal" --due "+7d" --priority high
# Complete
nexlink tasks complete --id TASK_ID
Analytics (Email Statistics)
# General statistics
nexlink analytics stats --days 30
# Average response time
nexlink analytics response-time --days 7
# Top senders
nexlink analytics top-senders --limit 20
# Activity heatmap
nexlink analytics heatmap --days 30
# Statistics per folder
nexlink analytics folders
# Full report
nexlink analytics report --days 30
Contacts
# Exchange contacts (default source)
nexlink contacts list
nexlink contacts list --limit 10
# Get Exchange contact by ID
nexlink contacts get --id CONTACT_ID
# Create Exchange contact
nexlink contacts create --name "John Doe" --email "john@example.com" --phone "+40-700-000-000"
nexlink contacts create --name "Acme Corp" --phone "+40-711-111-111" --org "Acme" --title "CEO"
# Update Exchange contact
nexlink contacts update --id CONTACT_ID --phone "+40-722-222-222"
# Delete Exchange contact (moves to trash)
nexlink contacts delete --id CONTACT_ID
# Search contacts
nexlink contacts search --query "Acme"
# Nextcloud contacts (CardDAV — use --source nextcloud)
nexlink contacts addressbooks --source nextcloud
nexlink contacts list --source nextcloud
nexlink contacts list --source nextcloud --addressbook "/remote.php/dav/addressbooks/users/alex/contacts/"
# Get Nextcloud contact by UID
nexlink contacts get --uid CONTACT_UID --source nextcloud
# Create Nextcloud contact
nexlink contacts create --source nextcloud --name "Jane Doe" --email "jane@example.com" --phone "+40-733-333-333"
# Update Nextcloud contact
nexlink contacts update --uid CONTACT_UID --source nextcloud --phone "+40-744-444-444"
# Delete Nextcloud contact
nexlink contacts delete --uid CONTACT_UID --source nextcloud
Files (Nextcloud)
# List and search
nexlink files list /Documents/
nexlink files search contract /Clients/
# Upload / Download
nexlink files upload /local/report.pdf /Documents/
nexlink files download /Documents/report.pdf /local/
# Document understanding
nexlink files extract-text /Clients/contract.docx
nexlink files summarize /Clients/contract.docx
nexlink files ask-file /Clients/contract.docx "When is the renewal due?"
# Workflow extraction
nexlink files extract-actions /Clients/contract.txt
nexlink files create-tasks-from-file /Clients/contract.txt
nexlink files create-tasks-from-file /Clients/contract.txt --select 1,2 --execute
### YouTube Transcripts
Extract video subtitles with automatic language fallback:
```bash
# Basic text transcript (English)
nexlink youtube transcript https://www.youtube.com/watch?v=VIDEO_ID
# Romanian transcript with JSON output (includes timestamps)
nexlink youtube transcript https://youtu.be/VIDEO_ID --lang ro --format json
# Try multiple languages, fall back in order
nexlink youtube transcript VIDEO_ID --lang ro,en
# Save transcript to Nextcloud
nexlink youtube transcript VIDEO_ID --lang en --save
# List available caption languages
nexlink youtube languages https://www.youtube.com/watch?v=VIDEO_ID
Note: Requires pip install youtube-transcript-api for the underlying library.
Combined Workflows
Email + Files
Send email with attachment from Nextcloud:
# Download from Nextcloud and send
nexlink files download /Documents/offer.pdf /tmp/
nexlink mail send --to "client@example.com" --subject "Offer" --body "..." --attach /tmp/offer.pdf
Save attachment from email to Nextcloud:
# Download attachment and upload to Nextcloud
nexlink mail download-attachment --id EMAIL_ID --name "contract.pdf" --output /tmp/
nexlink files upload /tmp/contract.pdf /Contracts/
Calendar + Tasks
Create task from meeting request:
# After meeting, create follow-up task
nexlink tasks create --subject "Follow-up meeting X" --due "+3d"
Full Configuration
See references/setup.md for detailed configuration.
Positioning public / branding
For public listings, documentation, and SEO copy, prefer this positioning:
- Public title:
Firma de AI — Exchange & Nextcloud Assistant - Subtitle:
Email, files, tasks, and document workflows for teams - Brand line:
Built by Firma de AI, supported by Firma de IT. - Links:
https://firmade.aiandhttps://firmade.it
This keeps the internal skill name nexlink while making the public positioning more accurate and searchable.
Coding Standards
This project follows the Hardshell Coding Standards.
When writing or modifying Python code, see:
- Python Standards - PEP 8, type hints, docstrings, security
- Testing Standards - TDD, test pyramid, coverage
- Git Workflow - Conventional commits, PR process
Key rules:
- PEP 8 formatting - use
blackfor formatting,rufffor linting - Type hints - required for all function parameters and return types
- Docstrings - Google-style for all public functions and classes
- Testing -
pytestwithpytest-covfor coverage - Security - never use
pickleoreval()on untrusted input - Dependencies - use
uvorpoetry, pin versions, audit withpip-audit
Module Structure
modules/
├── exchange/ # Email, Calendar, Tasks (Exchange on-prem)
│ ├── SKILL.md # Module documentation
│ ├── mail.py # Email operations
│ ├── cal.py # Calendar operations
│ ├── tasks.py # Task operations
│ ├── sync.py # Sync and reminders
│ └── ...
├── nextcloud/ # File management, doc understanding, workflow extraction
│ ├── SKILL.md # Module documentation
│ └── nextcloud.py # File operations and analysis
└── (future modules)
Notes
- Tasks are created in the default mailbox's Tasks folder or in the target mailbox when using delegate access
- For collaborative tasks, use calendar events with attendees
- Self-signed certificates require
verify_ssl: false
License
MIT License - see LICENSE file for details.