freeq / Freeq.WinUI
CLAUDE.md90 starsChanged 46 days agoMITView on GitHub
No test project exists in this repository. When the user's request matches an available skill, ALWAYS invoke it using the Skill tool as your FIRST action. Do NOT answer directly, do NOT use other tools first. The skill has specialized workflows that produce better results than ad-hoc answers. Key routing rules: - Product ideas, "is this worth building", brainstorming → invoke office-hours - Bugs, errors, "why is this broken", 500 errors → invoke investigate - Ship, deploy, push, create PR…
In this repository7 other files it gives its agents.
- agent-docs/agents.mdAGENTS.md
- docs/agents.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- llms.txtllms.txt
- freeq-apiSkill
- freeq-botsSkill
- freeqSkill
The file
We split this CLAUDE.md into the rules it gives an agent
3 rules. About 0 are common, 3 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 18
No test project exists in this repository.
- Distinctive: line 22
When the user's request matches an available skill, ALWAYS invoke it using the Skill tool as your FIRST action.
- Distinctive: line 32
Update docs after shipping → invoke document-release
≈ “Common” is an estimate: at least 1 in 5 of the 26,980 CLAUDE.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Build & Run
# Build the main app (unpackaged, for development)
dotnet build Freeq.WinUI/Freeq.WinUI.csproj
# Run directly (unpackaged mode — WindowsPackageType=None)
dotnet run --project Freeq.WinUI/Freeq.WinUI.csproj
# Build MSIX package (requires MSBuild / Visual Studio)
msbuild "Freeq.WinUI (Package)/Freeq.WinUI (Package).wapproj" /p:Configuration=Release /p:Platform=x64No test project exists in this repository.
Skill routing
When the user's request matches an available skill, ALWAYS invoke it using the Skill tool as your FIRST action. Do NOT answer directly, do NOT use other tools first. The skill has specialized workflows that produce better results than ad-hoc answers.
Key routing rules:
- Product ideas, "is this worth building", brainstorming → invoke office-hours
- Bugs, errors, "why is this broken", 500 errors → invoke investigate
- Ship, deploy, push, create PR → invoke ship
- QA, test the site, find bugs → invoke qa
- Code review, check my diff → invoke review
- Update docs after shipping → invoke document-release
- Weekly retro → invoke retro
- Design system, brand → invoke design-consultation
- Visual audit, design polish → invoke design-review
- Architecture review → invoke plan-eng-review
- Save progress, checkpoint, resume → invoke checkpoint
- Code quality, health check → invoke health
Architecture
This is a WinUI 3 desktop IRC client for the Freeq platform. It targets .NET 8 with net8.0-windows10.0.19041.0 and uses CommunityToolkit.Mvvm source generators ([ObservableProperty], [RelayCommand]).
Data flow
MainWindow (XAML)
└── MainViewModel ← single ViewModel; owns all state
└── IrcClient ← WebSocket IRC connection (background threads → events)MainWindow wires up all Controls by calling Control.Bind(_vm), subscribes to UI events from Controls, and delegates to _vm commands. All IrcClient events fire on background threads; MainViewModel always marshals them back to UI via _dispatcher.TryEnqueue().
Key files
| File | Purpose |
Services/IrcClient.cs | WebSocket IRC client. Parses IRCv3 messages, manages CAP negotiation, SASL ATPROTO-CHALLENGE, and a ConcurrentQueue send loop. |
Services/OAuthCallbackServer.cs | AT Protocol OAuth via the freeq auth broker (auth.freeq.at). Starts a local HttpListener, opens the browser, waits for the OAuth callback, decodes the base64url payload. |
ViewModels/MainViewModel.cs | All application state. Per-channel message and member dictionaries (_messagesByChannel, _membersByChannel) are keyed case-insensitively. Pending joins before 001 are queued in _pendingJoinChannels. |
Controls/ConnectDialog.xaml.cs | Two-mode connect UI: AT Protocol (OAuth flow) and guest (nick only). Emits ConnectRequest via event. |
Models
ChannelModel— name, kind (Channel/DirectMessage), topic, unread/mention countsMemberModel— nick, DID (populated viaextended-join/ACCOUNT/WHO), role (@/%/+),IsVerified= DID presentMessageModel— id, nick, content, timestamp
SASL / Auth flow
ConnectDialogcallsOAuthCallbackServer.StartLogin(handle)→ opens browser toauth.freeq.at- Callback returns
OAuthResultwithdid,pds_url,web_token MainWindow.OnConnectRequestedcalls_vm.SetSaslCredentials(token, did, pdsUrl, "web-token")IrcClient.HandleCaprequestssaslcap when token is present- On
AUTHENTICATEchallenge from server,HandleAuthenticateencodes a JSON payload{did, method, signature, pds_url}as base64url and sends it back (chunked at 400 bytes if needed) 903→CAP END→001→ state transitions toAuthenticated
IRCv3 capabilities negotiated
message-tags, server-time, batch, multi-prefix, echo-message, account-notify, extended-join, away-notify, draft/chathistory — plus sasl when a token is available.
Debug logging
OAuthLog.Write(...) appends to %LOCALAPPDATA%\Freeq\oauth-debug.log and Debug.WriteLine. Covers all connection, SASL, and OAuth state transitions.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

