CLI CWClock
Nous fournissons une CLI OpenSource1 pour CWClock. Vous pouvez l'utiliser pour enregistrer votre temps depuis un terminal, et bien plus encore.

Installation​
Choisissez le mode d'installation adapté à votre système d'exploitation, puis suivez les instructions.
Homebrew​
Première installation :
brew tap cwclock/cwclock https://gitlab.cwcloud.tech/oss/cwclock.git
brew trust --formula cwclock/cwclock/cwclock
brew install cwclock
Mise Ă jour :
brew update
brew upgrade cwclock
Curl​
Linux​
Linux x86 (64 bits)​
version="1.13.8"
curl -L "https://gitlab.cwcloud.tech/oss/cwclock/-/releases/v${version}/downloads/cwclock/cwclock_${version}_linux_amd64.tar.gz" -o "cwclock_cli.tar.gz"
mkdir cwclock_cli && tar -xf cwclock_cli.tar.gz -C cwclock_cli
sudo ./cwclock_cli/install.sh
Vérifiez que la version est disponible dans les releases, car seules les 5 dernières builds sont conservées.
Linux arm (64 bits)​
version="1.13.8"
curl -L "https://gitlab.cwcloud.tech/oss/cwclock/-/releases/v${version}/downloads/cwclock/cwclock_${version}_linux_arm64.tar.gz" -o "cwclock_cli.tar.gz"
mkdir cwclock_cli && tar -xf cwclock_cli.tar.gz -C cwclock_cli
sudo ./cwclock_cli/install.sh
Vérifiez que la version est disponible dans les releases, car seules les 5 dernières builds sont conservées.
MacOS​
macOS x86/arm (64 bits)​
version="1.13.8"
curl -L "https://gitlab.cwcloud.tech/oss/cwclock/-/releases/v${version}/downloads/cwclock/cwclock_${version}_darwin_all.tar.gz" -o "cwclock_cli.tar.gz"
mkdir cwclock_cli && tar -xf cwclock_cli.tar.gz -C cwclock_cli
sudo ./cwclock_cli/install.sh
Vérifiez que la version est disponible dans les releases, car seules les 5 dernières builds sont conservées.
Windows​
Téléchargement direct​
Vous pouvez directement télécharger depuis ici. Choisissez la bonne architecture (amd64 ou arm64), téléchargez, décompressez et vous trouverez un fichier exe à l'intérieur.
Windows x86 (64 bits) avec Powershell​
$version = "1.13.8"
$user = "YOUR_USER"
cd "C:\Users\${user}"
Invoke-WebRequest -Uri "https://gitlab.cwcloud.tech/oss/cwclock/-/releases/v${version}/downloads/cwclock/cwclock_${version}_windows_amd64.zip" -OutFile "cwclock_cli.zip"
Expand-Archive -Path "cwclock_cli.zip" -DestinationPath "cwclock_cli" -Force
Set-Location "cwclock_cli"
.\cwclock.exe
Vérifiez que la version est disponible dans les releases, car seules les 5 dernières builds sont conservées.
Windows arm (64 bits) avec Powershell​
$version = "1.13.8"
$user = "YOUR_USER"
cd "C:\Users\${user}"
Invoke-WebRequest -Uri "https://gitlab.cwcloud.tech/oss/cwclock/-/releases/v${version}/downloads/cwclock/cwclock_${version}_windows_arm64.zip" -OutFile "cwclock_cli.zip"
Expand-Archive -Path "cwclock_cli.zip" -DestinationPath "cwclock_cli" -Force
Set-Location "cwclock_cli"
.\cwclock.exe
Vérifiez que la version est disponible dans les releases, car seules les 5 dernières builds sont conservées.
Installation de CWClock avec la CLI​
cwclock bootstrap
Flags disponibles :
-rou--release: Nom de release pour le déploiement (par défaut :cwclock)-nou--namespace: Namespace utilisé pour le déploiement (par défaut :cwclock)-kou--keep-dir: Conserver le répertoire helm local-dou--recreate-ns: Recréer le namespace-oou--openshift: Utiliser la CLI OpenShift au lieu de kubectl-pou--value: Valeurs pour surcharger la configuration (peut être répété)--directory: Changer le répertoire (utile si vous souhaitez utiliser vos propres templates helm)--kind-cluster: Spécifier le cluster kind à utiliser (il sera recréé même s'il existe déjà )
Exemple :
cwclock bootstrap -r my-release -n production --value key=value --value values-override.yaml
Ouvrir des tunnels​
cwclock bootstrap pfw
Ouvre des tunnels (ou port forward) vers les différents services.
Vous pouvez surcharger la configuration comme ceci :
cwclock bootstrap pfw --config my-pfw-config.yml
Le format YAML de configuration attendu :
---
pfwConfigs:
- name: "cwclock-api"
port: 8080
targetPort: 8080
- name: "cwclock-ui"
port: 3000
targetPort: 3000
Configuration​
cwclock configure
cwclock configure set format pretty
cwclock configure set api_url https://api.cwclock.me
cwclock configure set api_key <your api key>
Remarque : il est aussi possible d'utiliser des variables d'environnement QWCTL_{VAR_NAME} au lieu de ce fichier de configuration. Par exemple, pour le format de sortie, vous pouvez définir la variable QWCTL_FORMAT à json ou pretty.
Organisations​
Lister, créer, mettre à jour et supprimer des organisations.
cwclock organization ls
cwclock organization create --name "Acme Corp" --country FR
cwclock organization update -i <organization id> --name "Nouveau nom"
cwclock organization delete -i <organization id>
Flags disponibles pour create (les mĂŞmes champs existent pour update, tous optionnels dans ce cas) :
--name: Nom de l'organisation (requis à la création)--country: Code pays (requis à la création)--address,--city,--postal-code: Champs d'adresse--currency: Code devise--identification-number,--naf,--siren,--siret,--vat-number,--mf: Identifiants d'immatriculation/fiscaux--iban,--bic: Coordonnées bancaires--accounting-email: Email de comptabilité, mis en copie sur les emails de facture-fou--format: Surcharge du format de sortie :prettyoujson
Connexions externes​
Les organisations peuvent envoyer leurs exports planifiés et leurs factures vers un stockage externe (s3, google_drive ou git). Lister, créer ou supprimer les connexions d'une organisation :
cwclock organization connection ls -i <organization id>
cwclock organization connection -i <organization id> --type s3 --bucket-name my-bucket --endpoint https://s3.example.com --access-key <key> --secret-key <secret> --region eu-west-1
cwclock organization connection -i <organization id> --offset 0
-iou--id: ID de l'organisation (requis)--type: Type de connexion à créer :s3,google_driveougit--offset: Position de la connexion à supprimer, telle qu'indiquée parls(par défaut-1)--path: Sous-dossier de destination optionnel--flat-directory: Envoyer directement à la racine de destination au lieu d'imbriquer sousYYYY/MM- S3 :
--bucket-name,--endpoint,--access-key,--secret-key,--region - Google Drive :
--folder-id,--service-account-base64 - Git :
--repo-url,--username,--password,--ssh-private-key,--ssh-private-key-passphrase
Clients​
Lister, créer, mettre à jour et supprimer les clients d'une organisation.
cwclock client ls
cwclock client create --name "Client A" --country FR --daily-rate 500
cwclock client update -i <client id> --email billing@client.com
cwclock client delete -i <client id>
--name: Nom du client (requis à la création)--country: Code pays (requis à la création)--email,--contact-name,--address,--city,--postal-code: Coordonnées--daily-rate,--hours-per-day: Valeurs de facturation par défaut (les heures par jour valent 7 côté serveur si omis)--vat-rate,--vat-number,--vat-discharge-motive: Paramètres de TVA (le taux de TVA vaut 20 côté serveur si omis)--identification-number,--naf,--mf,--siren,--siret: Identifiants d'immatriculation--purchase-order: Bon de commande--invoice-emails: Emails destinataires des factures, séparés par virgule/point-virgule--send-reports-with-invoice: Joindre les rapports de temps aux emails de facture envoyés à ce client-oou--org: ID ou nom de l'organisation (surcharge leorg_idconfiguré)-fou--format: Surcharge du format de sortie :prettyoujson
Projets​
Lister, créer, mettre à jour et supprimer les projets d'un client.
cwclock project ls
cwclock project ls -c <client id ou nom>
cwclock project create --name "Refonte du site" -c <client id ou nom> --daily-rate 450 --color "#3b82f6"
cwclock project update -i <project id> --subdivisions "backend,frontend"
cwclock project delete -i <project id>
-cou--client: ID ou nom du client (requis à la création ; réassigne le projet en mise à jour ; filtre surls)--name: Nom du projet (requis à la création)--daily-rate: Taux journalier--color: Couleur du projet--subdivisions: Liste de subdivisions séparées par des virgules-oou--org: ID ou nom de l'organisation (surcharge leorg_idconfiguré)-fou--format: Surcharge du format de sortie :prettyoujson
Enregistrements de temps​
Suivez votre temps avec un chronomètre, ou enregistrez directement une plage horaire.
cwclock record start -p <project id ou nom>
cwclock record stop
cwclock record create --begin "now()-1h" --end "now()" -p <project id>
cwclock record create --from 2024-01-15T09:00:00 --to 2024-01-15T12:00:00 -t 'réunion' -p <project id>
cwclock record create --all-day --begin 2024-01-15 -p <project id>
cwclock record ls
cwclock record ls --max 50
cwclock record delete -i <record id>
-pou--project: ID ou nom du projet (requis pourstart/create) ; son client est déduit automatiquement sauf si-c/--clientle surcharge-tou--text: Description de l'enregistrement (par défaut, le nom du projet ; surstop, surcharge le texte donné austart)--begin/--from,--end/--to: Plage pourcreate— ISO-8601 (une dateYYYY-MM-DDseule vaut00:00:00/23:59:59), ou une expression du stylenow()/now()-1h/now()-1d--all-day: Créer un enregistrement journée entière pour la date donnée par--begin/--from, au lieu d'une plage précise (--end/--todoit être omis)--max: Nombre maximum d'enregistrements à afficher avecls(par défaut10)-oou--org: ID ou nom de l'organisation (surcharge leorg_idconfiguré)-fou--format: Surcharge du format de sortie :prettyoujson
Export​
Téléchargez un rapport de temps synthétique ou détaillé au format PDF ou CSV sur une plage de dates, filtré éventuellement sur un ou plusieurs clients/projets (tout est inclus si omis).
cwclock export --client <client uuid> --begin 2024-01-15T09:00:00 --end 2024-01-15T12:00:00
cwclock export --type detailed --file-format csv --client <id1> --client <id2> --project <id3> --begin now()-30d --end "now()"
--type: Type de rapport :summaryoudetailed(par défautsummary)--file-format: Format de fichier :pdfoucsv(par défautpdf)-cou--client: Filtre par client (id ou nom, répétable ; tous les clients sont inclus si omis)-pou--project: Filtre par projet (id ou nom, répétable ; tous les projets sont inclus si omis)--begin: Date/heure de début : ISO-8601 ou expression du stylenow()/now()-1h/now()-1d(requis)--end/--to: Date/heure de fin : ISO-8601 ou expression du stylenow()/now()-1h/now()-1d-oou--output: Chemin du fichier de sortie (par défaut, le nom fourni par le serveur, ou<type>.<file-format>dans le répertoire courant)--org: ID ou nom de l'organisation (surcharge leorg_idconfiguré)
Factures​
Prévisualisez, générez, envoyez, téléversez et supprimez des factures clients.
cwclock invoice preview --client <client uuid> --begin 2024-01-15T09:00:00 --end 2024-01-15T12:00:00
cwclock invoice generate --client <client uuid> --begin 2024-01-15T09:00:00 --to 2024-01-15T12:00:00
cwclock invoice send -i <invoice id>
cwclock invoice upload -i <invoice id>
cwclock invoice delete -i <invoice id>
Remarques :
previewgénère le PDF sans rien sauvegarder côté serveur, ce qui permet de le vérifier avant de générer la vraie facture ;generatele sauvegarde sous son propre numéro de facture et renvoie le même PDF en téléchargement-cou--client: ID ou nom du client, pourpreview/generate(requis)-pou--project: ID ou nom du projet à inclure, pourpreview/generate(répétable ; vide = tous les projets)--begin,--end/--to: Plage de dates, pourpreview/generate(mêmes formats que pour l'export)-oou--output: Chemin du fichier de sortie, pourpreview/generate(par défaut, le nom fourni par le serveur dans le répertoire courant)sendenvoie par email le PDF d'une facture déjà générée aux destinataires du clientuploadrenvoie le PDF d'une facture déjà générée vers toutes les connexions externes de son organisation (par exemple après correction des identifiants d'une connexion)-iou--id: ID ou numéro de facture, pourdelete/send/upload--org: ID ou nom de l'organisation (surcharge leorg_idconfiguré)
Jobs d'export planifiés​
Automatisez des exports récurrents (et, en option, l'envoi de factures) selon une planification cron.
cwclock job ls
cwclock job create --name "Synthèse mensuelle" --cron "0 6 1 * *" --time-period "now()-30d" --report-types summary-pdf,detailed-csv --type email --to accounting@client.com
cwclock job update -i <job id> --enabled=false
cwclock job run -i <job id>
cwclock job delete -i <job id>
--name: Nom du job (requis à la création)--cron: Expression cron (requise à la création)--time-period: Période couverte par chaque exécution (requise à la création), ex. :now(),now()-1d,now()-1h--report-types: Types de rapports séparés par des virgules (requis à la création) :summary-pdf,summary-csv,detailed-pdf,detailed-csv,unpaid-invoices,all-invoices--enabled: Si le job est activé (par défauttrue)--include-financial: Inclure les montants financiers dans les rapports exportés-cou--client,-pou--project: ID ou nom du client/projet à inclure (répétable ; vide = tous)--type: Type de la première cible à lacreate:email(par défaut),s3,google_driveougit— voir les flags de cible ci-dessous-oou--org: ID ou nom de l'organisation (surcharge leorg_idconfiguré)-fou--format: Surcharge du format de sortie :prettyoujson
run exécute le job immédiatement, en dehors de sa planification cron habituelle, en utilisant le même chemin de livraison qu'une exécution planifiée. update ne modifie que les flags passés, y compris la sélection des rapports/cibles — gérez les cibles elles-mêmes avec job target.
Cibles​
Un job peut livrer vers plusieurs cibles (email, S3, Google Drive ou Git). Listez, ajoutez ou supprimez-les :
cwclock job target ls -i <job id>
cwclock job target create -i <job id> --type s3 --bucket-name my-bucket --endpoint https://s3.example.com --access-key <key> --secret-key <secret> --region eu-west-1
cwclock job target delete -i <job id> --offset 0
-iou--id: ID du job (requis)--type: Type de cible :email(par défaut),s3,google_driveougit--offset: Position de la cible à supprimer, telle qu'indiquée parls(requis pourdelete)- Email :
--to,--cc(séparés par virgule/point-virgule) - S3 :
--bucket-name,--endpoint,--access-key,--secret-key,--region - Google Drive :
--folder-id,--service-account-base64 - Git :
--repo-url,--username,--password,--ssh-private-key,--ssh-private-key-passphrase --path: Sous-dossier de destination optionnel (cible s3/google_drive/git)
Administration (superutilisateur)​
Commandes réservées au superutilisateur pour gérer toutes les organisations et tous les utilisateurs, sans condition d'appartenance.
cwclock admin organization ls
cwclock admin organization transfert -i <organization id> --owner <user id>
cwclock admin organization delete -i <organization id>
cwclock admin user ls
cwclock admin user update -i <user id ou email> --role confirmed
cwclock admin user set-role superuser -i <user id ou email>
cwclock admin user delete -i <user id ou email>
admin organization transferttransfère la propriété de n'importe quelle organisation à un autre utilisateur via--owner <user id>admin user set-role <role>définit le rôle global d'un utilisateur :superuser,confirmed,disabledoubanadmin user updateaccepte--email,--name,--surname,--passwordet--role, en ne modifiant que les flags passés-fou--format: Surcharge du format de sortie :prettyoujson
Métriques​
Récupérer toutes les métriques disponibles (depuis l'URL prometheus /v1/metrics de l'API) avec :
cwclock metrics ls
Récupérer une métrique particulière avec :
cwclock metrics get <metric_name>
cwclock metrics get <metric_name>
Remarques :
- Le wildcard
*est pris en charge pour récupérer toutes les métriques qui commencent par une chaîne particulière (ex. :cwclock metrics get "cwclock_projects_*"pour récupérer toutes les métriques dont le nom commence parcwclock_projects_) - Le filtrage par labels est aussi pris en charge avec le flag
--filter(ex. :cwclock metrics get "cwclock_task_*" --filter "organization_id=xxxxx-xxxxx-xxxxx-xxxxx"pour rĂ©cupĂ©rer les mĂ©triques qui commencent parcwclock_task_avec le labelkindĂ©gal Ăxxxxx-xxxxx-xxxxx-xxxxx)
IA MCP et agents​
Créer un serveur MCP​
cwclock ai mcp
cwclock ai mcp -l 127.0.0.1 -p 8080 -e /mcp