Claude API用量监控桌面小组件开发实战:Python+SwiftBar实现成本可视化

news2026/5/9 21:07:51
1. 项目概述一个提升Claude使用效率的桌面小工具最近在折腾AI工具链的时候发现了一个挺有意思的开源项目叫claude-usage-widget。这名字听起来就挺直白的一个用来监控Claude使用情况的桌面小工具。对于像我这样重度依赖Claude进行代码审查、文档撰写和头脑风暴的人来说这玩意儿简直是刚需。你想想每次用Claude API心里都得盘算着这个月额度还剩多少这次对话消耗了多少token别一不小心用超了或者某个复杂问题问得太深成本蹭蹭往上涨。这个项目就是来解决这个痛点的。简单来说claude-usage-widget是一个可以常驻在你桌面比如macOS的菜单栏的小组件。它能实时显示你当前Claude API的使用情况包括已用额度、剩余额度、各模型调用次数和成本估算。这比每次都去登录Anthropic的官网后台查看要方便太多了属于那种“用了就回不去”的效率工具。它的核心价值在于将后台的、静态的数据变成了前台的、动态的、可视化的信息流让你对AI资源的使用心中有数从而更合理地进行任务规划和成本控制。这个项目适合所有通过API使用Claude的开发者、产品经理、内容创作者乃至小型团队。无论你是用Claude来辅助编程、生成营销文案还是进行数据分析这个小工具都能帮你避免“盲用”API实现更精细化的管理和更高效的协作。接下来我就结合自己的部署和使用经验把这个项目的里里外外拆解清楚从设计思路到避坑指南希望能帮你快速上手把它变成你AI工作流中的一个得力助手。2. 核心设计思路与架构解析2.1 为什么需要一个独立的用量监控工具在深入代码之前我们得先想明白一个问题Anthropic官方不是有控制台吗为什么还要额外搞一个工具这背后其实有几个很实际的考量。首先效率断层。官方控制台是一个网页你需要打开浏览器、登录、找到用量统计页面这一套操作下来信息获取路径太长打断了你当前的工作流。而开发或创作过程往往是高度沉浸和连续的频繁切换上下文去查用量非常影响心流状态。这个小工具的设计哲学就是“零打扰”将关键信息以最轻量、最便捷的方式呈现在你的视野边缘比如菜单栏扫一眼就能获取完全无需中断手头工作。其次数据聚合与实时性。官方控制台的数据更新可能有延迟并且展示的信息维度可能不是你最关心的。claude-usage-widget的核心思路是通过定期轮询PollingAnthropic的API获取最新的用量数据并按照开发者更易理解的维度进行重组和展示。比如它可能会将“输入token”和“输出token”分开统计并乘以实时单价来估算成本或者按不同的模型如claude-3-opus、claude-3-sonnet分别统计调用次数。这种自定义的数据视图比通用的后台报表更有针对性。最后预警与自动化。这是官方控制台不太容易做到的进阶功能。想象一下当你的API用量达到月度额度的80%时工具图标变黄达到90%时变红并发送一个系统通知。这能有效避免额度用超导致的服务中断。claude-usage-widget的架构天然支持这类扩展因为它是一个持续运行的后台进程可以轻松集成监控和告警逻辑。2.2 技术栈选型与架构拆解浏览项目的源码通常托管在GitHub我们可以推断出它的典型技术栈。这类桌面小组件尤其是针对macOS的常见的技术方案有几种Swift AppKit原生开发性能最好与系统集成度最高但开发门槛也高且跨平台困难。Electron使用Web技术HTML/CSS/JS构建跨平台桌面应用。优点是开发快、生态丰富缺点是应用体积大、内存占用高。对于一个简单的状态监控工具来说有点“杀鸡用牛刀”。Python 图形库如Tkinter, PyQtPython在数据处理和API调用方面有天然优势结合轻量级GUI库可以快速成型。但打包成独立应用相对麻烦且原生体验一般。脚本 系统原生小组件这是我认为最优雅和高效的方案。也是claude-usage-widget最可能采用的路径。具体来说后端数据获取与处理使用Python或Node.js脚本负责定时调用Anthropic的Usage API解析返回的JSON数据并进行计算如成本估算。前端状态显示利用操作系统提供的轻量级UI组件。在macOS上就是BitBar、SwiftBar或xbar这类工具。它们允许你用任何脚本语言Bash, Python, Ruby, JS等输出特定格式的文本这些工具会读取脚本输出并将其渲染成菜单栏项。图标、颜色、下拉菜单都可以通过脚本控制。从项目的名称和定位来看采用“Python脚本 SwiftBar/xbar”方案的概率极大。这个组合的优势非常明显极简核心逻辑就是一个Python脚本几十到百来行代码。高效系统资源占用极小就是一个脚本进程加一个原生菜单栏控件。灵活所有显示逻辑文本、图标、颜色、菜单项完全由你的脚本输出决定定制能力极强。易部署几乎无需“安装”配置好脚本路径和运行环境即可。注意这里提到的BitBar、SwiftBar、xbar本质是同一类工具的不同迭代或分支。BitBar是开创者但已停止维护SwiftBar是其用Swift重写的现代版本更稳定、功能更强xbar是另一个活跃分支。在后续的实操中我们会以功能更完善的SwiftBar为例。2.3 数据流与核心模块设计理解了技术栈我们就能勾勒出这个小工具内部的数据流动图配置模块脚本首先需要读取你的Claude API Key。出于安全考虑绝不会将API Key硬编码在脚本里。通常的做法是将其存储在系统的环境变量中如ANTHROPIC_API_KEY或者一个外部配置文件如config.json中脚本启动时去读取。数据获取模块这是核心。脚本会定期比如每5分钟或10分钟向Anthropic的API端点例如https://api.anthropic.com/v1/usage发起一个HTTP GET请求。请求头中必须包含x-api-key: YOUR_API_KEY用于鉴权。数据处理模块API返回的通常是JSON格式的数据包含了当前周期通常是当月的用量摘要。脚本需要解析这个JSON提取出诸如total_usage总花费以美元计、input_tokens、output_tokens等关键字段。然后根据Anthropic公开的模型定价表例如claude-3-opus每百万输入token多少钱输出token多少钱可以更精细地估算出各模型的花费占比。显示渲染模块这是与SwiftBar交互的部分。脚本需要将处理好的数据按照SwiftBar规定的格式输出到标准输出stdout。这个格式很简单第一行显示在菜单栏的主文本。例如 $12.34 / $100。后续行以---分隔之后的内容会成为点击菜单栏项后弹出的下拉菜单项。你可以在这里放置更详细的信息如各模型用量、刷新按钮、甚至打开控制台的链接。整个架构清晰、解耦每个模块都可以独立优化或替换。比如你可以更换数据获取的频率修改成本计算的公式或者完全自定义菜单栏显示的风格。3. 环境准备与核心依赖部署3.1 前置条件检查在动手之前确保你的工作环境满足基本要求。这个项目对系统环境的要求并不高但以下几个是必须的操作系统由于我们主要围绕macOS的菜单栏组件展开因此你需要一台macOS设备。理论上Linux桌面环境如GNOME, KDE也有类似argos这样的工具可以实现相同效果但本指南以macOSSwiftBar为主流场景进行说明。Windows系统虽然也有TaskbarX等工具但生态和易用性上差异较大不是本项目的最佳实践平台。Claude API访问权限与密钥这是工具的数据源头。你需要注册Anthropic的开发者账户并在其控制台中创建一个API Key。请妥善保管这个Key它就像你的密码一旦泄露他人就可以用你的额度调用API。创建好后建议立即将其添加到环境变量。Python环境大多数macOS系统都预装了Python 3。打开终端Terminal输入python3 --version检查。建议版本在3.8以上。如果没有可以通过Homebrew (brew install python) 或官方安装包进行安装。Homebrew推荐macOS上强大的包管理器能让我们一键安装SwiftBar等工具。如果还没安装可以访问其官网获取安装命令。3.2 核心工具SwiftBar的安装与配置SwiftBar是我们将脚本“可视化”到菜单栏的桥梁。它的安装非常简单。打开终端使用Homebrew安装brew install swiftbar安装完成后你可以在应用程序文件夹里找到它或者直接在Spotlight搜索“SwiftBar”启动。第一次启动时系统可能会提示需要辅助功能权限以便在菜单栏绘图务必点击“打开”或“允许”。SwiftBar的核心工作方式是监控一个特定的插件文件夹通常位于~/Library/Application Support/SwiftBar/Plugins并执行该文件夹下的脚本。脚本的文件名不含后缀就会成为菜单栏显示的名称。脚本需要具有可执行权限。一个最简单的测试插件可以是这样的创建一个文件~/Library/Application Support/SwiftBar/Plugins/hello.10s.sh内容为#!/bin/bash echo Hello World然后赋予它执行权限chmod x hello.10s.sh。文件名中的.10s是SwiftBar的魔法注释表示每10秒刷新一次。保存后SwiftBar会自动检测到新插件并在菜单栏显示“Hello World”。点击SwiftBar图标你也能在插件列表里看到和管理它。3.3 API密钥的安全存储绝对不能将API Key写在脚本里然后上传到任何地方包括GitHub。我们采用环境变量法这是最通用和安全的方式之一。打开你的终端配置文件。如果你用的是默认的bash文件是~/.bash_profile如果是zshmacOS Catalina及以后默认文件是~/.zshrc。用文本编辑器如nano或vim打开它。nano ~/.zshrc在文件末尾添加一行export ANTHROPIC_API_KEY你的实际API密钥保存并退出编辑器。然后让配置生效source ~/.zshrc验证是否设置成功echo $ANTHROPIC_API_KEY如果正确显示了你的密钥中间几位被隐藏说明设置成功。这样你的Python脚本就可以通过os.environ.get(ANTHROPIC_API_KEY)来安全地读取这个密钥了。实操心得除了环境变量对于更复杂的配置比如多个API Key、自定义刷新频率、成本阈值可以创建一个独立的config.yaml或config.json文件将其放在插件目录外并在脚本中读取。同时务必在.gitignore文件中忽略这个配置文件防止误提交。4. 核心脚本编写与功能实现4.1 解剖一个基础的用量获取脚本现在我们来编写最核心的Python脚本。这个脚本的任务就是获取数据、处理数据、格式化输出。我们将其命名为claude_usage.5m.py放在SwiftBar的插件目录下.5m表示每5分钟运行一次。首先脚本需要引入必要的库#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import requests import json from datetime import datetime#!/usr/bin/env python3这行叫做shebang告诉系统用Python 3来执行这个脚本。第一步获取API Key并设置请求头def main(): api_key os.environ.get(ANTHROPIC_API_KEY) if not api_key: # 如果环境变量未设置则在SwiftBar下拉菜单中显示错误 print(❌ API Key Missing) print(---) print(Please set ANTHROPIC_API_KEY env var | colorred) return headers { x-api-key: api_key, anthropic-version: 2023-06-01, # 使用合适的API版本 Content-Type: application/json }这里做了错误处理。如果没找到API Key菜单栏会显示一个红叉并且在下拉菜单中给出提示。这比脚本直接崩溃抛出异常的用户体验要好得多。第二步发起请求获取用量数据try: # Anthropic的用量API端点请查阅最新文档确认 response requests.get(https://api.anthropic.com/v1/usage, headersheaders, timeout10) response.raise_for_status() # 如果状态码不是200抛出异常 usage_data response.json() except requests.exceptions.RequestException as e: print( Network Error) print(---) print(fFailed to fetch data: {e} | colororange) return except json.JSONDecodeError: print( Data Error) print(---) print(Invalid response from API | colororange) return网络请求总是可能失败的所以必须用try-except包裹。我们处理了网络超时、HTTP错误以及返回数据不是合法JSON的情况并在界面上给出友好的错误提示。第三步解析和计算关键指标假设API返回的数据结构如下具体字段请以Anthropic官方文档为准{ total_usage: 15.78, input_tokens: 1250000, output_tokens: 450000, monthly_limit: 100.0 }我们的脚本可以这样解析total_usage usage_data.get(total_usage, 0) # 本月已用金额美元 monthly_limit usage_data.get(monthly_limit, 100) # 月度额度默认为100 input_tokens usage_data.get(input_tokens, 0) output_tokens usage_data.get(output_tokens, 0) # 计算使用百分比和剩余额度 usage_percentage (total_usage / monthly_limit) * 100 if monthly_limit 0 else 0 remaining monthly_limit - total_usage # 简单的成本估算假设一个平均单价更复杂的可以按模型细分 # 注意这里仅为示例实际成本应由Anthropic的total_usage字段直接提供或根据详细日志计算 avg_input_cost_per_million 15.0 # 示例单价$15 per million input tokens avg_output_cost_per_million 75.0 # 示例单价$75 per million output tokens estimated_cost (input_tokens / 1_000_000) * avg_input_cost_per_million (output_tokens / 1_000_000) * avg_output_cost_per_million这里有一个关键点total_usage字段通常是Anthropic直接计算好的本月累计费用是最权威的数据。上面的estimated_cost只是一个示例展示如何根据token数进行估算。在实际使用中应以total_usage为准。token数可以用来做更细粒度的分析。第四步格式化输出给SwiftBar这是脚本与SwiftBar交互的“协议”。# 1. 第一行菜单栏主显示 # 根据使用率改变图标和颜色 if usage_percentage 70: icon color green elif usage_percentage 90: icon color orange else: icon color red # 主显示文本图标 已用金额/总额度 main_text f{icon} ${total_usage:.2f} / ${monthly_limit:.0f} print(main_text) # 2. 分隔符之后的内容为下拉菜单 print(---) # 3. 下拉菜单项 print(fUsed: ${total_usage:.2f} | color{color}) print(fRemaining: ${remaining:.2f} | colorgreen) print(fPercentage: {usage_percentage:.1f}% | color{color}) print(---) # 菜单内的分隔线 print(fInput Tokens: {input_tokens:,}) print(fOutput Tokens: {output_tokens:,}) print(fEstimated Cost (from tokens): ${estimated_cost:.2f} | colorgray) print(---) # 添加一些操作项 print(Refresh Now | bash param1 refreshtrue terminalfalse) # 点击即刷新 print(Open Anthropic Console | hrefhttps://console.anthropic.com/ colorblue) if __name__ __main__: main()SwiftBar的格式化语法非常直观|后面的内容是属性设置。color可以设置文本颜色。href可以创建一个可点击的链接。bash和refreshtrue组合可以让点击菜单项时重新执行当前脚本即刷新。使用---来创建分隔线。4.2 实现进阶功能多模型统计与成本细分基础的用量显示已经很有用但对于使用多个Claude模型如Opus, Sonnet, Haiku的用户我们可能想知道每个模型的花费占比。这需要调用更详细的API或者自己有本地的调用日志。方案一依赖详细的API接口如果提供Anthropic可能提供一个更详细的用量接口返回按模型、按天细分的数据。你需要查阅最新的API文档。如果存在这样的接口脚本的请求和解析部分会变得更复杂但展示的信息会丰富得多。方案二本地日志分析更灵活但需应用配合这是一个更强大且不依赖Anthropic的解决方案。思路是让你的所有调用Claude API的应用程序都将每次请求的模型、输入/输出token数、时间戳记录到一个本地日志文件或数据库中。然后claude_usage_widget脚本去分析这个日志文件。日志格式设计例如JSON Lines格式{timestamp: 2024-05-27T10:00:00Z, model: claude-3-opus-20240229, input_tokens: 1500, output_tokens: 300} {timestamp: 2024-05-27T10:05:00Z, model: claude-3-sonnet-20240229, input_tokens: 800, output_tokens: 500}修改脚本增加日志分析函数def analyze_local_log(log_file_path~/.claude_api_log.jsonl): import json from collections import defaultdict from pathlib import Path log_path Path(log_file_path).expanduser() if not log_path.exists(): return {} model_stats defaultdict(lambda: {input: 0, output: 0, cost: 0.0}) # 假设我们只分析本月的日志 current_month datetime.now().strftime(%Y-%m) with open(log_path, r) as f: for line in f: try: entry json.loads(line) if entry[timestamp].startswith(current_month): model entry[model] model_stats[model][input] entry[input_tokens] model_stats[model][output] entry[output_tokens] # 根据模型计算成本需要维护一个模型单价字典 cost calculate_cost(entry[model], entry[input_tokens], entry[output_tokens]) model_stats[model][cost] cost except (json.JSONDecodeError, KeyError): continue return model_stats在输出中整合本地分析结果# 在主函数中调用 local_stats analyze_local_log() if local_stats: print(---) print( Usage by Model (Local Log)) for model, stats in local_stats.items(): model_display_name model.replace(claude-3-, ).replace(-20240229, ) print(f{model_display_name}: ${stats[cost]:.2f} | colorgray fontMenlo size12) print(f In: {stats[input]:,} | Out: {stats[output]:,} | colorgray fontMenlo size10)这个方案的优点是数据完全自主可控可以分析任意时间范围甚至可以统计不同项目或用户的用量。缺点是需要改造你的API调用端来记录日志。4.3 菜单栏交互与用户体验优化一个好用的小工具交互细节很重要。我们可以利用SwiftBar的特性做很多优化动态图标与颜色如上例所示根据使用百分比切换图标和文字颜色提供强烈的视觉提示。阈值告警除了颜色变化还可以在用量超过一定阈值时在下拉菜单顶部显示一个醒目的警告信息。if usage_percentage 85: print(⚠️ Usage exceeding 85%! | colorred fontbold) print(---)快捷操作在下拉菜单中加入实用操作。一键刷新我们已经实现了。打开控制台直接链接到Anthropic控制台。复制额度信息可以添加一个菜单项点击后将“已用$X.X剩余$X.X”复制到剪贴板方便在聊天或报告里分享。import subprocess # ... 在菜单项中 ... copy_text fClaude API: Used ${total_usage:.2f}, Remaining ${remaining:.2f} print(fCopy Summary | shellbash param1-c param2printf \{copy_text}\ | pbcopy terminalfalse)pbcopy是macOS上将文本复制到剪贴板的命令。自定义刷新频率脚本文件名中的.5m、.1h控制了基础频率。你还可以在脚本内部根据情况动态调整。比如在办公时间9-18点每5分钟刷新一次其他时间每30分钟刷新一次。current_hour datetime.now().hour if 9 current_hour 18: refresh_interval 300 # 5分钟单位秒 else: refresh_interval 1800 # 30分钟 # SwiftBar可以通过在输出第一行前加特定注释来改变频率但更简单的方法是设置不同的文件名。 # 更动态的方法需要SwiftBar插件支持或调用其API这里不展开。5. 部署、调试与自动化运行5.1 脚本的放置与权限设置写好Python脚本后假设命名为claude_usage.5m.py我们需要将其放到SwiftBar能识别的位置并确保它可以执行。找到插件目录打开SwiftBar在菜单栏点击其图标选择“Preferences...”在设置窗口中可以看到“Plugin Folder”的路径。通常是~/Library/Application Support/SwiftBar/Plugins。复制脚本将你的claude_usage.5m.py文件复制到上述插件目录中。赋予执行权限打开终端执行chmod x ~/Library/Application\ Support/SwiftBar/Plugins/claude_usage.5m.pychmod x命令给文件添加了“可执行”权限这是必须的一步。重启SwiftBar通常SwiftBar会自动检测新插件。如果没有立即出现可以点击SwiftBar图标选择“Refresh All Plugins”或者退出并重新启动SwiftBar应用。现在你应该能在菜单栏看到你的小工具了。如果显示的是文本而不是图标可能是因为脚本第一行输出的就是文本。如果显示一个问号或错误图标说明脚本执行出错了。5.2 调试与日志查看脚本没有按预期工作别急调试是必经之路。直接在终端运行脚本这是最直接的调试方法。在终端中先切换到插件目录然后直接运行你的脚本cd ~/Library/Application\ Support/SwiftBar/Plugins ./claude_usage.5m.py观察输出是否符合SwiftBar的格式要求第一行是主文本然后是---然后是菜单项。同时任何Python的异常信息也会打印在终端里这是定位错误的关键。检查SwiftBar的错误日志SwiftBar自身也会记录插件运行的错误。点击菜单栏图标选择“Open Plugin Folder”在同级目录下可能会找到Logs文件夹里面有运行日志。或者在SwiftBar的偏好设置中也可能有打开日志的选项。常见错误权限错误Permission denied。确保已执行chmod x。Python环境问题/usr/bin/env: python3: No such file or directory。确保Python 3已正确安装且在PATH中。有时可能需要指定完整路径如#!/usr/local/bin/python3。模块未找到ModuleNotFoundError: No module named requests。你需要安装脚本依赖的Python库。在终端运行pip3 install requests。API Key未设置脚本中读取环境变量失败。确保你已经在正确的shell配置文件.zshrc或.bash_profile中设置了ANTHROPIC_API_KEY并且已经source了该文件。特别注意GUI应用如SwiftBar启动时加载的环境变量可能和你的终端环境不同。最可靠的方法是在SwiftBar的插件脚本中通过读取一个配置文件来获取API Key而不是完全依赖环境变量。或者你可以将环境变量设置在全局位置如/etc/launchd.conf或通过launchctl setenv但这更复杂。对于SwiftBar一个简单粗暴但有效的方法是在脚本开头通过读取一个仅所有者可读的配置文件来获取密钥。5.3 实现开机自启动与后台常驻我们希望这个小工具能开机自动运行并且稳定地在后台工作。对于SwiftBar本身打开“系统设置” - “通用” - “登录项”。点击“允许在后台”下方的“”号。在应用程序中找到并添加“SwiftBar”。 这样每次你登录macOS时SwiftBar就会自动启动。对于脚本的稳定性 脚本本身是SwiftBar调用的SwiftBar会负责按照你设定的频率通过文件名中的时间间隔定期运行它。你不需要自己写定时任务如cron。SwiftBar会管理脚本的生命周期。如果脚本运行崩溃SwiftBar会在下次刷新时再次尝试运行它。注意事项虽然SwiftBar很稳定但你的脚本如果存在未处理的异常比如网络突然中断导致requests超时抛出异常可能会导致当次运行没有输出菜单栏显示为空或错误。因此脚本内完善的异常处理至关重要必须确保在任何错误情况下都能输出一个有效的、对用户友好的状态信息到标准输出而不是让Python异常堆栈信息污染输出导致SwiftBar解析失败。6. 常见问题排查与进阶技巧6.1 问题排查速查表问题现象可能原因排查步骤与解决方案菜单栏无显示或显示“”1. 脚本没有可执行权限。2. 脚本第一行输出为空或格式错误。3. SwiftBar未读取到插件目录。1. 终端执行chmod x /path/to/your/script.py。2. 在终端直接运行脚本检查输出前几行。3. 检查SwiftBar偏好设置中的插件路径是否正确重启SwiftBar。显示“API Key Missing”等错误文本环境变量ANTHROPIC_API_KEY未设置或未被SwiftBar进程读取。1. 在终端echo $ANTHROPIC_API_KEY确认已设置。2.最佳实践在脚本中改用配置文件读取密钥。创建一个~/.config/claude_widget/config.json文件存储密钥脚本读取它。确保该文件权限为600(chmod 600 config.json)。用量数据不更新或一直是01. API请求失败网络、鉴权。2. 请求的API端点或版本不对。3. 当前结算周期确实没有用量。1. 在脚本中添加更详细的错误打印可输出到文件日志或临时在终端运行查看报错。2. 核对Anthropic官方文档确认用量API的准确URL和必需的请求头。3. 登录Anthropic控制台确认是否有用量数据。菜单栏图标/文字闪烁或频繁变化脚本运行频率过高或脚本运行时间过长导致重叠执行。1. 检查脚本文件名中的刷新间隔如.5m是否过短根据需求调整如改为.15m或.1h。2. 优化脚本性能减少不必要的计算或网络请求。点击“Refresh Now”没反应SwiftBar的bash命令格式有误。确保菜单项输出格式为Refresh Now | bash param1 refreshtrue terminalfalse。注意转义或使用单引号包围整个属性字符串。Python依赖库缺失脚本使用了未安装的第三方库如requests。在终端使用pip3 install requests安装所需库。确保你安装的Python版本python3和pip版本pip3对应。6.2 进阶技巧与个性化定制多账户支持如果你有多个Anthropic账户比如工作和个人可以轻松扩展。在配置文件中存储多个API Key和别名然后在脚本中轮流查询或让用户在下拉菜单中选择要显示的账户。# config.json { accounts: [ {name: Work, api_key: key1}, {name: Personal, api_key: key2} ] }在菜单栏主显示当前账户下拉菜单中提供一个“Switch Account”的子菜单点击后切换活动账户并刷新。成本预测基于本月已过天数和已用额度简单预测本月总花费是否会超支。from datetime import datetime, timedelta now datetime.now() first_day_of_month datetime(now.year, now.month, 1) days_passed (now - first_day_of_month).days 1 total_days_in_month (datetime(now.year, now.month 1, 1) - timedelta(days1)).day if now.month ! 12 else 31 daily_avg total_usage / days_passed projected daily_avg * total_days_in_month print(fProjected Monthly: ${projected:.2f} | color{red if projected monthly_limit else gray})与系统通知中心集成当用量超过阈值时发送一个本地系统通知这样即使你没看菜单栏也能知道。if usage_percentage 90: # 使用macOS的osascript命令发送通知 title Claude API Alert message fUsage is at {usage_percentage:.1f}%! Remaining: ${remaining:.2f} os.system(fosascript -e display notification \{message}\ with title \{title}\)数据持久化与简单图表将每次获取的用量数据时间戳、已用额度追加到一个CSV文件中。然后可以写一个单独的脚本或集成到主脚本中以另一个菜单项触发用matplotlib生成一个本月用量趋势图并保存为图片。在下拉菜单中添加一个“Show Chart”项点击后用预览打开图片。这需要额外的依赖但可视化效果更直观。6.3 安全最佳实践重申最后必须再次强调安全因为API Key就是钱。永远不要硬编码绝对不要将API Key直接写在脚本的源代码里。使用配置文件并设置严格权限将密钥存储在用户主目录下的一个配置文件中如~/.config/claude_widget/config并将该文件的权限设置为仅所有者可读可写 (chmod 600)。忽略配置文件如果你的脚本和配置在同一个Git仓库下务必在.gitignore文件中添加你的配置文件名防止误提交到公开仓库。定期轮换密钥如果可行定期在Anthropic控制台生成新的API Key并更新配置文件禁用旧的Key。这个claude-usage-widget项目本质上是一个思维的火花它展示了如何用简单的工具链Python SwiftBar解决一个具体的效率痛点。它的代码可能不长但蕴含的思路——主动获取、近场展示、预警提示——却可以应用到很多其他场景比如监控服务器状态、跟踪股票价格、显示待办事项等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2598668.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…