agentCLAWHUBUnverified

飞书个人记账(含面板app)

飞书多维表格记账系统完整技能包。包含两步:1)运行 feishu-accounting-setup 引导用户完成飞书应用创建、多维表格搭建、凭证获取;2)使用 record_bill.py 进行日常记账(支持本地存储 + 飞书多维表格同步)。**同步使用永久有效的 Tenant Token。单表模式:所有记录写入... Skill: 飞书个人记账(含面板app) Owner: naeemtc Summary: 飞书多维表格记账系统完整技能包。包含两步:1)运行 feishu-accounting-setup 引导用户完成飞书应用创建、多维表格搭建、凭证获取;2)使用 record_bill.py 进行日常记账(支持本地存储 + 飞书多维表格同步)。**同步使用永久有效的 Tenant Token。单表模式:所有记录写入... Tags: accounting:2.0.0, bitable:2.0.0, feishu:2.0.0, latest:2.1.0, setup:2.0.0 Version history: v2.1.0 | 2026-05-22T06:15:09.367Z | user v2.1.0: 饼图右侧图例, 删除逻辑修复(先飞书再本地), 单选框字段匹配修复, SKILL.md权限19个scope补全, 清理踩坑说明 v2.0

OpenClaw

Rank

62

Safety

84

Downloads

1.5k

Updated

Oct 10, 2026

Version

2.1.0

Source

CLAWHUB

About

What it does, and when to use it.

Capability contract not published. No trust telemetry is available yet. 1.5K downloads reported by the source. Last updated 10/10/2026.

Avoid when

  • Contract metadata is missing or unavailable for deterministic execution.

Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing

Public facts

Every fact links back to the source it came from.

Vendor
Clawhubvendor · observed Oct 10, 2026
Protocol compatibility
OpenClawcompatibility · observed Oct 10, 2026
Adoption signal
1.5K downloadsadoption · observed Oct 10, 2026
Latest release
2.1.0release · observed May 22, 2026
Handshake status
UNKNOWNsecurity

Install and run

Setup complexity: low.

clawhub skill install s170vht2yz7teynje6m1q699xh84rgyr:feishu-accounting
  1. Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.
  2. Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.

Contract: missing

curl -s "https://www.xpersona.co/api/v1/agents/clawhub-naeemtc-feishu-accounting/snapshot"

Documentation

CLAWHUB

146,406 characters of source documentation, loaded on request.

Extracted files

5 files captured from the source.

SKILL.md

---
name: feishu-accounting
description: 飞书多维表格记账系统完整技能包。包含两步:1)运行 feishu-accounting-setup 引导用户完成飞书应用创建、多维表格搭建、凭证获取;2)使用 record_bill.py 进行日常记账(支持本地存储 + 飞书多维表格同步)。**同步使用永久有效的 Tenant Token。单表模式:所有记录写入明细表,通过「类型」字段区分支出和收入。**
version: 1.3.4
author: Naeem
homepage: https://github.com/NaeemTC/feishu-accounting-skill
tags: [feishu, bitable, accounting, setup, permissions]
---

# 飞书多维表格记账系统

## 概述

本技能是完整的飞书记账解决方案,分两个阶段:

| 阶段 | 触发条件 | 做什么 |
|------|----------|--------|
| **Setup** | 用户请求配置记账系统 | 引导创建飞书应用 → 一键搭建多维表格 → 输出凭证 |
| **Usage** | 用户记账(说金额/上传图片/查账单) | 解析记账输入 → 写本地 bills/ → 同步飞书明细表(单表模式) |

---

## 第一阶段:Setup(首次配置)

### 触发词

用户说以下内容时执行 Setup:

- "配置飞书记账"
- "帮我搭建记账系统"
- "飞书记账怎么配置"
- "setup feishu accounting"
- "我想用飞书记账"

### Step 1:引导用户创建飞书自建应用

**把以下内容发给用户:**

> **请在飞书开放平台创建一个自建应用:**
>
> 1. 打开 https://open.feishu.cn/app
> 2. 点击「创建企业自建应用」
> 3. 填写应用名称(如「记账助手」)和描述
> 4. 创建完成后,在「凭证与基础信息」页面复制 **App ID** 和 **App Secret**
>
> 复制好后发给我。

等待用户提供 App ID 和 App Secret。

### Step 2:一键开通权限(Agent 自动生成授权链接,用户只需点击确认)

