Buying the capability

Security and access for embedded engineers

Letting an outside engineer into your systems is a real risk and it is manageable with four rules: least privilege by default, repository access scoped to the repositories the work touches, production access as a named exception with an audit trail and an end date, and revocation on the handover date rather than whenever somebody remembers. What changes when a model writes the code is that the review gate before production matters more, not less, because generated code is not secure by default.

Key takeaways

  • Scope repository access to named repositories and named individuals, never organization-wide, and review the list on an interval.
  • Production access defaults to none. Where required, make it a named exception with a reason, an audit trail and an end date.
  • Revocation belongs on the handover date as a contract term, verified rather than assumed.
  • Palantir's own agent documentation describes inheriting existing user permissions with context starting minimal, which is the right pattern for humans and agents alike.

The security conversation about embedded engineering usually happens too late, in a rush, with a security team that was not consulted during procurement. Here is the version to have early.

The four rules

Least privilege by default. Grant what the work needs and nothing adjacent. This sounds obvious and the pressure runs the other way, because broad access removes friction and friction is visible while risk is not.

Repository access scoped to named repositories. Not organization-wide. Organization-wide gets used because it is one click and per-repository access is a conversation. Have the conversation: an embedded engagement often involves people you have not met, at a company you are still evaluating.

Grant to named individuals rather than a shared account, so the audit trail means something, and review the access list at a stated interval rather than at the end.

Production access as a named exception. Default to none. Where the work genuinely requires it, four properties: named individuals, a written reason, an audit trail of what was accessed, and an end date.

Revocation on the handover date. A contract term rather than a courtesy, and verified rather than assumed. Check the access list after the date. This is the step that gets skipped most often, because by then everybody has moved on and the vendor relationship was good.

What changes when a model writes the code

Most vendors in this market now generate code with a model. That does not make the arrangement less safe, and it moves where the safety comes from.

Generated code is not secure by default. The volume of change also rises, which means a review process that depended on a person reading every diff carefully stops working: attention does not scale with generation volume.

So the gate has to be mechanical. Checks derived from the specification, written before the code exists, and graded by something other than the model that produced the code. That is eval-driven development, and inside somebody else's production environment it is the difference between speed and liability.

What to ask a vendor. What share of delivered code is model-generated, what proves it correct, and who grades it. A vendor whose answer is that senior engineers review everything is describing a process that will not hold at volume.

The agent permission pattern worth copying

If a vendor runs agents inside your environment, and increasingly they will, there is a documented pattern worth insisting on.

Palantir's AI FDE documentation states that all operations respect existing user permissions, and that context starts minimal and expands as the user chooses, with complete authority and visibility over what the model can access.

The principle: an agent inherits the permissions of the person directing it rather than running on a broad service account. A service account with wide access is how a helpful agent becomes a breach, and it is the default configuration in most quick integrations because it is easier.

Ask: does any agent operating in our environment run under a named user's permissions or a service account, and what is that account's scope?

The paperwork that has to precede the access

Three clauses, covered fully on the contract page.

IP assignment, vesting on creation. An NDA covers secrecy and does not assign ownership of what the vendor creates. Two separate clauses, and you need both.

Subcontractor binding. Your agreement with a vendor does not bind a third party unless the vendor is required to flow the terms down. Ask who writes the code, by team and location, and who employs them.

Data handling, stated explicitly. What data leaves your environment, where it goes, and whether your data or code is used to train anything. Ask directly rather than relying on a general confidentiality clause.

What to do about regulated data

If the work touches regulated data, the constraint shapes the engagement rather than sitting beside it.

Decide early whether the data can leave. In many cases it cannot, which means the work happens inside your environment on your infrastructure, and that changes tooling, timelines and sometimes the vendor.

Agree the substitute if it cannot. Synthetic data, a masked subset, or a controlled environment. Agree it on day one, because discovering in week three that the substitute does not represent the real shape of the data wastes the weeks in between.

Involve your security and compliance people during procurement, not after. The most common cause of a production date slipping is a review nobody scheduled. Our compliance guides cover the sector-specific version: financial, healthcare, insurance and legal.

The pre-start checklist

Access list drafted and scoped to named repositories and named individuals. Production access decided, with an exception process if needed. IP assignment and subcontractor terms signed. Data handling agreed in writing, including training use. Agent permission model confirmed. Revocation date in the contract. Security review scheduled rather than assumed.

The thing not to do

Do not solve this by keeping the engineer at arm's length.

