What Strap is
Strap is your personal context profile. One file that captures who you are: values, goals, work, preferences, constraints, people, health, routines. Any AI you talk to knows you instantly instead of starting from zero every conversation.
It is not a journal, scratchpad, or chat log. The value comes from keeping the profile concise, current, and specific enough that every section actually changes how AI replies to you.
It works the same whether you write code all day or never touch a terminal. The structure is identical for everyone; only the examples shift to match how you work.
How Strap works
Strap runs on a simple loop: you write yourself down once, connected agents read that file before they answer you, and they propose small updates as they learn. You approve the good ones and the profile sharpens over time.
Onboarding turns a few answers into a first draft. You shape it into a profile you would be happy to read out loud.
Every connected agent reads your Strap before it answers, so it starts knowing your role, goals, and preferences instead of guessing.
As an agent learns something durable about you, it proposes a small, focused update to the right section.
You accept the good proposals and skip the rest. The profile sharpens over time without you maintaining it by hand.
You stay in control of every change. Trusted agents can be granted direct-edit access per section; everything else stays a proposal you approve.
What Strap ships today
Strap ships a compact Context profile, MCP connections, scoped headless API keys, the Strap CLI, GitHub synchronization, and a per-profile Vault for external API keys.
Shared Skills are available in Personal and Company profiles. Import a SKILL.md folder, publish versions, and sync it between devices with strap skills sync. Named Environments and per-agent manifests remain on the roadmap.
- Context: a Personal or Company Strap in portable Markdown, with per-section permissions.
- Agents: browser OAuth, RFC 8628 device authorization, or scoped headless API keys over MCP.
- Keys: scoped, one-time-visible agent access keys plus a Vault for external service credentials.
- CLI: live discovery of Strap MCP tools, resources, prompts, and schemas.
- Skills: a profile library with scripts and assets, version restore, CLI sync, and MCP discovery. Company members can read; owners and admins publish.
- Roadmap: named Environments and per-agent resource manifests.
What goes in a Strap
A Strap has ten sections: five always-on core sections everyone fills in, and five optional ones that appear only once you use them. The whole thing is plain Markdown, sized to read end to end in under a minute.
Aim for specific over complete. A short profile that changes how AI replies beats a long one that reads like a resume.
Role, defining traits, values, and the defaults that follow you everywhere.
Live priorities, near-term outcomes and longer-horizon aims.
What you do, the tools you reach for, and how you like to work.
Reply-style defaults with concrete do and avoid signals.
Daily, weekly, and seasonal rhythms AI should respect.
Stable values and worldview that change how AI reasons or recommends.
Hard noes, sensitive topics, and actions that need explicit permission.
Named relationships AI should remember and treat consistently.
Conditions, accessibility needs, and dietary patterns to accommodate.
Durable catch-all: location, life stage, environment, background facts.
## Identity
Product designer turned solo founder. I value clarity over cleverness
and ship small, polished things. Default to plain language; I dislike jargon.
## Goals
- Launch the v1 private beta by the end of Q3.
- Reach 1,000 weekly active users before raising.
## Preferences
- Lead with the answer, then the reasoning. Skip "great question" preambles.
- Push back when I'm wrong instead of agreeing politely.
## Routines
- Deep-work mornings, 8 to 12, no calls. Schedule meetings after lunch.
- Sleep 11pm to 7am. Don't suggest tasks past 10pm.Company Strap
The Company plan adds one shared Company Strap on top of your personal one. It is the same structured file, owned by the team instead of a person, so every member's agents read the same company context before they act: how the team works, what it is building, the conventions and constraints that apply to everyone.
Members switch between their personal Strap and any Company Strap they belong to from the workspace dropdown. Roles decide what each person and their agents can do. Owners manage members and company settings, admins manage members and content, and members read and propose. Section permissions can loosen or tighten who edits what, and every change is attributed and visible in the team activity view.
A Company Strap is free. Invite as many members as you need and connect your existing agents to propose improvements.
- Create one from the pricing page. You do not need a personal Strap first, only a Strap account.
- Invite members by email. They join, connect their own agents over MCP, and read the shared Company Strap.
- Roles: Owner (company settings, members, content), Admin (members, content), Member (read and propose).
- Section permissions control who can edit each section directly versus by proposal.
- The activity view shows reads, proposals, and edits across every member and agent.
Connecting over MCP
Strap MCP uses OAuth, so there is nothing to copy. You add the Strap server URL to your agent as a custom MCP connector; the agent opens a browser, you click Allow on the Strap consent screen while signed in to strap.bvdm.ai, and it stays connected. The exact URL is on your Connections page (https://strap.bvdm.ai/mcp on the hosted app).
After connecting, the agent reads Strap once to confirm access, then reads it before meaningful work and proposes narrow updates as it learns. You should not need a second setup prompt.
- Connect from the Connections page: copy the server URL, or use the per-agent command or one-click button.
- The first time the agent calls Strap it runs the OAuth flow and opens a browser. Approve while signed in to strap.bvdm.ai. Tokens refresh automatically after that.
- Verify by listing the MCP tools and calling read_strap once. Do not claim connected unless read_strap succeeds.
- Update sections with the flat strap_* tools. The server applies the edit directly or as a proposal based on each section's permission; get_write_policy reports what's allowed.
- Existing clients using read_creed, creed_*, creed://profile, or /api/creed remain supported as legacy compatibility names.
- If anything is unclear during setup, read https://strap.bvdm.ai/docs once and follow it.
Per-client steps
Every MCP client connects from the same server URL. These are the per-client steps; each one ends with a browser approval.
- Claude Code: run claude mcp add -t http strap https://strap.bvdm.ai/mcp, then /mcp to authorize in the browser.
- Codex: run codex mcp add strap --url https://strap.bvdm.ai/mcp, then codex mcp login strap to authorize.
- Cursor: use the one-click Add MCP button on the Connections page, then authorize in the browser.
- OpenCode: add Strap to opencode.json as a remote server (type remote, the server URL), then run opencode mcp auth strap to authorize.
- ChatGPT and other MCP chatbots: add a custom connector with the server URL and approve in the browser.
- Any other MCP client: add the server URL as a custom or remote MCP server and approve when prompted. Non-MCP clients can fall back to the HTTP read API.
Strap CLI
Strap CLI brings the complete live MCP surface into your terminal. Install it from npm, run strap, approve the same OAuth consent screen used by other agents, and then call any Strap tool directly or use the interactive terminal.
The CLI discovers tools, resources, prompts, descriptions, and input schemas from the live Strap MCP server. New MCP capabilities appear automatically without a second implementation in the CLI.
- Install globally with npm install --global @bvdm/strap, then run strap.
- Run without installing with npx @bvdm/strap.
- Check the connection and live capability counts with strap doctor.
- Use strap status for local credential state; use strap doctor when you need a live server check.
- List exact tool names with strap tools, or call one with strap call read_strap.
- Use the per-agent --agent ID from the Connections page for attributed CLI status and last-seen times.
- Use --json for scripts and coding agents. Diagnostics stay on stderr and structured output stays on stdout.
- Run strap logout to revoke the OAuth grant and remove local credentials.
Troubleshooting the connection
Almost every connection issue is the OAuth step. These cover the common ones.
- No browser popup: re-run the agent's connect or auth action (/mcp in Claude Code, codex mcp login strap, opencode mcp auth strap). It opens your default browser.
- Stuck on sign-in: authorize while signed in to strap.bvdm.ai in that browser. Signed out, the consent screen signs you in first, then returns to Allow.
- 401 or 'unauthorized' from the MCP endpoint: the client isn't authorized yet or the token expired. Reconnect or re-run the auth step to get a fresh token.
- An old connection stopped working: Strap moved from static tokens to OAuth. Remove the old server entry, re-add it by URL, and authorize again.
- Registration fails on connect: make sure the client supports OAuth-based remote MCP (Claude, Cursor, Codex, OpenCode, ChatGPT connectors all do).
- You must have an active, set-up Strap to authorize. Finish onboarding first if the consent screen asks you to.
Two key systems, two jobs
Strap has two key features, and they solve different problems. Agent access keys let a headless MCP client authenticate to one Strap. Vault items hold credentials for external services. They are deliberately separate.
Adding a provider credential to Vault does not connect an agent. Creating an agent access key does not expose Vault values. Choose the surface by what you are trying to authorize.
- Prefer browser OAuth when a client supports it. Use an agent access key when a headless client cannot complete interactive authorization.
- Use Vault for credentials such as provider API keys that you need to store, rotate, copy, or explicitly reveal.
Agent access key
A one-time-visible bearer credential with one Strap, one user, one mode ceiling, and an optional expiry.
Read the access guide →Protect an external credentialVault item
A server-side secret with visible metadata, controlled reveal, rotation, and permanent deletion.
Read the Vault guide →Connect a headless agent
Create a scoped agent access key from Connections when an MCP client can send a bearer token but cannot complete browser OAuth. Give it a clear name, choose an access mode, and choose a 30, 90, or 365 day expiry, or no expiry.
The full token starts with strap_key_ and is shown only once. Copy it before closing the confirmation. Strap stores a SHA-256 hash for verification and a short prefix for identification, never a recoverable copy of the token.
- Send the key as a bearer token to the hosted MCP endpoint at https://strap.bvdm.ai/mcp.
- Each key belongs to one Strap and one creating user. Current membership, the key's mode, and live section permissions are checked on every request.
- Connections shows the name, prefix, mode, creation date, expiry, and last use, but never the full token.
- Revoke a key from Connections to disconnect clients using it immediately. Expired keys stop working automatically.
Read only
read-onlyReads the sections visible to the creating user. It cannot propose or apply changes.
Read and propose
Defaultproposal-onlyReads visible sections and submits focused proposals. It cannot make direct edits.
Permitted direct edits
directAllows direct edits only where the live section policy also permits them. Section rules remain the final gate.
Authorization: Bearer strap_key_...Configure that header for the Strap MCP endpoint in your compatible headless client. Create and revoke credentials from Connections.
Keep external credentials in Vault
Vault stores credentials for external services alongside one Personal or Company Strap. The list keeps only useful metadata such as name, description, and timestamps. The secret value remains behind an explicit signed-in operation.
Vault values are not included in ordinary Strap reads, MCP responses, list responses, logs, or audit metadata. A value crosses browser and server memory only while you create it, replace it, or explicitly reveal it.
- Add a secret with a name, optional description, and value. Names can be up to 120 characters, descriptions up to 500, and values up to 16,384.
- Reveal is a deliberate, audited action. If Strap cannot record the audit event, it does not return the plaintext. The interface hides a revealed value again after 30 seconds.
- Edit an item to change its name or description. Enter a new value to rotate the secret, or leave it empty to keep the current value.
- Delete removes the stored secret and its metadata permanently.
- A Personal Strap member can manage its Vault. For a Company Strap, only owners and admins can list, create, reveal, rotate, or delete secrets.
Store
Add a name, optional description, and secret value. List views return metadata, not plaintext.
Reveal
Reveal only when needed. Strap records the action first, then hides the value again after 30 seconds.
Rotate
Edit the item and enter a replacement value. Leave the value empty to keep the existing secret.
Delete
Permanently remove both the encrypted secret and the metadata that points to it.
Personal Strap
The signed-in member can manage the Vault for that Personal Strap.
Company Strap
Owners and admins can manage Vault secrets. Members cannot list or reveal them.
Manage stored credentials from Vault. Treat reveal and copy as short-lived actions, and rotate a value whenever its exposure is uncertain.
Chatbots
Connect Strap to the assistants you chat with. Each one reads your profile before it answers and can propose updates you approve.
Add Strap as a connector in Claude. It reads your profile before replying and proposes refinements as it learns about you.
Add Strap as a connector. ChatGPT picks up your context at the start of a chat and can suggest updates you approve in Strap.
Connect Strap in Grok so it starts every chat with your context and suggests refinements as it learns.
Connect Strap in Whirl so it answers with your context from the first message and proposes updates over time.
Assistant agents
Long-running assistants can keep your profile current on their own. Point them at Strap and let them review it on a cadence you trust.
Set up a recurring background task that re-reads your profile, compares it against recent conversations, and proposes only durable refinements.
Keep Strap in a stable bootstrap path and use scheduled scripts to revisit durable context on a cadence you trust.
Coding agents
Coding agents read Strap before they plan or write, so they match your stack, your conventions, and how you like to work.
Connect with one claude mcp add command, then /mcp to authorize. Pair it with a recurring reminder to revisit the profile after meaningful work.
Add Strap with codex mcp add, then codex mcp login. Schedule a periodic review that proposes tightening when goals or preferences shift.
Add Strap as a remote server in opencode.json, then opencode mcp auth strap. Reference it from your bootstrap instructions to keep it current.
Use the one-click Add MCP button on Connections, then authorize. Strap shapes Cursor's answers around how you actually work.
Custom agents
Anything that speaks MCP connects from the server URL over OAuth. Clients that can't speak MCP use the HTTP API instead.
Build recurring profile review into your own workflow with cron, queues, or whatever your stack already uses.
How AI should use Strap
Connected agents read Strap before answering you, let it shape how they reply, and propose narrow updates as they learn new things about you. You approve the good ones and the profile sharpens over time.
- Read the visible profile before answering, planning, recommending, or scheduling anything.
- Anchor tone, defaults, and assumptions to what the profile already says about you.
- Respect constraints and routines without being asked to repeat them.
- When something new is learned about the user, propose a small focused update to the right section.
- Keep the profile concise. Propose tightening or pruning when a section is stale or bloated.
- Never use Strap as a session log, mood tracker, or place for things only true today.
Set this up from Connections, then review proposed updates from the file view.
When to propose
Propose an update when you learn something durable about the user, something that would change how a future AI should reply to them, not just a one-time mood or task. The test is: would this make every next AI conversation better?
Most bad proposals are not wrong, they are noisy. If something does not change how a future AI should treat the user, it should not be in the profile.
- Propose new identity facts, values, or defaults that should follow the user across every AI.
- Propose preference changes when the user clearly signals a new style they want by default.
- Propose Goals updates when a near-term outcome shifts or completes. Keep them concrete and current.
- Propose Routines, People, or Health updates when AI should account for them in future replies.
- Propose tightening or removing a section when it has gone stale, vague, or contradicted itself.
- Do not propose session summaries, mood updates, or diary-style entries.
- Do not propose generic personality praise (curious, driven, thoughtful) without a concrete anchor.
- Do not propose one-off task instructions or things only true for the next hour.
- Do not ask the user what to add. Either propose something durable or do nothing.
How each section works
Each section captures a different kind of context about the user. Good agents aim updates at the section that best matches what they learned instead of dumping everything into one bucket.
Identity
- Concrete role, defining traits, values, and defaults that make the user distinct.
- Anchors AI should hang every reply on: voice, taste, what they care about.
- Bio-style life history.
- Generic personality words without a real example behind them.
Beliefs
- Stable values or worldview that should change how AI reasons or recommends.
- Convictions that explain why the user prefers certain trade-offs.
- Platitudes or motivational quotes.
- Things the user has not actually committed to.
Goals
- Live priorities: near-term outcomes and longer-horizon aims.
- Concrete targets with stale-by hints when timing matters.
- Vague intentions like 'grow' or 'be better'.
- Goals that shipped or were abandoned without being updated.
Work
- What the user does, the tools and stack they use, and how they like to work.
- Real surfaces, methods, collaborators, and craft details AI should know.
- Exhaustive resume-style history.
- One-off project notes that belong in Goals or Context.
Preferences
- Specific reply-style defaults: length, tone, formatting, follow-up behavior.
- Concrete do/avoid rules AI should apply by default.
- Generic 'be helpful' or 'be honest' filler.
- Momentary tone requests from one chat.
Constraints
- Hard noes, sensitive topics, and actions that need explicit permission.
- Lines AI should not cross even if the user seems to ask in the moment.
- Temporary dislikes.
- Vague fears that do not give AI a concrete rule.
People
- Named relationships: who they are, why they matter, what AI should remember.
- Family, partners, collaborators, and pets that come up in conversation.
- Casual mentions of strangers.
- Sensitive details the user has not explicitly chosen to share.
Health
- Conditions, sensitivities, dietary patterns, and accessibility needs, paired with how AI should accommodate them.
- Durable physical or mental health context that should shape suggestions.
- One-off symptoms or short-term illnesses.
- Diagnoses without any guidance for how AI should respond.
Routines
- Daily, weekly, and seasonal rhythms AI should respect when planning or scheduling.
- Working hours, sleep windows, deep-work blocks, recurring commitments.
- Today's todo list.
- Routines the user has clearly stopped following.
Context
- Durable catch-all details that don't fit elsewhere: location, life stage, environment.
- Background facts AI should know but that aren't preferences, goals, or constraints.
- Mood updates or session recap.
- Long open-question lists that belong in your own notes.
Good and bad proposal examples
Examples are often more useful than abstract rules. These are the kinds of updates Strap should accept and the kinds it should keep out.
Goals
- Ship Strap v1 to public launch by end of June; current focus is onboarding polish.
- Move to Lisbon in Q4. Researching neighborhoods and visa paths now.
- Be more productive this year.
- Worked on the landing page for three hours today.
Preferences
- Default to concise replies. No preamble, no recap of what I just said.
- Push back when I'm wrong instead of agreeing politely.
- Be helpful and friendly.
- Use a professional tone unless I say otherwise today.
Routines
- Deep-work mornings 8 to 12, no calls. Schedule meetings after lunch.
- Sleep window 11pm–7am, don't suggest tasks past 10pm.
- Tries to be productive every day.
- Started a new gym schedule this week, will see how it goes.
Health
- Lactose intolerant. Suggest dairy-free alternatives in any recipe.
- ADHD. Break long plans into short steps and surface one next action at a time.
- Generally healthy.
- Had a headache this afternoon.
People
- Maya: partner, designer, prefers we make travel decisions together.
- Jonas: co-founder, handles ops, default to him for legal and finance questions.
- Met someone interesting at a conference last week.
- Friend group is great.
Keeping your profile current
When you finish helping the user with something real, ask: did I learn something durable about them? Did anything in the profile look stale or wrong? Only then decide whether to propose an update.
- Ask whether you learned something durable enough to help every future AI conversation.
- Check whether any section now reads as stale, vague, duplicated, or contradicted.
- Prefer one sharp refinement or prune over several loose additions.
- If yes, propose it proactively without asking what to propose.
- If no, do nothing and leave Strap unchanged.
- If you spot a problem in the profile itself, propose the fix and flag it clearly.
On a recurring cadence
The best Strap setups also revisit the file on a cadence. A small recurring review compares the profile with what's actually true now, sharpens what belongs, and prunes what's gone stale.
Recurring maintenance should improve quality, not volume. The goal is to keep the profile concise and current.
- Run a recurring check when an agent has enough autonomy to review the profile without micromanagement.
- Look for goals that shipped, routines that changed, or context that no longer fits.
- Tighten generic phrasing into concrete defaults grounded in real examples.
- Prefer pruning and merging over constant appending.
- If nothing has changed, do nothing.
Per-section permissions
Each section sets its own agent permission, so you can keep part of your profile reference-only and let agents maintain the rest. The mechanics differ per section, but the standard stays the same: only durable, profile-worthy context belongs in the file.
- Propose is the default reviewed path. Agents suggest updates and you decide what enters the section.
- Direct lets a trusted agent edit that section immediately, with the same restraint it would bring to a proposal.
- Read-only keeps a section visible to agents for context but blocks edits and proposals.
- Hidden removes a section from the agent's view entirely, so it never reaches a connected tool.
- Permissions are per-section and enforced on the server. The bar for what belongs does not move.
Ask your connected agent for feedback
Ask a connected agent to review your profile and propose focused improvements. Review each proposal in Strap and approve or decline it. Strap does not run an in-app model.
Useful feedback concerns how context is written, not what it is about. A section on work and a section on LEGO are held to the same bar. The only question is whether it helps the next AI know you better.
Names real things: tools, people, numbers, dates, defaults. Not language anyone could have written.
Claims carry an example, a rule, or a consequence, so AI knows how to act, not just what is true.
It would actually change how AI replies. The most important test.
Nothing stale, abandoned, or self-contradicting.
No padding or repetition. Every line earns its place.
MCP tools, prompts, and resources
Once connected, an agent has a focused set of tools for reading and improving your Strap. The flat strap_ tools are the recommended path: each one applies your change directly when that section allows direct edits, or files it as a proposal when approval is on. You never pick the mode; the server does, and every call reports what happened.
Creed-named tools remain compatibility aliases for existing clients. New integrations should use the Strap names.
Read and inspect
read_strapRead the full profile plus the private agent contract.
list_sectionsList sections with their ids, names, and accents.
strap_get_sectionFetch one section by id or name, with its content and metadata.
strap_searchFind where a fact lives without reading the whole profile.
strap_get_recent_activitySee recent changes so agents avoid duplicate proposals.
strap_get_quality_reportRead a historical quality report if available. New reports are no longer generated.
get_write_policyCheck the current write mode and what edits are allowed.
Edit content
strap_update_sectionReplace a section's body. Params: sectionId, contentMarkdown.
strap_append_to_sectionAdd to a section without rewriting it. Params: sectionId, contentMarkdown.
Manage sections
strap_create_sectionAdd a new section. Params: name, contentMarkdown, optional accent.
strap_delete_sectionRemove a section. Params: sectionId.
strap_rename_sectionRename a section. Params: sectionId, name.
strap_recolor_sectionChange a section's accent. Params: sectionId, accent.
strap_reorder_sectionMove a section. Params: sectionId, then afterSectionId or position.
Two lower-level tools sit underneath these: propose_strap_update submits a proposal in any mode, and direct_edit_strap applies a change immediately where a section allows it (it stays hidden until at least one section is set to direct edit). The flat tools above are built on them and are easier to call correctly.
Prompts and resources
introduce-meRead my Strap and introduce me the way a sharp collaborator would.
tighten-my-strapReview my Strap and propose tightening or pruning where it has drifted.
strap://profileYour current profile, exposed as a readable MCP resource.
When a client connects, the server also sends an instructions field carrying the read-before-work, propose-narrowly contract, so agents behave correctly without you pasting a setup prompt.
HTTP API
MCP is the supported way to connect, and it handles authorization for you. For clients that can't speak MCP, the same capabilities are available over a small HTTP API. Each request sends a bearer token in the Authorization header.
Read the profile. Returns the visible Markdown plus the hidden agent contract as plain text. Up to 120 requests per minute.
Submit a proposal. JSON body with the target section, draft, and reason. Works in every mode. Up to 60 per minute.
Apply a direct edit. JSON body with an operation and its payload. Succeeds only for sections set to direct edit. Up to 60 per minute.
Your data and privacy
Strap is built so your profile stays portable and access remains permission-aware.
- One file, plain Markdown. It stays portable, and you can push or pull it to your own GitHub repo from Settings.
- Your connected agents use your existing agent service. Strap does not send your profile to an LLM provider itself.
- Credentials use purpose-specific protection. Capability and headless keys are verified by hash, provider tokens are encrypted, and Vault values remain server-side behind authorized operations.
- Personal and Company access is enforced through authentication, membership, roles, section permissions, RLS, and explicit checks before service-role operations.
- Hidden sections never leave the app. Set a section to hidden and it is dropped from the agent payload entirely.
- Deletion removes active product data. Qualified audit and security records may remain for the retention periods described in the Privacy Policy.
Read the full privacy policy for the complete picture.