**AI 执行** `apply_permissions.py`(自动获取 Tenant Token、生成一键授权链接):

```bash
cd /path/to/feishu-accounting/
python3 scripts/apply_permissions.py \
  --app-id "cli_用户的AppID" \
  --app-secret "用户的AppSecret"
```

脚本输出一个 **一键授权链接**,AI 直接把脚本输出的完整链接原样发给用户

> ⚠️ **AI 注意**:不要自己拼链接!必须运行 `apply_permissions.py`,取 stdout 里的链接,原样发给用户。链接里必须包含以下全部 19 个权限,一个不能少:
>
> `base:app:read,base:app:update,base:app:create,base:table:read,base:table:create,base:table:update,base:table:delete,base:field:read,base:field:create,base:field:update,base:field:delete,base:record:read,base:record:create,base:record:update,base:record:delete,base:view:read,base:view:write_only,bitable:app:readonly,bitable:app`
>
> 用户点击链接 → 页面列出所有权限 → 全选后点击 **「确认开通权限」** → 完成。

**然后 AI 调用** `scopes/apply` API 提交管理员审批申请。

---

### Step 3:一键搭建多维表格

用户提供 App ID + App Secret 后,运行 `setup_bitable.py`(无需安装任何外部工具,直接调飞书 API):

```bash
cd /path/to/feishu-accounting/
python3 scripts/setup_bitable.py \
  --app-id "cli_用户的AppID" \
  --app-secret "用户的AppSecret"
```

脚本会自动完成:
1. 获取 Tenant Token(永久有效)
2. 创建多维表格「个人记账本」
3. 创建一张明细表(单表模式,支出和收入共用)
4. 创建所有字段(文本/月份/金额/分类/类型)+ 补充选项(18个分类 + 收支类型选项)

输出 4 个凭证:App ID / App Secret / Base Token / 明细表 Table ID

### Step 4:输出凭证给用户

**AI 必须将以下 4 个凭证填入实际值后发送给用户(App ID / App Secret 来自 Step 1 用户提供的值,Base Token / Table ID 来自 Step 3 脚本输出的):**

> ✅ 飞书记账配置完成!
>
> 请保存以下 4 个凭证——首次打开手机 App 时需要按顺序输入:
>
> 1. **App ID**:`你的App_ID`
> 2. **App Secret**:`你的App_Secret`
> 3. **Base Token**:`你的Base_Token`
> 4. **明细表 Table ID**:`你的明细表ID`
>
> 输入后 App 就能正常查看你的账单数据了。
>
> 📊 **多维表格链接**:https://bytedance.feishu.cn/base/`你的Base_Token`
> (浏览器打开就能直接看到你建的全量账本数据)

### Step 5:配置凭证(让 record_bill.py 能用)

**AI 执行**,在 skill 目录下创建 `.env` 文件(`record_bill.py` 启动时会自动加载):

```bash
# 在技能目录创建 .env(record_bill.py 会自动从同目录读取)
cat > /path/to/feishu-accounting/.env << 'EOF'
FEISHU_APP_ID=你的App_ID
FEISHU_APP_SECRET=你的App_Secret
FEISHU_BASE_TOKEN=你的Base_Token
FEISHU_DETAIL_TABLE_ID=你的明细表ID
EOF
```

### Step 6:询问用户是否安装 App(仪表盘)

配置完成后,**询问用户**

_meta.json

{
  "ownerId": "kn7etcgy8pnarg34q82gvdz1ed84spgr",
  "slug": "feishu-accounting",
  "version": "2.1.0",
  "publishedAt": 1779430509367
}

references/apk-architecture.md

# APK 仪表盘 App 内部架构

本 App 是 Capacitor 项目,核心为单文件 `dist/index.html`(~1100 行)。Android 层只提供一个 WebView 壳子,所有 UI 和业务逻辑在 HTML 内。

## 文件结构(dist 目录)

```
dist/
└── index.html          # 唯一源码,内嵌 CSS + JS + ECharts
android/
└── app/
    └── build.gradle    # versionCode + versionName + 签名配置
```

## 字段索引映射(FI)

Feishu base v3 API 使用 `offset` 翻页时,记录以**位置数组**返回。`FI` 对象定义字段位置:

```javascript
var FI = {text: 0, month: 1, amount: 2, category: 3, type: 4};
```