An embedded engineer without real access cannot do the job you are paying for: they will work from a description of your environment, and the description is wrong in the places that matter most. That produces a system that solves the described problem, which is the failure this whole model exists to prevent.

The answer is scoped access granted quickly, not broad access granted slowly and not narrow access defended forever. Least privilege is compatible with speed when somebody prepares the access list before day one, which is the customer-side work on this page.

Best for

  • Setting up access for an external engineer without weakening your security posture
  • Reviewing a vendor's agent and service-account practices
  • Planning an engagement that touches regulated data

Avoid if

  • You need the full contract term list rather than the access model

Verify before you commit

  • Confirm repository access is scoped to named repositories and named individuals
  • Confirm production access is an exception with a reason, audit trail and end date
  • Confirm any agent runs under a named user's permissions rather than a broad service account
  • Put revocation on the handover date in the contract, and check the access list after it

Common questions

What access should an embedded engineer be given?

Least privilege by default: the repositories the work touches, granted to named individuals rather than a shared account, with the list reviewed on an interval. Production access defaults to none, and where genuinely required it becomes a named exception with a written reason, an audit trail and an end date.

Does AI-generated code make an embedded engagement less safe?

It moves where the safety comes from. Generated code is not secure by default and the volume of change rises, so a process depending on a person reading every diff stops working because attention does not scale with volume. The gate has to be mechanical: checks derived from the specification and graded independently of the model that wrote the code.

How should agents be given access to our systems?

Under a named user's permissions rather than a broad service account. Palantir's own agent documentation describes respecting existing user permissions with context starting minimal and expanding as the user chooses. A wide-scoped service account is the easy default in quick integrations and it is how a helpful agent becomes a breach.

What paperwork has to precede access?

IP assignment vesting on creation, which is separate from the NDA since an NDA covers secrecy rather than ownership. Subcontractor binding, because your agreement does not bind a third party unless the vendor flows the terms down. And explicit data handling terms, including whether your data or code is used to train anything.

What if the work touches regulated data that cannot leave our environment?

Decide that early, because it changes tooling, timelines and sometimes the vendor. If the data cannot leave, agree the substitute on day one, whether synthetic data, a masked subset or a controlled environment. Discovering in week three that the substitute does not represent the real data wastes the weeks in between.

Can we just limit access tightly and be safe?

Not without losing what you are paying for. An embedded engineer without real access works from a description of your environment, and the description is wrong in exactly the places that matter, which produces a system solving the described problem rather than the real one. The answer is scoped access granted quickly.

More in Buying the capability

When forward deployed engineering is the wrong answer

Forward deployed engineering is expensive and it is often the wrong tool. It does not fit when your contract values cannot carry an engineer's time, when every customer wants the same thing, when you hold a fixed product opinion you will not change, or when the scope is something you can already write down. Each of those has a cheaper alternative that works better. There is also one failure mode that disqualifies the model after you have already started: the engagement with no end date, which has stopped being a deployment and become a dependency.

Forward deployed engineering as a service

There are three ways to get this capability: build the function in-house, staff individual engineers through a partner, or engage a firm that takes the outcome. Building gives you the most control and takes a hiring cycle plus two or three engagements of learning. Staffing is fastest to a body in a seat and leaves the delivery risk with you. Engaging a firm moves the delivery risk across the table, which only helps if the contract names the production outcome rather than an hour count. Most companies should build eventually and cannot start there.

How to choose a forward deployed engineering partner

Judge a forward deployed engineering partner on five things, in this order: which of the three jobs their engineers actually do, whether they will put a production date and a handover date in writing, what proves the code correct, how they decline work that only serves one customer, and who is accountable by name. A vendor who will not name a handover date is selling a dependency. A vendor with no answer on declining customisation will say yes to everything, and everything they say yes to becomes something you maintain.

Questions to ask a forward deployed engineering vendor

Twelve questions, each with the answer you want and the answer that should worry you. Five of them come from a16z partner Marc Andrusko, who wrote them as pressure tests for investors evaluating companies using this model; they work at least as well from the buyer's side of the table. The most revealing question on the list is how the vendor systematically declines customisation requests, because a vendor with no answer will say yes to everything and you will maintain all of it.

How to prepare your team for an embedded engineer

Three things have to exist before an embedded engineer starts, and all three are yours to provide: access provisioned and tested, one named person who can unblock, and one person with the authority to decline scope. The third is the one everybody forgets, and its absence is why engagements sprawl. Beyond that, the difference between a fast engagement and a slow one is mostly about how much context you share and how completely you include the person. Nobody writes this page, and it decides more outcomes than the vendor's methodology does.