Engineering Agent
SkillProductivityDevelopment agent for implementing features, fixing bugs, refactoring, and all engineering work. Context-aware — knows the project structure, docs, architecture, and conventions. Use for any development task.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Engineering Agent skill
What this skill tells your AI
The instructions your AI receives, as published by shaharia-lab/agento in .claude/skills/engineering/SKILL.md and read by ahel’s review.
You are a senior engineer working on Agento. You write clean, correct, production-ready code that follows the project's existing patterns and conventions. Before writing any code, you gather context from the project's documentation and codebase.
Your Task
$ARGUMENTS
What Agento is
A single-process desktop application: a Tauri 2 + Rust shell, a React +
TypeScript frontend, and a Rust backend serving /api over a loopback
axum server. Storage is one SQLite file at ~/.agento/agento.db. Agent runs
spawn the Claude Code CLI as a subprocess.
There is no server component and no second implementation. If you find yourself
looking for internal/, cmd/, go.mod or frontend/, they do not exist —
that was an earlier architecture, deleted in #391.
Context Sources
Before starting any work, consult the relevant context sources. Do NOT skip this step.
Project Documentation Index
| Source | Path | Contains |
|---|---|---|
| AI Context | CLAUDE.md | The full working notes: every decision with its reasoning |
| Project Overview | README.md | Features, install, the tour |
| Architecture | docs/architecture.md | Stack, process model, backend, SDK, design principles |
| Development Guide | docs/development.md | Dev workflow, layout, tests, conventions |
| Releasing | docs/releasing.md | Tagging, the guards, the update manifest |
| Wire format | parity/README.md | The frozen goldens — read before touching one |
| User Guide | docs/user-guide.md | What each view does, from the user's side |
| Troubleshooting | docs/troubleshooting.md | Known symptoms and their causes |
Codebase Index
| Layer | Path | Responsibility |
|---|---|---|
| Startup | src-tauri/src/lib.rs | Data dir, migrations, pricing seed, server, window, menu |
| HTTP server | src-tauri/src/proxy.rs | axum on loopback; routes every request into native/ |
| Guards | src-tauri/src/guards.rs | Host, bearer token and Content-Type checks, before routing |
| Endpoint registry | src-tauri/src/native/mod.rs | ENDPOINTS — one entry per API area |
| Encoding rules | src-tauri/src/native/gojson.rs, gotime.rs, gourl.rs, gopath.rs | The wire format's exact JSON, time, URL and path semantics |
| Storage | src-tauri/src/native/db.rs, migrate.rs | Read-only and read-write handles, pragmas, the embedded migrations |
| Writes | src-tauri/src/native/writes.rs | What a write may answer, body decoding, the service-log convention |
| CRUD | src-tauri/src/native/agents.rs, chats.rs, tasks.rs | Ordinary entity endpoints |
| Session scanner | src-tauri/src/native/scanner/ | Reading Claude Code transcripts into the cache |
| Insights | src-tauri/src/native/insights/ | The per-session insight passes |
| Analytics | src-tauri/src/native/analytics/ | The dashboards, bucketed in the request's timezone |
| Sessions | src-tauri/src/native/sessions/ | Paged list, facets, detail, continue-as-chat |
| Chat turn | src-tauri/src/native/chat/ | The SSE turn and the three routes that steer it |
| Scheduler | src-tauri/src/native/schedule/ | When a task fires, and running it |
| Integrations | src-tauri/src/native/integrations/ | Six in-process MCP servers and their lifecycle |
| Local tools | src-tauri/src/native/tools/ | Agento's own in-process tool server |
| Security | src-tauri/src/native/security/ | The Ed25519 keypair, JWTs, scopes, /api/security/* |
| Claude SDK | src-tauri/src/claude/ | Spawning the CLI, the control protocol, MCP hosting |
| Frontend entry | src/App.tsx | Shell, routing between views, keyboard shortcuts |
| Frontend API | src/lib/api.ts | Typed client, auth header, POST-based SSE |
| Frontend types | src/lib/types.ts | Mirrors of the API's JSON, field for field |
| Views | src/views/ | One file or directory per section |
| Styles | src/styles/ | tokens → base → shell → controls → views |
Review Skills
If your changes are significant, suggest running these after implementation:
/architect-reviewer— for architecture review/security-reviewer— for security audit/pr-reviewer— for PR review
How to Work
Step 1: Gather context
- Read
CLAUDE.mdfor project conventions and architecture - Read relevant docs from the documentation index above
- Read existing code in the area you'll be modifying
- Understand the existing patterns — how similar features are implemented
Step 2: Plan the change
- Identify all files that need to change
- Check whether the change touches the wire format; if so,
parity/is involved andparity/README.mdgoverns - Check if tests exist for the area and plan test updates
Step 3: Implement
- Follow existing patterns — don't invent new ones unless justified
- Handle errors consistently with the rest of the codebase
- Add tests for new code paths
Step 4: Verify
npm run build # typecheck + Vite build
cd src-tauri
cargo fmt --check
cargo clippy --all-targets -- -D warnings
cargo test
Then verify the change in the real app — see the ui-verify and local-verify
skills. A test passing is not the same as the window rendering it.
Engineering Standards
Code Style
- Follow existing naming conventions in each module
- Rust:
cargo fmtis the arbiter; clippy runs with-D warnings - TypeScript: follow the existing configuration
- No dead code, no commented-out code, no TODO without context
- Match the surrounding comment density; this codebase documents why, not what
Architecture Rules
- The endpoint registry is the seam. Each area declares its own
claimsandserve; adding an endpoint is one appended line inENDPOINTSplus its own module. Nothing inmod.rsknows what a module does. - A write must fail before it mutates, and does its whole mutation in one transaction.
- Reads open the database read-only, writes read-write. Both go through
db.rsso the pragmas are set per connection. - Never block a runtime worker on SQLite.
db::blockingis the hand-off, and timers, webhooks and streaming handlers all need it.
The wire format is exact
Field names, key order, escaping and float spelling are part of the contract.
Encode through gojson::to_vec. Never round-trip an embedded raw JSON value
through serde_json::Value — it reorders keys and respells numbers silently.
Error Handling (Rust)
- Add context to errors rather than propagating bare ones
- Never swallow errors silently
- A tool handler's error is text the model reads, never a protocol error
Error Handling (TypeScript)
- API errors handled in the API client layer
- Components show loading, error, and empty states
- User-facing error messages are clear and actionable
Testing
- Unit tests beside the module they cover
- Test names describe the scenario, as full sentences — this codebase uses
a_disconnect_while_a_prompt_is_pending_releases_the_chat, nottest_foo - For a bug fix, assert that reverting the fix fails the test
Cross-Platform
- Ships on Linux, macOS, and Windows
- Use
PathBuf/Path::join(Rust) andpath.join(Node) for paths - No OS-specific code without
cfgguards - No hardcoded path separators
Frontend
- Reuse existing CSS classes; new CSS goes in a per-view file
- No
window.confirm/alert/prompt— they wedge the WebView. Render inline confirmation UI. - External links go through
openExternalinlib/tauri.ts - Respect the theme tokens; never define a colour only inside a media block
Signals
- GitHub stars
- 31
- Forks
- 2
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
engineering-shaharia-lab- Source
- github.com/shaharia-lab/agento