| 索引 | 字段名 | Feishu 类型 | JS 访问方式 | 示例值 |
|------|--------|-------------|------------|--------|
| 0 | 文本 | 文本 | `r[FI.text]` | `"2026-05-21 12:30 午饭"` |
| 1 | 月份 | 文本 | `r[FI.month]` | `"2026-05"` |
| 2 | 金额 | 数字 | `r[FI.amount]` | `23.50` |
| 3 | 分类 | 单选 | `r[FI.category]` | `["餐饮"]` |
| 4 | 类型 | 单选 | `r[FI.type]` | `["支出"]` |

注意:单选/多选字段在数组中的值是 **数组**(`["餐饮"]`),取第一个用 `arr[0]`。

**FI 顺序由 setup_bitable.py 中 create_field 的调用顺序决定**,不能随意调整。

## 业务逻辑流程

### 数据生命周期

1. **登录** → 输入 App ID / Secret / Base Token / Table ID → 存 localStorage
2. **init()** → getToken() → fetchAll() → 拉取全部明细记录 → showApp() + render()
3. **刷新** → doRefresh() → 重新 fetchAll → 渲染
4. **月份切换** → 改变 curMonth → re-render(不复拉数据)
5. **全部模式** → isTotalMode=true → render(month=null) → 聚合所有月份

### 渲染链

```
render()
├── getMonthSummary(month)      → 遍历 detailRecords,按 type 字段区分收支
├── renderSummary(inc, exp)     → 三张卡片 + 自适应字号(canvas measureText)
├── renderPie(cats)             → 支出饼图(ECharts 环形图)
├── renderIncPie(incCats)       → 收入饼图(仅在 showIncomePie=true 时)
├── renderHBar(cats)            → 分类金额水平条形图
├── renderBar()                 → 月度对比柱状图(从 detailRecords 按月份聚合)
├── renderLine(month)           → 日支出趋势折线图
└── renderDetails(month)        → 消费明细列表 + 分页
```

### 样式架构

- 主题通过 `data-theme` 属性切换(dark / light)
- 所有颜色通过 CSS 变量引用(`var(--bg)`, `var(--card)` 等)
- ECharts 颜色通过 `CUR_THEME` 对象传递
- 按钮反馈统一使用 `transform:scale`
- 页面入场:`fadeUp` 动画

## UI 约定速查

| 组件 | CSS 类 | 按压反馈 | 禁用态 |
|------|--------|----------|--------|
| 导航按钮 | `.mbtn` | `scale(.88)` | `opacity:.35, cursor:not-allowed` |
| 主操作按钮 | `.lbtn` | `scale(.97)` | (无禁用态) |
| 弹窗按钮 | `.dbtn` | `scale(.95)` | (内联控制) |
| 功能按钮按下态 | `.pressed` | 背景色变 accent,颜色变白 | — |
| header 齿轮 | `.mbtn.sett:active` | `rotate(45deg)` | — |
| header 刷新 | `.mbtn.refresh:active` | `rotate(180deg)` | — |

## 弹窗系统

所有弹窗使用同一套模式:

1. 点击触发 → `lock-scroll` → 移除 overlay 的 `hidden` → 显示 `dialogIn` 动画
2. 关闭 → `closeOverlay(id)` → 加 `.closing` 类触发 `dialogOut` 动画(150ms)→ 加 `.hidden` → 移除 `lock-scroll`
3. 背景关闭 → 绑定 `click` 事件检查 `e.target === this`

| 弹窗 | overlay ID | 关闭方式 |
|------|-----------|----------|
| 设置 | `sett-overlay` | 点击 ✕ / 背景 |
| 分类设置 | `cat-overlay` | 点击 ✕ / 背景 |
| 检查更新 | `upd-overlay` | 点击按钮 / 背景 |
| 关于 | `abt-overlay` | 点击 ✕ / 背景 |
| 刷新确认 | `refresh-overlay` | 点击按钮 / 背景 |
| 通用错误 | `.dialog` | 点击按钮 |

## 主题系统

```javascript
var THEMES = {
  dark:  { tooltipBg: '#1a1a2e', tooltipBorder: '#2a2a4a', ... },
  light: { tooltipBg: '#ffffff', tooltipBorder: '#ddd6cc', ... }
};
```

