graph TD
A[Should I use an Angular module?] --> B{Is it a component?}
B -->|Yes| X[Don't use an Angular module]
B -->|No| C{Is it a directive?}
C -->|Yes| X
C -->|No| D{Is it a pipe?}
D -->|Yes| X
D -->|No| E{Is it a service?}
E -->|Yes| X
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import { Router } from "express"; | |
| import jwt from "jsonwebtoken"; | |
| import jwkToPem from "jwk-to-pem"; | |
| import * as Axios from 'axios'; | |
| interface PublicKeys { | |
| keys: PublicKey[]; | |
| } | |
| interface PublicKey { | |
| alg: string; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # | |
| # This small example shows you how to access JS-based requests via Selenium | |
| # Like this, one can access raw data for scraping, | |
| # for example on many JS-intensive/React-based websites | |
| # | |
| from time import sleep | |
| from selenium import webdriver | |
| from selenium.webdriver import DesiredCapabilities |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import * as cdk from "@aws-cdk/core"; | |
| import * as wafv2 from "@aws-cdk/aws-wafv2"; | |
| // This extends the base cdk stack properties to include a tag name input. | |
| export interface StackProps extends cdk.StackProps { | |
| tag: string; | |
| applicationName?: string; | |
| } | |
| export class WAFStack extends cdk.Stack { |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| @Get('api/auth/sso/saml/login') | |
| @UseGuards(SamlAuthGuard) | |
| async samlLogin() { | |
| //this route is handled by passport-saml | |
| return; | |
| } |
- Delete unused or obsolete files when your changes make them irrelevant (refactors, feature removals, etc.), and revert files only when the change is yours or explicitly requested. If a git operation leaves you unsure about other agents' in-flight work, stop and coordinate instead of deleting.
- Before attempting to delete a file to resolve a local type/lint failure, stop and ask the user. Other agents are often editing adjacent files; deleting their work to silence an error is never acceptable without explicit approval.
- NEVER edit
.envor any environment variable files—only the user may change them. - Coordinate with other agents before removing their in-progress edits—don't revert or delete work you didn't author unless everyone agrees.
- Moving/renaming and restoring files is allowed.
- ABSOLUTELY NEVER run destructive git operations (e.g.,
git reset --hard,rm,git checkout/git restoreto an older commit) unless the user gives an explicit, written instruction in this conversation. Treat t
See more of my writing here. Also check out Devin
In this post, I'll start from scratch and build up to OpenClaw's architecture step by step, showing how you could have invented it yourself from first principles, using nothing but a messaging API, an LLM, and the desire to make AI actually useful outside the chat window.
End goal: understand how persistent AI assistants work, so you can build your own (or become an OpenClaw power user).
When you use ChatGPT or Claude in a browser, there are several limitations:
OlderNewer