diff --git a/docs.json b/docs.json
index 8f7c4ba4..13b52705 100644
--- a/docs.json
+++ b/docs.json
@@ -3185,6 +3185,7 @@
"icon": "comments",
"pages": [
"zh/ai-sre/sessions",
+ "zh/ai-sre/masking",
"zh/ai-sre/im",
"zh/ai-sre/automations",
"zh/ai-sre/artifacts"
@@ -4984,6 +4985,7 @@
"icon": "comments",
"pages": [
"en/ai-sre/sessions",
+ "en/ai-sre/masking",
"en/ai-sre/im",
"en/ai-sre/automations",
"en/ai-sre/artifacts"
diff --git a/en/ai-sre/masking.mdx b/en/ai-sre/masking.mdx
new file mode 100644
index 00000000..8060986f
--- /dev/null
+++ b/en/ai-sre/masking.mdx
@@ -0,0 +1,108 @@
+---
+title: "Data masking"
+description: "Configure masking rules per AI SRE session so passwords, keys, and personal data are replaced before they reach the model."
+sidebarTitle: "Data masking"
+keywords: ["data masking", "masking", "privacy", "secret terms", "custom words", "detection model"]
+---
+
+Data masking decides which content in an AI SRE session is replaced with a placeholder before it is sent to the model. Use it when a session touches production passwords, access tokens, or customer personal data: the agent can still investigate without receiving the original values.
+
+## Open the masking settings for a session
+
+Open **More** in the top-right of an AI SRE session and select **Data masking**. The item appears only when your deployment has data masking enabled.
+
+Masking is per session: each session keeps its own rules and word list, and a change applies to that session only. Once enabled, everything the session sends to the model is replaced first, including messages already stored in the session and credential values actually injected into the execution environment.
+
+## How masked content appears
+
+A replacement looks like `[MASK_PASSWORD_3f9a…]`. The model sees only the placeholder, never the original value.
+
+| Term type | In the session UI | Notes |
+| --- | --- | --- |
+| **Data term** | Restored to the original value | For content you need to read yourself, such as host names and email addresses |
+| **Secret term** | Always shows the placeholder | Never displayed again after saving, for anyone including you |
+
+Content caught by automatic detection (passwords, tokens, email addresses, and so on) is handled as a data term.
+
+## Automatic detection
+
+**Automatic detection** is a set of category switches covering common credentials and personal data:
+
+| Category | Covers | Default |
+| --- | --- | --- |
+| **Keys and passwords** | Access tokens, private keys, passwords inside connection strings | On |
+| **Basic personal data** | Email addresses, phone numbers, national ID and bank card numbers | On |
+| **Additional personal data** | Social security number, passport, IBAN, birthday, MAC address, device serial number | Selected; turn each one off as needed |
+| **Operational identifiers** | Home directory, login and host name, public IP, bucket name | Off by default; turn on as needed |
+
+Operational identifiers are off by default because those values are often exactly what you investigate (a public IP, a bucket name). Once turned on, they also reach the session only as placeholders.
+
+## Custom terms
+
+**Custom terms** cover values automatic detection misses. Enter one term per line:
+
+- **Data term**: for example a host name or a customer domain. The UI restores it; the model always sees the placeholder.
+- **New secret term**: for example a temporary password or a freshly rotated token. Not displayed after saving.
+- **Ignore case**: match regardless of letter case.
+- **Whole words only**: replace only complete words, so `db` is not replaced inside a longer identifier such as `db-proxy`.
+
+## Custom formats
+
+When your company has its own key format (an internally issued prefix, a token with a fixed shape), add a rule under **Custom formats**:
+
+| Field | Description |
+| --- | --- |
+| **Rule category** | The category name shown for matches of this rule, for example `INTERNAL_TOKEN` |
+| **Prefix** | Detect by prefix, for example `acme_` |
+| **Regex** | Detect by RE2 regular expression, for example `acme_[A-Za-z0-9]{32}` |
+
+Use either prefix or regex, not both. Verify the rule with the preview before saving.
+
+## Private detection model
+
+Names and addresses in free text have no fixed format; the **private detection model** detects this kind of content:
+
+- Processed only inside Flashduty's own service, never sent to a model vendor.
+- **Minimum confidence** sets the threshold; matches below it are left unmasked so ordinary text is not damaged.
+- When your deployment has no private detection model configured, this section is unavailable; the other rules still apply.
+
+## Preview and apply
+
+**Preview** lets you verify rules before saving: enter sample text, select **Preview**, and the panel shows the masked result and how many items matched. The preview shows only the replacement, never the original value.
+
+**Session summary** shows how many masked items this session has stored, split by category and by source (built-in rule, custom word, custom rule, detection model, and so on). Select **Save settings** to write the change; it takes effect for the session immediately.
+
+## Limits
+
+| Item | Limit (default) |
+| --- | --- |
+| Masked items per session | 1,000 |
+| Length of one term | 16 KB |
+| Text per preview or send | 256 KB |
+
+Once the limit is reached, new terms are not saved. Clear custom terms you no longer need.
+
+## FAQ
+
+
+
+ Yes. A placeholder keeps its category (for example `[MASK_TOKEN_…]`) and its position, so the model can still tell that a token appears here, in which log line and which service; it just cannot see the value. If you need to read the value in the UI, add it as a **data term** rather than a secret term.
+
+
+ When you fork a session or continue it into a new one, Flashduty re-checks your access to the source session and then carries its word list to the new session, so one line of investigation does not end up with two different masking results.
+
+
+ No. Stored content is unchanged; messages are replaced when they are next sent to the model, and the original record stays as it is.
+
+
+
+## Related pages
+
+
+
+ Review the session record and what the agent did
+
+
+ See what context a session carries
+
+
diff --git a/en/on-call/configuration/personal-settings.mdx b/en/on-call/configuration/personal-settings.mdx
index 4e4ebbc2..c857f79b 100644
--- a/en/on-call/configuration/personal-settings.mdx
+++ b/en/on-call/configuration/personal-settings.mdx
@@ -57,6 +57,21 @@ For supported phone number regions, refer to [FAQ](/en/on-call/quickstart/faq).
The organization time zone is maintained on the [Organization Information](/en/platform/organization-info) page by an account with edit permission (the subject account or an Account.Admin; see [Permission Design](/en/platform/permission-design)). Changing it affects the time display of every member who follows the organization.
+### AI SRE byline
+
+When AI SRE acts as you (for example an automation writes its findings back to an incident, or the agent sends email in your name), the byline is decided here. The two settings cover the incident timeline and email separately:
+
+| Setting | Options | Effect |
+| --- | --- | --- |
+| **Incident timeline attribution** | **You and AI SRE (default)**, **Only you**, **Only AI SRE** | How AI SRE signs new records it adds to the incident timeline under your identity |
+| **Email sender name** | **You (via Flashduty AI SRE) (default)**, **Only you**, **Only AI SRE** | The sender name recipients see when AI SRE sends email under your identity |
+
+The byline is read once when the action is created and stored with that record, so changing the setting does not rewrite records that already exist. To see the joint byline on the timeline, see [Action items and follow-ups](/en/on-call/incident/work-items).
+
+
+This group is hidden when only non-On-call modules such as RUM or Status Pages are deployed.
+
+
## Notification preferences
The **Notification** page configures notification channels **per notification scene**: **Incident Dispatch**, **Collaboration & Follow-up**, **Schedule Shift**, and **Internal Status Page**.
diff --git a/en/rum/analytics/native.mdx b/en/rum/analytics/native.mdx
index b76d9b9e..45a1f322 100644
--- a/en/rum/analytics/native.mdx
+++ b/en/rum/analytics/native.mdx
@@ -44,11 +44,13 @@ The Performance Analysis module focuses on full-chain monitoring of core experie
### Core performance metrics
-The top section displays P75 percentile values for five performance metrics:
+The top section displays P75 percentile values for the metrics the platform reports:
- **App Startup Time (P75)**: Monitor the P75 percentile of app startup duration to evaluate startup performance. Startup time directly impacts user first impressions and willingness to use the app.
- **Frame Rate (P75)**: Display the P75 percentile of runtime frame rate to measure visual smoothness. Target is 60fps; higher values indicate smoother interactions. The SDKs normalize per-frame samples from high-refresh-rate screens (ProMotion, 120Hz Android devices) to a 60fps baseline and cap them at 60. The metric shows relative smoothness, not the display's physical refresh rate.
-- **CPU Usage (P75)**: Track the P75 percentile of CPU utilization to identify compute-intensive operations. High CPU usage leads to device heating and increased battery drain.
+- **CPU Usage (P75)**: CPU usage of the app process while the view is in the foreground, normalized by core count so it compares across device models. 100% means every core was busy with this app for the whole period, and a high value points to compute-heavy work or busy waiting. Shown for iOS apps only, and requires iOS SDK **0.9.0** or later; otherwise the card reports no data.
+- **Main Thread CPU (P75)**: CPU usage of the main thread while the view is in the foreground; 100% means the main thread ran on the CPU the whole time. A high value means the main thread is overloaded and frames are more likely to drop, so read it together with frame rate and App Hang. Jank caused by locks or blocking I/O does not raise this metric. Like CPU Usage, shown for iOS apps only.
+- **CPU Consumption (P75)**: Track the P75 percentile of CPU utilization to identify compute-intensive operations. High CPU usage leads to device heating and increased battery drain.
- **Memory Usage (P75)**: Monitor the P75 percentile of app memory usage to detect memory leaks or abnormal growth early.
- **JS Thread Frame Rate (P75)**: Monitor the P75 percentile of the React Native JS thread's frame rate (FPS). Compared with the native frame rate, it reflects jank caused by business JavaScript more directly (re-renders, synchronous work on the bridge). Reported only by the React Native SDK.
@@ -65,7 +67,8 @@ Performance metrics by view name (Page/Activity/ViewController):
- **Startup Time**: Monitor loading duration for each view to locate slow-loading pages.
- **Frame Rate**: Track runtime frame rate performance for each view to identify rendering issues.
- **JS Thread Frame Rate**: Track each view's React Native JS thread frame rate (FPS) to spot jank in business JavaScript. Only the React Native SDK reports it, so the column is empty for other platforms.
-- **CPU Usage**: Statistics of CPU utilization for each view to optimize compute-intensive pages.
+- **CPU Consumption**: Statistics of CPU utilization for each view to optimize compute-intensive pages.
+- **CPU Usage / Main Thread CPU**: iOS apps additionally show these two columns as P75 values. They use the same definitions as the cards above and are reported only by iOS SDK 0.9.0 and later.
- **Memory Usage**: Monitor memory usage for each view to detect memory leak risks.
### Smoothness analysis
@@ -380,7 +383,7 @@ A request that reuses an existing connection has no DNS lookup or connection set
|--------|-----------------|------|----------|------|
| App Startup Time | vital_duration (vital_type=app_launch, vital_app_launch_metric=ttid) | Within 2s | Within 4s | Over 4s |
| Frame Rate | view_refresh_rate_average | 55 FPS or above | 50 FPS or above | Below 50 FPS |
-| CPU Usage | view_cpu_ticks_per_second | Below 40 ticks/s | Below 60 ticks/s | 60 ticks/s or above |
+| CPU Consumption | view_cpu_ticks_per_second | Below 40 ticks/s | Below 60 ticks/s | 60 ticks/s or above |
| Memory Usage | view_memory_average | Below 200 MB | Below 400 MB | 400 MB or above |
| Peak Memory | view_memory_max | Below 200 MB | Below 400 MB | 400 MB or above |
| JS Thread Frame Rate | view_js_refresh_rate_avg | 55 FPS or above | 50 FPS or above | Below 50 FPS |
diff --git a/zh/ai-sre/masking.mdx b/zh/ai-sre/masking.mdx
new file mode 100644
index 00000000..4892b346
--- /dev/null
+++ b/zh/ai-sre/masking.mdx
@@ -0,0 +1,107 @@
+---
+title: "数据脱敏"
+description: "为单个 AI SRE 会话配置脱敏规则,让密码、密钥、个人信息在发送给模型前被替换。"
+keywords: ["数据脱敏", "脱敏", "隐私", "秘密词", "自定义词", "识别模型"]
+---
+
+数据脱敏决定 AI SRE 会话里的哪些内容在发送给模型前被替换成占位符。会话涉及生产密码、访问令牌、客户个人信息时,用它可以保留排查能力,同时不把原始值交给模型。
+
+## 打开会话的脱敏设置
+
+在 AI SRE 会话页右上角的 **更多** 菜单中点击 **数据脱敏**。该菜单项只在平台为您的部署启用数据脱敏时出现。
+
+脱敏按会话生效:每个会话有自己的规则和词表,改动只影响该会话。启用后,该会话发送给模型的内容(包括此前已保存的历史消息和执行环境中实际注入的凭据值)都会先做替换。
+
+## 脱敏后的显示
+
+替换结果形如 `[MASK_PASSWORD_3f9a…]`,模型只会看到占位符,不会看到原始值。
+
+| 词类型 | 在会话界面 | 说明 |
+| --- | --- | --- |
+| **数据词** | 还原为原始值 | 用于主机名、邮箱等需要您本人看懂的内容 |
+| **秘密词** | 始终显示占位符 | 保存后不再显示原文,任何人(包括您)都无法在界面中看到 |
+
+自动识别命中的内容(密码、令牌、邮箱等)按数据词处理。
+
+## 自动识别
+
+**自动识别** 按类别开关,覆盖常见凭据和个人信息:
+
+| 类别 | 覆盖内容 | 默认 |
+| --- | --- | --- |
+| **密钥和密码** | 访问令牌、私钥、连接字符串中的密码 | 开启 |
+| **基础个人信息** | 邮箱、手机号、身份证和银行卡 | 开启 |
+| **额外个人信息** | 社保号码、护照、国际银行账号、生日、MAC 地址、设备序列号 | 默认勾选,可逐项关闭 |
+| **运维信息** | 用户目录、登录名和主机名、公网 IP、存储桶 | 默认不勾选,按需开启 |
+
+运维信息默认关闭,因为这些值常常正是要排查的对象(例如公网 IP 和存储桶名称)。打开后,它们同样只以占位符出现在会话里。
+
+## 自定义词
+
+**自定义词** 用来补充自动识别没有覆盖的值,按行填写,每行一个:
+
+- **数据词**:例如某台主机名、某个客户的域名。替换后界面还原为原文,模型始终看到占位符。
+- **新秘密词**:例如临时密码、刚刚轮换的令牌。保存后不再显示。
+- **忽略大小写**:匹配时不区分大小写。
+- **仅匹配完整词**:只替换完整单词,避免把 `db` 替换进 `db-proxy` 这类更长的标识中。
+
+## 自定义格式
+
+企业有自己的密钥格式(内部签发的前缀、固定结构的令牌)时,用 **自定义格式** 加一条规则:
+
+| 字段 | 说明 |
+| --- | --- |
+| **规则类别** | 该规则命中内容显示的类别名,例如 `INTERNAL_TOKEN` |
+| **前缀** | 按前缀识别,例如 `acme_` |
+| **正则表达式** | 按 RE2 正则识别,例如 `acme_[A-Za-z0-9]{32}` |
+
+前缀和正则二选一,填一个即可。规则在保存前可用预览验证。
+
+## 私有识别模型
+
+自由文本里的姓名和地址没有固定格式,**私有识别模型** 用来识别这类内容:
+
+- 只在 Flashduty 自己的服务中处理,不发送给模型厂商。
+- **最低置信度** 控制判定门槛,低于阈值的命中不脱敏,避免误伤正常文本。
+- 平台未配置私有识别模型时,此处显示为不可用,其余规则照常生效。
+
+## 预览与生效
+
+**预览** 用于保存前验证规则:输入一段示例文本,点击 **查看预览**,下方显示替换后的内容和命中的项数;预览只显示替换结果,不显示原始值。
+
+**会话摘要** 显示本会话已保存的脱敏项总数,并按类别和来源(内置规则、自定义词、自定义规则、识别模型等)分列条数。修改设置后点击 **保存设置**,写入后立即对该会话生效。
+
+## 限制
+
+| 项目 | 上限(默认) |
+| --- | --- |
+| 每个会话的脱敏项 | 1,000 条 |
+| 单个词的长度 | 16 KB |
+| 单次预览或发送的文本 | 256 KB |
+
+达到上限后新增的词不会保存,先清理不再需要的自定义词。
+
+## 常见问题
+
+
+
+ 能。占位符保留了类别(例如 `[MASK_TOKEN_…]`)和出现位置,模型仍能看出「这里是一个令牌」以及它出现在哪条日志、哪个服务,只是不知道具体值。需要在界面里看到原文时,把该值填为 **数据词** 而不是秘密词。
+
+
+ 分叉或接续出一个新会话时,平台会在校验源会话的访问权限后,把源会话的脱敏词表带到新会话,避免同一条线索在两场会话里出现两种脱敏结果。
+
+
+ 不会改动已保存的内容。历史消息在下次发送给模型时同样做替换,原始记录保持原样。
+
+
+
+## 延伸阅读
+
+
+
+ 查看会话记录与执行过程
+
+
+ 了解会话会带上哪些上下文
+
+
diff --git a/zh/on-call/configuration/personal-settings.mdx b/zh/on-call/configuration/personal-settings.mdx
index 83935eb2..8200b9e1 100644
--- a/zh/on-call/configuration/personal-settings.mdx
+++ b/zh/on-call/configuration/personal-settings.mdx
@@ -17,7 +17,7 @@ keywords: ["个人设置", "联系方式", "通知偏好", "API密钥", "账户
## 个人信息
-页面顶部为**账号名片**,下方为**登录与安全**与**显示偏好**设置。
+页面顶部为**账号名片**,下方为**登录与安全**、**显示偏好**与 **AI SRE 署名**设置。
### 账号名片
@@ -58,6 +58,21 @@ SSO 同步成员的资料由身份提供方维护,页面上的编辑入口不
组织时区由有修改权限的账号(主体账号或 Account.Admin 角色,见 [权限设计](/zh/platform/permission-design))在 [组织信息](/zh/platform/organization-info) 页统一维护;修改组织时区会影响所有「跟随组织」的成员的时间显示。
+### AI SRE 署名
+
+AI SRE 用您的身份执行动作时(例如自动化规则把排查结论写回故障、以您的名义发送邮件),署名由这里决定。两项设置分别作用于故障时间线和邮件:
+
+| 设置 | 选项 | 作用 |
+| --- | --- | --- |
+| **故障时间线署名** | **本人与 AI SRE**(默认)、**仅本人**、**仅 AI SRE** | AI SRE 使用您的身份更新故障时间线新记录时的署名 |
+| **邮件发件人署名** | **本人(经由 Flashduty AI SRE)**(默认)、**仅本人**、**仅 AI SRE** | AI SRE 使用您的身份发邮件时,收件人看到的发件人名称 |
+
+署名在动作产生时读取一次并随该条记录保存,之后修改设置不会改动已经产生的记录。故障时间线上的联合署名效果见 [行动项与跟进项](/zh/on-call/incident/work-items)。
+
+
+只部署 RUM、状态页等非 On-call 模块时,这一组设置不显示。
+
+
## 通知偏好
通知偏好页面按**通知场景**分别配置通知渠道,包含 **故障分派**、**协作与跟进**、**值班轮换** 和 **内部状态页** 四个场景。
diff --git a/zh/rum/analytics/native.mdx b/zh/rum/analytics/native.mdx
index b05d4aa4..8a6be838 100644
--- a/zh/rum/analytics/native.mdx
+++ b/zh/rum/analytics/native.mdx
@@ -45,10 +45,12 @@ Native 看板适用于 Android、iOS、HarmonyOS、Flutter 和 React Native 应
### 核心性能指标
-顶部展示五个性能指标的 P75 分位值:
+顶部展示各性能指标的 P75 分位值,按平台展示可用的卡片:
- **应用启动时间(P75)**:监控应用启动耗时的 P75 分位数,评估启动性能表现。启动时间直接影响用户的第一印象和使用意愿。
- **帧率(P75)**:展示应用运行时帧率的 P75 分位数,衡量画面流畅度。目标为 60fps,数值越高表示交互越流畅。SDK 会把高刷新率屏幕(如 ProMotion、120Hz Android 设备)的逐帧采样值归一化到 60fps 基准并封顶 60,因此该指标反映的是相对流畅度,而不是屏幕的物理刷新率。
+- **CPU 占用(P75)**:App 进程在当前页面前台期间的 CPU 占用,按核数归一化后可跨机型比较。100% 表示所有核全程被本 App 占用,数值偏高说明计算密集或存在忙等。该指标只有 iOS 应用展示,需要 iOS SDK **0.9.0** 及以上,否则卡片显示暂无数据。
+- **主线程 CPU(P75)**:主线程在当前页面前台期间的 CPU 占用,100% 表示主线程全程在 CPU 上运行。数值偏高说明主线程负担重、掉帧风险增加,建议结合帧率和 App Hang 一起判断;锁或同步 I/O 阻塞造成的卡顿不会体现为该指标升高。与 CPU 占用一样仅 iOS 应用展示。
- **CPU 消耗(P75)**:追踪 CPU 占用率的 P75 分位数,识别计算密集型操作。过高的 CPU 消耗会导致设备发热和耗电增加。
- **内存使用(P75)**:监控应用内存占用的 P75 分位数,及时发现内存泄漏或异常增长。
- **JS 线程帧率(P75)**:监控 React Native JS 线程帧率的 P75 分位数(FPS)。相比原生帧率,它更直接反映业务 JavaScript 造成的卡顿(重渲染、桥上的同步工作)。仅 React Native SDK 上报。
@@ -67,6 +69,7 @@ Native 看板适用于 Android、iOS、HarmonyOS、Flutter 和 React Native 应
- **帧率**:追踪各视图运行时的帧率表现,识别渲染性能问题。
- **JS 线程帧率**:追踪 React Native 各视图 JS 线程的帧率表现(FPS),识别业务 JavaScript 卡顿;仅 React Native SDK 上报,其他平台的视图该列无数据。
- **CPU 消耗**:统计各视图的 CPU 占用情况,优化计算密集型页面。
+- **CPU 占用 / 主线程 CPU**:iOS 应用额外展示这两列的 P75 分位值,口径与上方卡片一致,仅 iOS SDK 0.9.0 及以上上报。
- **内存使用**:监控各视图的内存占用,发现内存泄漏风险。
### 流畅度分析