`applyTheme(theme)` 会:
1. 设置 `data-theme` 属性 + `

references/categories.md

# 消费分类参考

## 支出分类 (expense)

| 分类 | 关键词示例 |
|------|-----------|
| 餐饮 | 吃饭、早餐、午饭、晚饭、咖啡、奶茶、外卖、餐厅、饭店、小吃 |
| 购物 | 超市、买、购物、衣服、鞋子、电商、淘宝、京东、日用品 |
| 交通 | 打车、地铁、公交、高铁、机票、停车、加油、滴滴 |
| 娱乐 | 电影、KTV、旅游、景区、演出、门票、球票、彩票、赌球、游戏氪金 |
| 医疗 | 医院、药店、药、挂号、体检、看病 |
| 住房 | 房租、水电、物业、燃气、宽带、房贷 |
| 教育 | 学费、课程、培训、书、资料、考试 |
| 通讯 | 话费、手机费、流量、套餐 |
| 服饰 | 衣服、鞋子、包包、穿搭、配饰、首饰 |
| 生活 | 日用、日用品、理发、洗衣、五金、杂货 |
| 数码 | 手机、数码、充电器、耳机、硬盘、数据线 |
| 运动 | 健身、运动、游泳、羽毛球、球鞋、瑜伽 |
| 宠物 | 宠物、猫粮、狗粮、猫砂、疫苗、驱虫 |
| 其他 | 未匹配到以上分类时使用 |

## 收入分类 (income)

| 分类 | 关键词示例 |
|------|-----------|
| 工资 | 工资、薪资、月薪、基本工资 |
| 奖金 | 奖金、绩效、年终奖、提成 |
| 兼职 | 兼职、副业、外包、接单 |
| 投资 | 理财、股票、基金、利息、分红 |
| 其他 | 红包、转账、报销、退款 |

## ⚠️ 分类陷阱

**不要把金额大的消费归入"其他"**:¥2100银行转账、¥1621五一汇总等大额消费若归入"其他",统计时会掩盖真实支出结构。遇到无法归类的消费,应在备注里写清楚实际用途,尽量找到合适分类。

**彩票/游戏 → 娱乐**:彩票(体彩、足彩)和游戏氪金都属于娱乐,记账时直接用"娱乐"分类,不要单独新建"彩票"或"游戏"分类。

**"其他收入"慎用**:收入来源不明确时(如期初余额、红包、退款)才用,其他情况应尽量具体(工资/兼职/投资/股票等)。

## 飞书分类映射

record_bill.py 本地分类 → 飞书选项名映射:

| 本地分类 | 飞书选项 |
|----------|----------|
| 餐饮/购物/交通/娱乐/通讯/生活/医疗/住房/教育/服饰/数码/运动/宠物 | 自身同名选项 |
| 其他/银行/工资/奖金/兼职/投资 | 其它 |

飞书明细表分类字段已预设 14 个选项(13分类+其它),本地分类与飞书选项名一致时直接匹配,无需映射。

## 分类推断逻辑

AI 在解析用户文字时,应根据关键词自动推断分类:
1. 精确匹配关键词 → 直接使用对应分类
2. 无法匹配 → 使用"其他",并在回复中告知用户已使用默认分类
3. 用户可在确认时纠正分类

references/feishu-base-api-pitfalls.md

# 飞书 base/v3 API 踩坑记录

## 1. Record 创建:不加 `fields` 包装

```python
# ✅ 正确(base/v3 API 直接平铺字段)
payload = {
    "月份": "2026-05",
    "分类": "餐饮",
    "金额": 23.40,
    "文本": "2026-05-15 13:11午饭",
}

# ❌ 错误(这是其他飞书 API 的格式,base/v3 不支持)
payload = {
    "fields": {
        "月份": "2026-05",
        ...
    }
}
```

错误响应:`"Record write payload must not be wrapped in 'fields'."`

## 2. Tenant Token 分页上限只有 ~20 条

`page_size=100` 参数在 Tenant Token 下实际只返回 20 条(实测验证),`has_more` 正常指示。

**正确翻页写法:**

```python
offset = 0
while True:
    url = f"/records?page_size=100&offset={offset}"
    # ... 请求 ...
    records = data["data"]["data"]
    if not records:
        break
    for rec in records:
        process(rec)
    offset += len(records)  # 按实际返回数累加,而非固定步长
