Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add rules/takt365/takt.wpf/mvvmgit clone --depth 1 https://github.com/Takt365/Takt.WpfWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/rules/takt365/takt.wpf/mvvm)<a href="https://agentmods.dev/rules/takt365/takt.wpf/mvvm"><img src="https://agentmods.dev/badge/rules/takt365/takt.wpf/mvvm.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00665 | $0.00665 |
| Opus 5 | $0.00332 | $0.00332 |
| Sonnet 5 | $0.00133 | $0.00133 |
| Haiku 4.5 | $0.00067 | $0.00067 |
Grade A, and why
mvvm scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 101 lines — stays where its author put it; the contents beside it link to each section on GitHub.
MVVM 模式规范
View(视图层)
职责:仅负责 UI 展示和用户交互,不包含业务逻辑
文件位置:@src/Takt.Fluent/Views/
示例:
<!-- ✅ 正确:View 只负责 UI -->
<!-- @src/Takt.Fluent/Views/Identity/UserView.xaml -->
<UserControl x:Class="Takt.Fluent.Views.Identity.UserView">
<DataGrid ItemsSource="{Binding Users}"
SelectedItem="{Binding SelectedUser, Mode=TwoWay}"/>
</UserControl>
// ❌ 错误:View 中包含业务逻辑
// @src/Takt.Fluent/Views/Identity/UserView.xaml.cs
private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// ❌ 不要在 View 中直接调用服务
var service = App.Services.GetService<IUserService>();
service.GetUsersAsync();
}
ViewModel(视图模型层)
职责:管理 View 的状态和数据,处理用户交互命令
文件位置:@src/Takt.Fluent/ViewModels/
示例:
// ✅ 正确:ViewModel 继承 ViewModelBase
// @src/Takt.Fluent/ViewModels/Identity/UserViewModel.cs
public class UserViewModel : ViewModelBase
{
private readonly IHbtUserService _userService;
private ObservableCollection<UserDto> _users = new();
public ObservableCollection<UserDto> Users
{
get => _users;
set => SetProperty(ref _users, value);
}
public ICommand LoadUsersCommand { get; }
public UserViewModel(IHbtUserService userService)
{
_userService = userService;
LoadUsersCommand = new RelayCommand(async () => await LoadUsersAsync());
}
private async Task LoadUsersAsync()
{
var result = await _userService.GetListAsync();
if (result.Success)
{
Users = new ObservableCollection<UserDto>(result.Data);
}
}
}
关键要求:
- ✅ 必须通过构造函数注入依赖服务
- ✅ 使用
SetProperty方法更新属性以触发通知 - ✅ 所有异步操作使用
async/await - ✅ 命令使用
ICommand接口
Model(模型层)
职责:定义数据模型(Entity、DTO)
文件位置:
- Entity:@src/Takt.Domain/Entities/
- DTO:@src/Takt.Application/Dtos/
示例:
// ✅ 正确:Entity 定义
// @src/Takt.Domain/Entities/Identity/User.cs
public class User : EntityBase
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
[SugarColumn(Length = 50)]
public string UserName { get; set; } = string.Empty;
}
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 4d ago First seen · 101 lines · 665 tokens per session scan A 3d3c67fd9123
mvvm is a cursor rule published in the GitHub repository Takt365/Takt.Wpf (17 stars, last pushed 8mo ago), licensed MIT. It adds 665 tokens to every session, about $0.0033 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other cursor rules, from other repositories
project-status
PriceGrab shipped state and product backlog (read first).
schemas
Sanity schema conventions and typegen workflow.
web
Next.js web app conventions — routing, i18n, components.
i1n
This project uses i1n for managing translations.
cursorrules
Cursor rule "cursorrules" from KyaniteLabs/DialectOS, covering kyanitelabs — ai agent instructions, organization, code quality, security and testing.
specify-rules
For additional context about the active feature, technologies, project structure, shell commands, and other important information.