```

**错误写法(会漏数据):**
```python
offset += 100  # ❌ 实际只返回 20 条,offset=100 跳过了 21-100
```

## 3. 字段创建后需等待缓存生效

创建字段后立即更新选项(UPDATE field)需要加 `time.sleep(1)`,否则飞书返回 400。

```python
def update_field_options(...):
    time.sleep(1)  # 等待字段创建缓存生效
    # 然后才能 PUT 更新选项
```

## 4. 地址恢复与字段映射

```
创建多维表格: data["base_token"]        # 不是 data["base"]["token"]
创建数据表:   data["id"]                # 不是 data["table_id"]
创建字段:     data["id"]                # 不是 data["field"]["id"]
更新字段:     用 PUT                     # 不是 PATCH
```

每次写字段前,建议调 `GET /fields` 确认字段顺序和 ID,不要靠记忆写死 index。

## 5. `.env` 加载:用直接赋值覆盖父 shell 变量

```python
# ❌ 错误:setdefault 不覆盖已存在的环境变量
# 如果父 shell 已有 FEISHU_APP_ID(旧应用的),.env 的值会被忽略
os.environ.setdefault(k.strip(), v.strip())

# ✅ 正确:直接赋值,.env 始终优先
os.environ[k.strip()] = v.strip()
```
Github ReposUpdated 17h agoRank 70

AionUi

Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!

MCPOPENCLAW
Github ReposUpdated 6mo agoRank 70

activepieces

AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents

OPENCLAW
Github ReposUpdated 6mo agoRank 70

cherry-studio

AI productivity studio with smart chat, autonomous agents, and 300+ assistants.

MCPOPENCLAW
Github ReposUpdated 7mo agoRank 70

CopilotKit

The Frontend for Agents & Generative UI. React + Angular

OPENCLAW

Machine-readable data

The same record, as JSON, for agents and crawlers.

{
  "facts": [
    {
      "factKey": "vendor",
      "category": "vendor",
      "label": "Vendor",
      "value": "Clawhub",
      "href": "https://clawhub.ai/naeemtc/skills/feishu-accounting",
      "sourceUrl": "https://clawhub.ai/naeemtc/skills/feishu-accounting",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-10T10:04:13.007Z",
      "isPublic": true
    },
    {
      "factKey": "protocols",
      "category": "compatibility",
      "label": "Protocol compatibility",
      "value": "OpenClaw",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-naeemtc-feishu-accounting/contract",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-naeemtc-feishu-accounting/contract",
      "sourceType": "contract",
      "confidence": "medium",
      "observedAt": "2026-10-10T10:04:13.007Z",
      "isPublic": true
    },
    {
      "factKey": "traction",
      "category": "adoption",
      "label": "Adoption signal",
      "value": "1.5K downloads",
      "href": "https://clawhub.ai/naeemtc/feishu-accounting",
      "sourceUrl": "https://clawhub.ai/naeemtc/feishu-accounting",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-10T10:04:13.007Z",
      "isPublic": true
    },
    {
      "factKey": "latest_release",
      "category": "release",
      "label": "Latest release",
      "value": "2.1.0",
      "href": "https://clawhub.ai/naeemtc/feishu-accounting",
      "sourceUrl": "https://clawhub.ai/naeemtc/feishu-accounting",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-05-22T06:15:09.367Z",
      "isPublic": true
    },
    {
      "factKey": "handshake_status",
      "category": "security",
      "label": "Handshake status",
      "value": "UNKNOWN",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-naeemtc-feishu-accounting/trust",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-naeemtc-feishu-accounting/trust",
      "sourceType": "trust",
      "confidence": "medium",
      "observedAt": null,
      "isPublic": true
    }
  ],
  "events": [
    {
      "eventType": "release",
      "title": "Release 2.1.0",
      "description": "v2.1.0: 饼图右侧图例, 删除逻辑修复(先飞书再本地), 单选框字段匹配修复, SKILL.md权限19个scope补全, 清理踩坑说明",
      "href": "https://clawhub.ai/naeemtc/feishu-accounting",
      "sourceUrl": "https://clawhub.ai/naeemtc/feishu-accounting",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-05-22T06:15:09.367Z",
      "isPublic": true
    }
  ]
}

Record generated Oct 10, 2026.

Sponsored

Ads related to 飞书个人记账(含面板app) and adjacent AI workflows.